みなさん、こんにちは!
フジタニ(@libartweb)です。
エクセルVBAとエクセル関数を組み合わせ、営業日を考慮したスケジュール表自動作成の方法をシリーズでお伝えしております。
前回の記事はこちら
前回の記事では、エクセルVBAを用いて、用意していたテンプレートのシートを、翌月用としてコピーし、シートの名前を変更する処理を紹介しました。
自動で月間のスケジュールを作成する準備が整いましたので、コピーしたカレンダーに対してこれからエクセルVBAで様々な編集を掛けていくことになります。
今回はその一歩としまして、エクセルVBAでコピーしたシートに翌月の日付を反映させる方法をお伝えいたします!
コピーしたシートに対して日付を反映させる
前回までのおさらいをすると、エクセルVBAで実現したいことは以下の4つありました。
① シート名が「テンプレート」のままなのでVBAでシートをコピーして対象月の名称にしたい。例:「201811」
② A1セルに対象月の「開始日」をVBAで自動入力し、B列全体を対象月の日付として反映させたい。 ⇒今回紹介します。
③ 土日祝日を判定し、VBAでその行に色をつけたい。
④ 各日付ごとのタスクをVBAで「日付計算」シートから取得して反映させたい。
前回の記事で①の紹介が終わりましたので、今回紹介するのは、②の「開始日を設定し、B列全体に対象月(翌月)の日付を反映させる方法」です。
早速ですが、今回のコードは以下の通り。
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でシートの保護を解除する場合は以下のメソッドを使用します。
'コピーしたシートの保護を解除
wsSchedule.Unprotect
詳細は以下の記事をご覧ください。
エクセルVBAでカレンダーに翌月の日付を反映させる
wsSchedule.Range("A1") = strStartDate
変数strStartDateは、前回の記事でシートの名前を変更する際に、使用した変数です。取得したのは「日付計算」シートの「基準日の翌月」でしたね。
その変数をここでも使用し、カレンダーのA1セルに開始日として(日付計算シート内のF5セル「基準日の翌月」)日付を設定しています。
これでテンプレートからコピーして対象月のカレンダーを作成することができました!
事前に関数が設定されていますので、A1セルに日付を入力することで、B列の日付とC列の曜日がすべて自動で反映されます。
B列とC列に設定されている関数は前々回の記事をご覧ください。
まとめ
以上、②の「開始日を設定し、B列全体に対象月(翌月)の日付を反映させる方法」をお伝えしました。
コピーされたテンプレートのシートに対して翌月の日付を反映させましたので、カレンダーとしてだんだんそれらしくなってきましたね。
次回は③の、「土日祝日を判定し、VBAでその行に色をつける方法」をお伝えします。
ここまで作成されたカレンダーは背景色が全部白ですので、土日祝日をわかりやすくするため、その行にのみ色をつけていきます。
どうぞお楽しみに!
連載目次:エクセルVBAで営業日を考慮したスケジュール表を自動で作成する
WORKDAY関数とエクセルVBAを組み合わせ、営業日を考慮したスケジュール表を自動作成する方法をお伝えします。 実務で使いこなすことができればとても便利なツールとして活用できるはずです!- エクセルで営業日判定を実現するWORKDAY関数の使い方
- エクセルVBAとWORKDAY関数の組み合わせでスケジュール表を自動作成する最初の一歩
- エクセル関数だけで営業日を考慮した月間スケジュールを作成する方法
- エクセル関数でスケジュール自動表示のためのカレンダーを作成する方法
- エクセルVBAでテンプレートをコピーし翌月のカレンダーシートを生成する方法
- エクセルVBAでカレンダーシートに翌月の日付を反映させる方法
- エクセルVBAのFunctionプロシージャで祝日判定関数を自作する方法
- エクセルVBAでカレンダーシートの土日祝日の行に背景色をつける方法
- エクセルVBAでカレンダーシートに自動でタスクを表示する方法