こんにちは、ヒガシです。
今回はエクセルVBAを使って、以下の画像のように2023年度の年間カレンダーを一発作成する方法をご紹介していこうと思います。
基本的には後で紹介するVBAコードをあなたの環境に張り付けて実行するだけでOKです。
それではさっそくやっていきましょう!
VBAの実行環境を構築しておく
VBAの実行環境を構築しておく
今回はVBAというエクセルにあらかじめ備わっている機能をつかってカレンダー作成を行っていきます。
VBAをつかったことがない人は、まずは以下の記事を参考にVBAの実行環境を構築してみましょう。
エクセルマクロ(VBA)の始め方!初心者向けに画像を使って詳細解説
年間カレンダーを一発作成する方法
それでは、今回の本題である年間カレンダーを一発作成するVBAコードをご紹介していきます。
以下がそのサンプルコードです。
Sub make_calendar_2023()
Dim day_data As String, start_day As String
Dim day_number As Integer, i As Integer
'作成領域をクリアする
Range("A1:CF8").ClearContents
'曜日データを構築(月からでもOK)
Week = "日,月,火,水,木,金,土"
'各月の日数を指定しておく(4月から)うるう年なら変更する
' 4 5 6 7 8 9 10 11 12 1 2 3
Days = "30,31,30,31,31,30,31,30,31,31,29,31"
'開始曜日を指定(4/1の曜日を指定)
start_day = "土"
For j = 0 To 11
'月の総日数を指定
day_number = Split(Days, ",")(j)
'カレンダー作成開始
Cells(1, 1 + j * 7) = (j + 4) Mod 12 & "月"
For i = 0 To 6
Cells(2, i + 1 + j * 7) = Split(Week, ",")(i)
If Split(Week, ",")(i) = start_day Then
col = i + 1
End If
Next
ddd = 7 - col
rrr = 3
i = 1
Do Until i = day_number + 1
If i <= ddd + 1 Then
Cells(rrr, col + j * 7) = i
i = i + 1
col = col + 1
sd = (col - 1) Mod 7
Else
ddd = ddd + 7
col = 1
rrr = rrr + 1
End If
Loop
start_day = Split(Week, ",")(sd)
'月ごとに枠線を追加する
With Range(Cells(2, 1 + j * 7), Cells(8, 1 + j * 7 + 6))
.Borders.Weight = xlThin
.BorderAround Weight:=xlMedium
End With
Next
End Sub
こいつを実行すると冒頭に紹介したように年間カレンダーを一発作成してくれます。
※このマクロを実行すると上から8行分は強制的に上書きされます。
実行前に大事なデータが残っていないかよくご確認の上、実行してください。
カレンダー作成マクロの応用方法
先ほどのコードでは、日曜スタートになっていましたが、月曜スタートに変更することも可能です。
Week = “日,月,火,水,木,金,土”の部分を
Week = “月,火,水,木,金,土,日”に変更して実行するだけでOKです。
非常に簡単ですね。
ぜひいろいろ変更しながら試してもらえればと思います。
おわりに
というわけで今回は、エクセルVBAをつかって2023年度版カレンダーを作成する方法をご紹介しました。
ぜひ業務効率化にご活用ください。
このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
ぜひ他の記事ものぞいてみてください。
それではまた!
コメント