オリジナルシート(月次更新2)

実際にプロシージャを使って月次更新

では必要なプロシージャが揃った所で月次更新を行っていきましょう。

(※プロシージャは処理を進める過程で追加する可能性もありますが…)

ではまずはシートをコピーしていきましょう。

ベースシートとベースシートをコピーしたシートを変数に入れる事で扱いやすくしていこうかと思います。

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関数をお勉強していきましょう。

<<オリジナルシート(月次更新)  Split関数>>

スポンサーリンク

シェアする

フォローする