集計表シートのA1に、プログラムを
一度実行したら、同じ月に再度実行させ
ない為の識別文字列を記入する。
● Workbook_Openは、ファイルを開いたときにプログラムを実行する。
TM = Month(Date) ' 本日の日付関数から月を取出し、TM に代入する。
If TM = 12 And Sheets(集計表") .Range("A1") = 0 Then
' 今月が12月で集計表のA1が 0 なら
Sheets("集計表") .Range("A1") .Value = 1
' 集計表のA1を 1 にする。これは12月に一度実行したものを
' 再度実行させないための識別文字である。
GoTo Jump ' Jump へジャンプする。
End If
If TM = 11 Then Sheets("集計表") .Range("A1") .Value =
0
' これは、12月には必ず 0 になっているように、11月になったら
' 0 にしている。
Exit Sub ' 今月が12月でなかったらプログラムを終わる。
Jump : ' 今月が12月なら実行する。(これは、毎日開かないファイルでも
' 12月になって開くと、実行されるので12月中に開かれれば良い)
Sheets("集計表") .Select
intCol = Range("B3") .End(xlToRight) .Colmun
' B3データの右端の列番号を intCol に代入する。
' intCol = 8
intYar = Left(Cells(3, intCol), 4) ' 3行目の8列目の文字列の、左から4文字を intYar に代入する。
' intYar = 2018
Cells(3, intCol + 1). Value = intYer + 1 & "年"
' 3行目の9列目に記入する。2018+1 と年を。2019年である。
intN = intYar + 1 ' 新しく作るシート名を 2018 + 1 にする。
strN = intN ' 加算するために、intN の年は数値に定義しているが、シート名は
' 文字列が必要だから、string の定義に再度代入している。
Sheets .Add after : Sheets(Sheets .Count) ' 新しい Sheet2 シートができた。
strN3 = Range("A1") .Parent .Name ' 出来たシート名が何かわからないので、strN3
に代入して
' いる。
Sheets(strN3) .Name = strN ' Sheet2 を 2019にシート名を変更した。
strN4 = intYar ' 2018のシートに移動する必要があるので、intYar を文字列に代入
' している。
Sheets(strN4) .Select ' 2018シートを選択している。
Range("B2 : J16") .Select
Selection .Copy
Sheets(strN) .Select
Range("B2") .Select
Selection .PasteSpecial Paste : xlPasteFomats ,Operation : xlNone ,SkipBlanks : False , _
Transpose : = False
' B2に形式だけの貼り付けをする。枠線だけがコピーされる。
Range("C2") .Value = intN ' C2の年を書く位置に2019と書かれた。
Sheets(strN4) .Select
Range("B3:J3") .Select ' 2018のシートでB3からJ3までを
Selection .Copy ' コピーして
Sheets(strN) .Select ' 2019のシートを選択して
Range("B3") .Select
ActiveSheet .Paste ' B3に貼り付ける。(項目フィールド)
Range("D2") .Value = "年 1月度仕入" ' D2に一月と記入する。2019のシ−トには1月から12月までの
' データ範囲が必要なので、プログラムの追加が必要です。
Application .CutCopyMode = False ' コピーモードを終了する。
新しい2019年のシートが作成された時に、データ記入範囲の列も1月から12月まで同時に作成される。
実行プログラム
仕入データ集計表の、新しい年の列が作成されると同時に、新しいシートも作成される。
この表の様に、毎年12月になると来年度分の列が自動で作成される。
このように、1か月分のデータ列が9列で構成されていて、この位置は12月度だから
左側には11か月分のデータ列が存在する。
このシート見出しの様に、毎年分のシートが存在している。
2018シート内の12月度のデータ
この表は、一年間12ヶ月の各月の仕入データを集計したもので、毎年、列が増加してゆく
ここにはまだ、2019年のデータ列はない。2018年の12月の何日かには列が作成されて
いなくてはならない。
仕入データベース内のシート
年間の、月毎のデータを保存するデータベースの場合、12月になれば、来年の1月のデータを記入するシートが
必要になる。自分で作成するとなると、いつも気にしていなければならない。時期になれば、自動で作成してく
れて、シート名も記入してくれる。 (年間データベースの構造は実用コースで説明します。)
その考え方と、プログラムを見てみましょう。
仕入データベースの集計シート
基本的なマクロの習得
年間データ用シートを、毎年自動で作成してくれる。
実際に使っているシステムの内容で解説
EXCEL VBA 講座