エクセルVBAでテンプレートをコピーし翌月のカレンダーシートを生成する方法


スケジュール自動作成アイキャッチ

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

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

前回の記事はこちら

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

前回までは

  • 月間スケジュールの一覧をエクセル関数のみで作成する方法
  • カレンダーの日付をエクセル関数のみで表現する方法

をお伝えしてきました。

今回は、前回の記事で作成したカレンダーのテンプレートシートを、エクセルVBAでコピーしてシート名を変更する方法をお伝えします。

スケジュール表の自動作成はテンプレートのシートをコピーして、コピーしたシートに対して様々な編集を行っていく必要があるからです。

スポンサーリンク

エクセルVBAでスケジュールカレンダーを自動作成するために実現したいこと

『ボタンを押したら、ボタンを押した日の翌月のスケジュールが記載されたカレンダーを自動で作成する処理』をエクセルVBAで実現します。

最終的にはカレンダーの各日付の行に、その日にやるべきタスクを「月間スケジュールの一覧」から取得して表示させてあげる必要があります。

これまでの連載で作ってきたシートは、現状だと下記のキャプチャの状態です。①~④にこれからVBAで実現したいことを記載しました。

VBAでやりたいこと

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

今回の記事ではまず最初に

①のカレンダーのテンプレートシートをVBAで対象月用にコピーする方法

をお伝えします。

ちなみに①~④すべてが完了したときの完成イメージは以下の通りです。

完成イメージ

エクセルVBAでカレンダーのテンプレートシートを対象月用にコピーする

前回の記事で作成したカレンダーのテンプレートシートを、対象月用として扱うためにシートコピーする処理です。

シートをコピーする

シートをコピーする処理は、①の処理ですね。

ワークシートにオブジェクト名を付与する

ワークシートにはオブジェクト名をつけることが可能です。
オブジェクト名を事前につけて置くことでコーディングが非常にラクに、シンプルになりますので、まずは以下の記事を参考にオブジェクト名をつけてください。

【初心者向けエクセルVBA】ワークシートをオブジェクト名で取り扱う方法
初心者向けエクセルVBAで請求書を作成するシリーズ。今回は、エクセルVBAで頻繁に取り扱うワークシートを「オブジェクト名」を使って指定する方法です。オブジェクト名とは何か、またその編集方法もお伝えします。

今回は以下の名称でオブジェクト名をつけます。

ワークシート オブジェクト名
テンプレート wsTemplate
日付計算 wsDateList

“テンプレート”は今回の記事で紹介したカレンダーのテンプレートとなるワークシート、”日付計算”が以下の記事で作成した、エクセル関数を使用したスケジュールリストシートです。

エクセル関数だけで営業日を考慮した月間スケジュールを作成する方法
エクセル関数だけで営業日を考慮し、月間スケジュールを作成する方法をお伝えします。想定されるよくある日付パターンを、VBAを使用せずエクセル関数だけで計算。スケジュールリストを自動で作成します。

テンプレートシートをコピーする処理のサンプルコード

Public Sub template_Copy()
    'テンプレートシートをコピー
    wsTemplate.Copy after:=wsTemplate
End Sub

テンプレートシートをコピーする

テンプレートシートをコピーし、コピーしたワークシートの名前を変えるだけの処理です。

wsTemplate.Copy after:=wsTemplate

wsTemplateというオブジェクト名のワークシートを、そのシートの後ろ(after:=wsTemplate)にコピーしています。

ワークシートのコピーに関する詳細は以下の記事を参考にしてください。

【脱エクセルVBA初心者】新規のワークブックを作成、シートのコピーと名前の変更
エクセルVBAで「請求書を自動で作る」をテーマに、新規のワークブックを作成して請求書ひな形シートをコピーする方法、ワークシートのシート名を変更する方法、ブックやシートに関するTIPSについて書きました。

生成されたシートは以下の通りです!

テンプレートコピー

シートが正常にコピーされました。

コピーしたテンプレートシートの名前を変更する

単にコピーしただけなのでシート名が「テンプレート(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でシート名を変更しています。

シート名の変更は以下の記事で詳細を解説しています。

【脱エクセルVBA初心者】新規のワークブックを作成、シートのコピーと名前の変更
エクセルVBAで「請求書を自動で作る」をテーマに、新規のワークブックを作成して請求書ひな形シートをコピーする方法、ワークシートのシート名を変更する方法、ブックやシートに関するTIPSについて書きました。

Format関数の使い方は以下の記事を参考にしてください。

【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
エクセルVBAで文字列を連結する、文字列の書式を変更するなどの「文字列」に関するいくつかのテクニックを紹介しつつ、データ一覧から請求書を自動で作成するというシリーズ連載の序盤の完成を目指します。

実行すると・・・シート名が年月に変更されました!

シート名変更

まとめ

以上、冒頭で紹介した①の処理、エクセルVBAでテンプレートシートを当月用にコピーして、シートの名前を変更する方法をお伝えしました。

これまでエクセル関数のみで構築してきたシートをエクセルVBAでも使うことで、エクセルの機能をフルで活用することができます。

次回は②の開始日設定の方法をお伝えします。A1セルに対象月の「開始日」をVBAで自動入力し、B列全体を対象月の日付として反映させる処理です。

どうぞお楽しみに!

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

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

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