みなさん、こんにちは!
フジタニ(@libartweb)です。
エクセルVBAとエクセル関数を組み合わせ、営業日を考慮したスケジュール表自動作成の方法をシリーズでお伝えしております。
前回の記事はこちら
前回までは
- 月間スケジュールの一覧をエクセル関数のみで作成する方法
- カレンダーの日付をエクセル関数のみで表現する方法
をお伝えしてきました。
今回は、前回の記事で作成したカレンダーのテンプレートシートを、エクセルVBAでコピーしてシート名を変更する方法をお伝えします。
スケジュール表の自動作成はテンプレートのシートをコピーして、コピーしたシートに対して様々な編集を行っていく必要があるからです。
エクセルVBAでスケジュールカレンダーを自動作成するために実現したいこと
『ボタンを押したら、ボタンを押した日の翌月のスケジュールが記載されたカレンダーを自動で作成する処理』をエクセルVBAで実現します。
最終的にはカレンダーの各日付の行に、その日にやるべきタスクを「月間スケジュールの一覧」から取得して表示させてあげる必要があります。
これまでの連載で作ってきたシートは、現状だと下記のキャプチャの状態です。①~④にこれからVBAで実現したいことを記載しました。
① シート名が「テンプレート」のままなのでVBAでシートをコピーして対象月の名称にしたい。例:「201811」 ⇒今回紹介します。
② A1セルに対象月の「開始日」をVBAで自動入力し、B列全体を対象月の日付として反映させたい。
③ 土日祝日を判定し、VBAでその行に色をつけたい。
④ 各日付ごとのタスクをVBAで「日付計算」シートから取得して反映させたい。
今回の記事ではまず最初に
①のカレンダーのテンプレートシートをVBAで対象月用にコピーする方法
をお伝えします。
ちなみに①~④すべてが完了したときの完成イメージは以下の通りです。
エクセルVBAでカレンダーのテンプレートシートを対象月用にコピーする
前回の記事で作成したカレンダーのテンプレートシートを、対象月用として扱うためにシートコピーする処理です。
シートをコピーする処理は、①の処理ですね。
ワークシートにオブジェクト名を付与する
ワークシートにはオブジェクト名をつけることが可能です。
オブジェクト名を事前につけて置くことでコーディングが非常にラクに、シンプルになりますので、まずは以下の記事を参考にオブジェクト名をつけてください。
今回は以下の名称でオブジェクト名をつけます。
ワークシート | オブジェクト名 |
---|---|
テンプレート | wsTemplate |
日付計算 | wsDateList |
“テンプレート”は今回の記事で紹介したカレンダーのテンプレートとなるワークシート、”日付計算”が以下の記事で作成した、エクセル関数を使用したスケジュールリストシートです。
テンプレートシートをコピーする処理のサンプルコード
Public Sub template_Copy()
'テンプレートシートをコピー
wsTemplate.Copy after:=wsTemplate
End Sub
テンプレートシートをコピーする
テンプレートシートをコピーし、コピーしたワークシートの名前を変えるだけの処理です。
wsTemplate.Copy after:=wsTemplate
wsTemplateというオブジェクト名のワークシートを、そのシートの後ろ(after:=wsTemplate)にコピーしています。
ワークシートのコピーに関する詳細は以下の記事を参考にしてください。
生成されたシートは以下の通りです!
シートが正常にコピーされました。
コピーしたテンプレートシートの名前を変更する
単にコピーしただけなのでシート名が「テンプレート(2)」の状態となっています。これを、年月に変更します。
まずはサンプルコードです。
前述のサンプルコードに以下(シート名を変更するコードより下)を追記します。
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) 'コピーしたシートをオブジェクト変数に格納
End Sub
日付計算シート内のF5セル「基準日の翌月」の日付を取得しFormat関数で”yyyymm”に変換し、変数strSheetNameに格納しています。
基準日の翌月を取得した時点ではyyyy/mm/ddの書式なので、これをFormat関数でyyyymmに変換しました。
strSheetNameの中身はyyyymmとなっており、ActiveSheet.Name = strSheetNameでシート名を変更しています。
シート名の変更は以下の記事で詳細を解説しています。
Format関数の使い方は以下の記事を参考にしてください。
実行すると・・・シート名が年月に変更されました!
まとめ
以上、冒頭で紹介した①の処理、エクセルVBAでテンプレートシートを当月用にコピーして、シートの名前を変更する方法をお伝えしました。
これまでエクセル関数のみで構築してきたシートをエクセルVBAでも使うことで、エクセルの機能をフルで活用することができます。
次回は②の開始日設定の方法をお伝えします。A1セルに対象月の「開始日」をVBAで自動入力し、B列全体を対象月の日付として反映させる処理です。
どうぞお楽しみに!
連載目次:エクセルVBAで営業日を考慮したスケジュール表を自動で作成する
WORKDAY関数とエクセルVBAを組み合わせ、営業日を考慮したスケジュール表を自動作成する方法をお伝えします。 実務で使いこなすことができればとても便利なツールとして活用できるはずです!- エクセルで営業日判定を実現するWORKDAY関数の使い方
- エクセルVBAとWORKDAY関数の組み合わせでスケジュール表を自動作成する最初の一歩
- エクセル関数だけで営業日を考慮した月間スケジュールを作成する方法
- エクセル関数でスケジュール自動表示のためのカレンダーを作成する方法
- エクセルVBAでテンプレートをコピーし翌月のカレンダーシートを生成する方法
- エクセルVBAでカレンダーシートに翌月の日付を反映させる方法
- エクセルVBAのFunctionプロシージャで祝日判定関数を自作する方法
- エクセルVBAでカレンダーシートの土日祝日の行に背景色をつける方法
- エクセルVBAでカレンダーシートに自動でタスクを表示する方法