見出し画像

0から始めるExcel VBA講座(23): カレンダー作成マクロ(17):11シートを追加する

今回は、1月のシートの大枠が完成したので、2月~12月までのシートを追加していきます。ここは、今までと違って、かなりプログラミングぽくなってくるので、ここのマクロを作る事ができれば、プログラミングがかなり楽しくなってくると思います。

では最初に、カレンダー作成マクロ_1.5.xlsmを開き、ファイル名をカレンダー作成マクロ_1.6.xlsmに変更して保存してください。

次にModule15をModule15を挿入してください。Module15に「Sub Set_Columns()」として「Enter」キーを押してください。その後、下記のようにコメントを書いてください。

今回は、1月~12月のシートを追加し、各シートのシート名は、その月になるように変更します。

また、下記のような「年+月の」入力を行います。

また、下記のように「メモ」というテキストも入力していきます。

このマクロで実行する事を箇条書きにすると、以下のようになります。
1) 2月~11月分のシートを追加
2) 2月のシートのシート名は2月に、3月のシートのシート名は3月になるように、各シート名を変更
3) 各シートに、「年+月」のテキストを入力
4) 各シートに、「メモ」のテキストを入力

まず始めに、1月のシートに、「年+月」のテキストを入力していきます。

2023年度のカレンダーだけ作るのであれば、「2023年1月」とプログラム内で記述すれば良いです。しかし、「0から始めるExcel VBA講座(13)」で、年のプルダウンメニューを作成した際に、2021年~2041年まで作成できるようにしています。

よって、年の部分は変化できるようにしておく必要があります。では、どうすれば良いと思いますか?ちょっと、わからないですよね。これから、ちょっとだけ、プログラミングぽい説明をしていきます。

まず、「年」の値を入れる箱を準備します。その箱の名前を「Data_Year」とします。この「Data_Year」の中に、「カレンダー作成」シートの「B6」の年の値を入れる事にします。イメージ的には、下記のようになります。

「Data_Year」の中に、「カレンダー作成」シートの「B6」の年の値を入れるという部分を、VBAで表記すると、以下のようになります。

Data_Year =Range("B6")

ここで使う「=」は、どちらかというと「←」のような意味合いになります。「Data_Year ←Range("B6")」となり、Range("B6")の値をData_Yearに入れるという意味になります。もし、Range("B6")のセルに、「2023年」という値が入っていたら、Data_Yearには「2023年」が入ります。

プログラミングでは、この「Data_Year」の部分を変数と言います。学校の数学で習う、xやyのようなものだと思ってく下さい。

年の値を取得できました。今度は、「2023年1月」のように表現できるようにします。では、どうしたら良いでしょうか? 1月、2月、3月~12月と月の表記は年によって変化しないですよね。よって、月の表記はそのまま使っていきます。

2023年1月という表記は、「年+月」ですよね。だから「2023年1月」と、プログラム上で表記する時は、「Data_Year+"1月"」と表記します。先ほど、「Data_Year」には、「2023年」が入っていたので、「Data_Year+"1月"」と表現すると、実際の値は「2023年1月」となります。

この「2023年1月」という値を、1月のシートのB3のセルに入れたいと思います。どのようにすれば良いでしょうか?まずは、1月のシートを開きます。そして、B3のセルに値を入れたい場合は、「Range("B3")=Data_Year+"1月"」と書きます。

これで、任意のセルから取得した値を変数に入れる方法と、特定の値を任意のセルに入力する方法は理解できたと思います。

シート名を追加する方法は、下記の記事を再度読んでみて下さい。

シート名の変更については、下記の記事を再度読んでみて下さい。

「メモ」という文字をセルに入力する方法については、下記の記事を再度読んでみて下さい。

ここから再度、プログラミングぽい説明をしていきます。
今から、For~Nextという繰り返し処理の説明をしていきます。

まずは、下記のマクロをコピーして、実行してみて下さい。

Sub For_Next_Sample()

    For i = 1 To 10
    
        Range("A" & i) = i
    
    Next
    
End Sub

そうすると、下記のよう結果が得られます。

「i]の部分には、1、2、3…と10と順番に数字が入っていきます。「i=1」の時、1が「Range("A"&i)」のiの部分に入って、実際には「Range(A1)」を示すようになります。「Range("A"&i)=i」の部分は、実際には「Range(A1)=1」になって、A1のセルに1が入力される事になります。

「i」が、2、3..と変わっていった時に、どのようになっていくのか、頭で理解できるのではないかと思います。

もし言葉でわからなければ、コードと結果を見て、プログラムがのどのように実行されていくのか、考えてみて下さい。

このFor~Nextをどう使っていくかというと、2月~12月分のシートを追加、言い換えれば11回シートを追加するのに使っていきます。

では、今回みなさんにマクロに書いて頂きたい内容を以下に記載致します。
1) 2月~11月分のシートを追加
2) 2月のシートのシート名は2月に、3月のシートのシート名は3月になるように、各シート名を変更
3) 各シートのB3のセルに、「年+月」のテキストを入力、その際に、下記のよう設定して下さい。
 ・セルを書式設定を文字列に設定
 ・フォントのサイズを40に設定
 ・フォントをHGP教科書体に設定
 ・太字に設定
 ・テキストの色をRGB(198, 224, 180)に設定
4) 各シートに、「メモ」のテキストを入力
 ・D15のセルに「メモ」と入力
 ・フォントのサイズを10に設定
 ・フォントをHGP教科書体に設定
 ・太字に設定
 ・テキストの色をRGB(198, 224, 180)に設定

セルの書式設定をするには、「Range(範囲).NumberFormatLocal=値」となります。例えば、A1セルのフォーマットを「G/標準」にしたい場合は、下記のようになります。

Range("A1").NumberFormatLocal = "G/標準"

では、セルのフォーマットを文字列にするにはどうすれば良いでしょうか?
インターネットで調べて、どのようにセルのフォーマットを文字列に設定するのか、調べてみて下さい。

文字列のフォントをサイズの変更の仕方がわからない場合は、下記の記事を読み返してみて下さい。

文字の書式を設定する場合には、「Range(範囲).Font.Name = "書式名"となります。例えば、A1セルの書体をMS Pゴシックにする場合は、以下のようになります。

Range("A1").Font.Name = "MS Pゴシック"

今回は「HGP教科書体」に設定したいので、どのように書けば良いかわかりますよね。

テキストを太字にする方法がわからない場合は、下記の記事を参考にして下さい。

今回は、テキストの色を変更する際に、「Range(範囲).Font.Color = RGB(赤:Red, 緑:Green, 青:Blue)」という書き方をしていきたいと思います。例えば、A1セルのテキストを赤字に設定したい場合は、下記のようになります。

Range("A1").Font.Color = RGB(255, 0, 0)

今回使用する色は「RGB(198, 224, 180)」なので、どのように書けば良いかわかりますよね。

今回のマクロを記載するのに必要な情報は、セルのフォーマットを文字列に定義する部分を除き、全てここに記載しています。

今回は、今までと違い、かなりマクロを書くのが大変だと思いますが、頑張って書いてみて下さい。

ヒント:Excelの複数あるシートの中から任意のシートを開く場合は、「Sheets(Sheet名).Select」という表現方法を使います。

今回の作業は以上になります。

お疲れさまでした。

この記事が気に入ったらサポートをしてみませんか?