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


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

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

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

前回の記事はこちら

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

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

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

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

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

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

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

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

VBAでやりたいこと

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

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

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

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

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

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

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

Worksheetオブジェクト.Unprotect

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

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

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

変数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でカレンダーシートに自動でタスクを表示する方法

  投稿者プロフィール

フジタニ
フジタニLibArt代表
手作業でやってるものは何でも自動化したくなる性格。毎日VBAで何でもかんでも自動化しています。
電話が大嫌いなのでビジネスチャットを布教したい!
海外へよく行きます。自転車が大好き。走れるエンジニアです!

コメント