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


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

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

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

前回の記事はこちら

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

前回までは

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

をお伝えしてきました。

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

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

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

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

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

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

VBAでやりたいこと

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

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

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

をお伝えします。

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

完成イメージ

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

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

シートをコピーする

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

テンプレートコピー

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

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

単にコピーしただけなのでシート名が「テンプレート(2)」の状態となっています。これを、年月に変更します。

まずはサンプルコードです。
前述のサンプルコードに以下(シート名を変更するコードより下)を追記します。

基準日の翌月

日付計算シート内の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でカレンダーシートに翌月の日付を反映させる方法

  投稿者プロフィール

フジタニ
フジタニLibArt代表
複業エンジニアとして「フリーランス」、「会社員」の2つの視点で業務効率化を提案。VBAによる自動化はもちろん、ビジネスチャットの推進(電話が大嫌い。)などを日々行っています。自転車が大好きな、走れるエンジニアです!

コメント