シートの月次更新
いきなり話が飛躍してしまうかも知れませんが、そもそも僕のサイトのコンセプトは基礎をしっかり押さえるよりも取り敢えず動かして楽しむことなのでやってみましょう。
ワークシートのコピー
月次更新にはワークシートのコピーを行った方が遥かに楽に処理できます。ワークシートのコピーにはCopyというメソッドを使います。
例えば今操作しているシートを今操作しているシートの後ろにコピーする場合はこのように記述します。
ActiveSheet.copy After:=ActiveSheet
図解するとこの様になります。
こうですね。今操作しているシートの前にコピーしたい場合はBefor:=ActiveSheetと記述すればOKです。
では実際に下図のような表があったとしてそれを月次更新してみましょう。
簡単な売り上げ表ですね。
ただし、E列とD列の日付・曜日の所には数式を入れて年と月に設定されているセルの値が変わったら日付も自動で変わる様にしてあります。セルの書式設定により土曜日曜は色が変わる様にしてあります。
同様に合計・平均・粗利も数式を入れてあります。
つまり今回のシートでは月次更新の時に更新しなければならないのは「年」「月」「仕入」「売上」の箇所という条件です。
月次更新のやり方はこれだけではありませんが僕が思う簡単な方法をチョイスしています。
それらを踏まえて月次更新を考えてみましょう。
必要箇所を変数にセット
変数にセットすると便利そうなのは
変動する値の「年」「月」「仕入・売上」のあたりですね。という事で早速変数にセットしてみましょう。
- targetYear … 対象となる月
- targetMonth … 対象となる月
- inputPlace … 入力箇所(Rangeで指定する中身の部分)
今回はこのような感じで変数の命名をしました。何となく想像つきますよね?変数の名前に意味を持たせると可読性が増すので後々メンテナンスしやすくなります。長すぎず意味が分かりやすい名前を付けると便利なのがお分かり頂けると思います。
変数に値をセット
ここで気を付けなければいけないのはRangeで指定する中身は文字列で作られているのでひとまず文字列を入れておこうか。という所ですね。今回のケースはそもそも変数がString型なので間違ってRangeを入れるとエラーになってしまいます。
シートコピー、入力箇所の初期化
ワークシートのコピーは冒頭で行った通りですね。
Rangeの値を削除したい時はClearContentsというメソッドを使用すれば大丈夫です。
ただし、ClearContentsで削除できるのは値のみでコメント等は削除できません。
今回は値だけを削除したいのでClearContentsを使用しています。
シート名・年・月を変更
これが出来れば完成ですね。これらを行うためには一度単なる数値や文字列でしかないこれらの情報を一度日付に変換する必要があります。
変数を一つ足して値をセットしてみましょう。
足したのはdatesというDate型の変数ですね。
これに一度現在のシートの日付を入れます。
更にDateAdd関数を使用して1か月後の日付を再度入れ直します。
もちろん一度ですべてを行う事も出来ますが、一度にやろうとすると横に長くなる上に可読性が下がりますので今回は2回に分けました。
処理を完了させましょう
先程作ったdatesという変数に日付情報が入っているだけで後はYearとMonthを使用すれば「年」「月」「シート名」が編集出来てしまいます。
更にそれを使用してメッセージを出せばそれっぽいですよね?
これをボタンとなる図形に登録すれば無事、月次更新の完成です。
全文を載せておきます。最初はコピペでも構いませんが、動かしながらステップ実行してみると理解が深まるのではないかと思います。
Sub next_month() Dim targetYear As Integer Dim targetMonth As Byte Dim inputPlace As String Dim dates As Date targetYear = Cells(2, 3).Value targetMonth = Cells(3, 3).Value inputPlace = "g3:h33" ActiveSheet.Copy after:=ActiveSheet Range(inputPlace).ClearContents dates = targetYear & "/" & targetMonth & "/" & 1 dates = DateAdd("m", 1, dates) Cells(2, 3).Value = Year(dates) Cells(3, 3).Value = Month(dates) ActiveSheet.Name = Year(dates) & "." & Month(dates) MsgBox Year(dates) & "." & Month(dates) & "月シート作成完了" End Sub
では次回は今回の内容で少し触れたDateAdd関数についてもう少し深く触れていきましょう。