実際にプロシージャを使って月次更新
では必要なプロシージャが揃った所で月次更新を行っていきましょう。
(※プロシージャは処理を進める過程で追加する可能性もありますが…)
ではまずはシートをコピーしていきましょう。
ベースシートとベースシートをコピーしたシートを変数に入れる事で扱いやすくしていこうかと思います。
Sub next_month() Dim a_sheet As Worksheet '更新済みのシート格納 Dim b_sheet As Worksheet 'ベースシート Dim y As Integer '年 Dim m As Byte '月 Dim s_name As String 'シートの名前 y = CInt(InputBox("更新年度入力")) m = CByte(InputBox("更新月度入力(1~12)")) s_name = y & "." & m Set b_sheet = Worksheets("base") b_sheet.Copy after:=ActiveSheet Set a_sheet = ActiveSheet a_sheet.Name = s_name '↑ここまでで新しいシートの作成 '↓何か値が入っていることも加味してクリアをかける days_clear InputSpace_clear With a_sheet .Cells(2, 3).Value = Split(s_name, ".")(0) .Cells(3, 3).Value = Split(s_name, ".")(1) End With MsgBox "更新完了" End Sub
今回は処理自体がある程度簡潔に済むように年度と月度の入力で2回に分けてInputBoxを使用していますが、With a_sheetの下で行っているようにSplit関数を使用すれば一度のInputBoxで済むように書くこともできます。
ちなみにCInt関数は引数に与えたものをInteger型に変換してくれます。
同じくCByte関数も引数に与えたものをByte型に変換してくれます。
何故この様な処理を挟んだのかというと入力者によって「全角の数字」が入ってくる可能性があると考えたからです。
別の手法で半角数字にする方法もありますが、今回はこのような手法を用いました。
新しいシートが出来た所で、前回までに作ったプロシージャを実行しているのですが、プロシージャの中でプロシージャを呼びたい時はコードの中で行っているように単純にプロシージャ名を入力するだけでOKです。
という事で月次更新ができた所で次回は今回使っているSplit関数をお勉強していきましょう。