エクセルVBAでカレンダーシートに翌月の日付を反映させる方法


カレンダーに日付を反映させるアイキャッチ

みなさん、こんにちは!
フジタニ(@libartweb)です。

エクセルVBAとエクセル関数を組み合わせ、営業日を考慮したスケジュール表自動作成の方法をシリーズでお伝えしております。

前回の記事はこちら

エクセルVBAでテンプレートをコピーし翌月のカレンダーシートを生成する方法
エクセルVBAでカレンダーのテンプレートシートをコピーし名前を変更する方法をお伝えします。スケジュール表自動作成のために必要なカレンダーをエクセルVBAで作成していきます。

前回の記事では、エクセルVBAを用いて、用意していたテンプレートのシートを、翌月用としてコピーし、シートの名前を変更する処理を紹介しました。

自動で月間のスケジュールを作成する準備が整いましたので、コピーしたカレンダーに対してこれからエクセルVBAで様々な編集を掛けていくことになります。

今回はその一歩としまして、エクセルVBAでコピーしたシートに翌月の日付を反映させる方法をお伝えいたします!

スポンサーリンク

コピーしたシートに対して日付を反映させる

前回までのおさらいをすると、エクセルVBAで実現したいことは以下の4つありました。

① シート名が「テンプレート」のままなのでVBAでシートをコピーして対象月の名称にしたい。例:「201811」
A1セルに対象月の「開始日」をVBAで自動入力し、B列全体を対象月の日付として反映させたい。 ⇒今回紹介します。
③ 土日祝日を判定し、VBAでその行に色をつけたい。
④ 各日付ごとのタスクをVBAで「日付計算」シートから取得して反映させたい。

前回の記事で①の紹介が終わりましたので、今回紹介するのは、②の「開始日を設定し、B列全体に対象月(翌月)の日付を反映させる方法」です。

VBAでやりたいこと

早速ですが、今回のコードは以下の通り。

Public Sub template_Copy()
    '====================================
    '前回の記事で紹介したソースコード
    '====================================
    'テンプレートシートをコピー
    wsTemplate.Copy after:=wsTemplate
    Dim strStartDate As String '開始日
    Dim strSheetName As String 'シート名
    
    strStartDate = wsDateList.Range("F5") '基準日の翌月(VBAを実行した日の翌月となる)
    strSheetName = Format(strStartDate, "yyyymm") '基準日の翌月をFormat関数で変換
    ActiveSheet.Name = strSheetName 'シートの名前を変更
    
    Dim wsSchedule As Worksheet
    Set wsSchedule = ThisWorkbook.Worksheets(strSheetName) 'コピーしたシートをオブジェクト変数に格納

    '====================================
    '今回紹介するソースコード
    '====================================
    'コピーしたシートの保護を解除
    wsSchedule.Unprotect
    'カレンダーの「開始日」に日付計算シートの「基準日の翌月」を反映
    wsSchedule.Range("A1") = strStartDate
   
End Sub

シートの保護を解除し、A1セルに、「開始日」となる日付を自動で設定する処理です。一つずつ、解説していきます。

エクセルVBAでシートの保護を解除する

テンプレートシートには事前に”シートの保護”をかけておきましょう。

テンプレートなので、何かの拍子に壊してしまうとスケジュール自動作成の処理に影響がでるからです。

エクセルVBAでテンプレートのシートに対して何らかの処理を行う際のみ、自動でシートの保護を解除するようにすれば、テンプレートシートを壊す心配はありません。

エクセルVBAでシートの保護を解除する場合は以下のメソッドを使用します。

Worksheetオブジェクト.Unprotect
'コピーしたシートの保護を解除
wsSchedule.Unprotect

詳細は以下の記事をご覧ください。

エクセルVBAによる運用業務で人為的ミスを減らす4つの方法
エクセルVBAを運用業務で活用されている方必見!人為的ミスを大幅に減らす4つの方法を紹介します。エクセルVBAはメイン処理に偏らず人為的ミスを想定したコーディングが業務効率化に繋がります。
【エクセルVBA】Protect/Unprotectメソッドでシートの保護設定と解除をする方法
ProtectメソッドとUnprotectメソッドを使って、VBAでシートの保護を設定したり、解除したりする方法をご紹介しています。VBAで作成したレポートを変更させたくない!という時にこのメソッドを加えておけば、シートの保護までVBAがやってくれますよ。シートの保護を忘れずに設定したい!という時におすすめです。

エクセルVBAでカレンダーに翌月の日付を反映させる

wsSchedule.Range("A1") = strStartDate

変数strStartDateは、前回の記事でシートの名前を変更する際に、使用した変数です。取得したのは「日付計算」シートの「基準日の翌月」でしたね。

基準日の翌月

その変数をここでも使用し、カレンダーのA1セルに開始日として(日付計算シート内のF5セル「基準日の翌月」)日付を設定しています。

これでテンプレートからコピーして対象月のカレンダーを作成することができました!

カレンダー設定

事前に関数が設定されていますので、A1セルに日付を入力することで、B列の日付とC列の曜日がすべて自動で反映されます。

B列とC列に設定されている関数は前々回の記事をご覧ください。

エクセル関数でスケジュール自動表示のためのカレンダーを作成する方法
エクセル関数のみでカレンダーのテンプレートとなるシートを作成しそれを安全に運用していく方法をお伝えします。テンプレートは対象月のカレンダーを作成するために必要なシートで、スケジュール自動作成を行うための前準備です。

まとめ

以上、②の「開始日を設定し、B列全体に対象月(翌月)の日付を反映させる方法」をお伝えしました。

コピーされたテンプレートのシートに対して翌月の日付を反映させましたので、カレンダーとしてだんだんそれらしくなってきましたね。

次回は③の、「土日祝日を判定し、VBAでその行に色をつける方法」をお伝えします。

ここまで作成されたカレンダーは背景色が全部白ですので、土日祝日をわかりやすくするため、その行にのみ色をつけていきます。

どうぞお楽しみに!

連載目次:エクセルVBAで営業日を考慮したスケジュール表を自動で作成する

WORKDAY関数とエクセルVBAを組み合わせ、営業日を考慮したスケジュール表を自動作成する方法をお伝えします。 実務で使いこなすことができればとても便利なツールとして活用できるはずです!
  1. エクセルで営業日判定を実現するWORKDAY関数の使い方
  2. エクセルVBAとWORKDAY関数の組み合わせでスケジュール表を自動作成する最初の一歩
  3. エクセル関数だけで営業日を考慮した月間スケジュールを作成する方法
  4. エクセル関数でスケジュール自動表示のためのカレンダーを作成する方法
  5. エクセルVBAでテンプレートをコピーし翌月のカレンダーシートを生成する方法
  6. エクセルVBAでカレンダーシートに翌月の日付を反映させる方法
  7. エクセルVBAのFunctionプロシージャで祝日判定関数を自作する方法
  8. エクセルVBAでカレンダーシートの土日祝日の行に背景色をつける方法
  9. エクセルVBAでカレンダーシートに自動でタスクを表示する方法

タイトルとURLをコピーしました