Excel VBA 質問スレッド №2069 (未解決)
カレンダー制作について
投稿者 : 団子 投稿日時 : 2025/01/16(Thu) 13:56:24 OS : Windows 11 EXCEL : Office 365
『カレンダー制作について』(カフェ俺)
日付や日付によって色が変わるようなカレンダーをマクロで制作する場合、どのようなコードを立てればいいでしょうか?
カレンダーのイメージは、Windowsの右下から見えるカレンダーのような感じです。
前提:
年(D3セル)と、月(DEセル)を好きな数字で入力すれば一瞬で(B7:H12)のセルがその年/月に当てはまる日付に書き直されるようなコードを立てたい。
※ちなみに(B5:H5セル)に日曜から始まり、土曜日までが書かれているとする。よって、B列は日、C列は月、D列は火、E列は水、F列は木、G列は金、H列は土曜となる。
さらに、(B7:H12)セルの間に、その月だけの日付だけでなく、前月と来月の日付も反映されるようにしたい。
例えば、年セル(D3)に2025、月セル(E3)に1と書き換えたとしたら、(B7セル)は2024年12月29日(日曜日)から始まり、(E7セル)は2025年1月1日となり、(H12セル)は2025年2月の8日(土曜日)で終わるように。
?@そして、その入力された数字に、以下の要件を搭載したコードを反映させたい。
要件:
年/月に応じて、カレンダーの数値を入力するマクロは基本的な色分けは以下の通りとする。
平日:黒
土曜日:青色 (RGB(0,0,255))
日曜日、祝日:赤色(RGB(255,0,0))
土曜日の祝日:赤色を優先
前月、翌月の表示:灰色(祝日も全て灰色を優先する)RGB(200,200,200)
主に使用するメソッド
if
for
DateSerial:数値をdate型に変更
?Aさらに祝日名も反映させたい。
祝日は別に祝日シートがある状態です。
※余談として、すでに下のように(B7:H12)に1.2.3…と数字が入力されるコードは立てられている。
分かりづらく、難しいと思うのですがよろしくお願いします。
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
『カレンダー制作について』(カフェ俺)
日付や日付によって色が変わるようなカレンダーをマクロで制作する場合、どのようなコードを立てればいいでしょうか?
カレンダーのイメージは、Windowsの右下から見えるカレンダーのような感じです。
前提:
年(D3セル)と、月(DEセル)を好きな数字で入力すれば一瞬で(B7:H12)のセルがその年/月に当てはまる日付に書き直されるようなコードを立てたい。
※ちなみに(B5:H5セル)に日曜から始まり、土曜日までが書かれているとする。よって、B列は日、C列は月、D列は火、E列は水、F列は木、G列は金、H列は土曜となる。
さらに、(B7:H12)セルの間に、その月だけの日付だけでなく、前月と来月の日付も反映されるようにしたい。
例えば、年セル(D3)に2025、月セル(E3)に1と書き換えたとしたら、(B7セル)は2024年12月29日(日曜日)から始まり、(E7セル)は2025年1月1日となり、(H12セル)は2025年2月の8日(土曜日)で終わるように。
?@そして、その入力された数字に、以下の要件を搭載したコードを反映させたい。
要件:
年/月に応じて、カレンダーの数値を入力するマクロは基本的な色分けは以下の通りとする。
平日:黒
土曜日:青色 (RGB(0,0,255))
日曜日、祝日:赤色(RGB(255,0,0))
土曜日の祝日:赤色を優先
前月、翌月の表示:灰色(祝日も全て灰色を優先する)RGB(200,200,200)
主に使用するメソッド
if
for
DateSerial:数値をdate型に変更
?Aさらに祝日名も反映させたい。
祝日は別に祝日シートがある状態です。
※余談として、すでに下のように(B7:H12)に1.2.3…と数字が入力されるコードは立てられている。
Sub practice_14_1() For i = 1 To 7 For j = 1 To 7 Cells(i + 6, j + 1).Value = j + (i - 1) * 7 Next j Next i End Subdateserialを使うと聞いたのですが全く分からず、、
分かりづらく、難しいと思うのですがよろしくお願いします。
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
スポンサーリンク
[返信 1] Re : カレンダー制作について
投稿者 : 何何 投稿日時 : 2025/01/16(Thu) 14:17:11
>年(D3セル)と、月(DEセル)を好きな数字で入力すれば一瞬で(B7:H12)のセルがその年/月に当てはまる日付に書き直されるようなコードを立てたい。
まずは、これを数式で表示されるように考えては、考え方のきっかけになるかと
参考
ht tps://addinbox.sakura.ne.jp/CalendarTopic.htm#BOX
>年(D3セル)と、月(DEセル)を好きな数字で入力すれば一瞬で(B7:H12)のセルがその年/月に当てはまる日付に書き直されるようなコードを立てたい。
まずは、これを数式で表示されるように考えては、考え方のきっかけになるかと
参考
ht tps://addinbox.sakura.ne.jp/CalendarTopic.htm#BOX
[返信 2] Re : カレンダー制作について
投稿者 : 何何 投稿日時 : 2025/01/16(Thu) 14:20:47
マルチでした
https://www.excel.studio-kazu.jp/cgi-bin/kazuwiki2.cgi
マルチでした
https://www.excel.studio-kazu.jp/cgi-bin/kazuwiki2.cgi
[返信 3] Re : カレンダー制作について
投稿者 : 何何 投稿日時 : 2025/01/16(Thu) 14:58:48
http://www.vbalab.sakura.ne.jp/vbaqa/c-board.cgi?cmd=one;no=182;id=FAQ
注
B1に西暦年を書いておく
コードを張り付けたときエラーになるのでコメントにする
' ↑ ↑
'11月と12月は位置をづらして入れ替えてあります
http://www.vbalab.sakura.ne.jp/vbaqa/c-board.cgi?cmd=one;no=182;id=FAQ
注
B1に西暦年を書いておく
コードを張り付けたときエラーになるのでコメントにする
' ↑ ↑
'11月と12月は位置をづらして入れ替えてあります
[返信 4] Re : カレンダー制作について
投稿者 : さんこう 投稿日時 : 2025/01/16(Thu) 16:52:23
謎がおおいですが、参考になれば。
※「if」「for」「DateSerial」というメソッドは知らないので使っていません。
※「祝日名も反映させたい」とのことですが、どこに反映させればいいのか不明なので無視しています
※「祝日は別に祝日シートがある状態です」だけでは、どのように祝日を取得すればいいのか不明なので、祝日の色分けに対応していません
謎がおおいですが、参考になれば。
'シートモジュールへ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$3" Or Target.Address = "$E$3" Then Range("B7:H12").ShrinkToFit = True y = DateSerial(Range("D3"), Range("E3"), 1) d = y - Weekday(y) + 1 For r = 0 To 5 For c = 0 To 6 Cells(r + 7, c + 2) = Day(d) If r = 0 And c = 0 Then Cells(r + 7, c + 2) = Format(d, "yyyy年m月d日(aaaa)") If Month(d) = Range("E3") And Day(d) = 1 Then Cells(r + 7, c + 2) = Format(d, "yyyy年m月d日") If r = 5 And c = 6 Then Cells(r + 7, c + 2) = Format(d, "yyyy年m月のd日(aaaa)") With Cells(r + 7, c + 2).Font Select Case Weekday(d) Case 1: .Color = RGB(255, 0, 0) Case 2: .Color = vbBlack Case 3: .Color = vbBlack Case 4: .Color = vbBlack Case 5: .Color = vbBlack Case 6: .Color = vbBlack Case 7: .Color = RGB(0, 0, 255) End Select 'If d = 祝日 Then .Color = RGB(0, 0, 255) If Month(d) <> Range("E3") Then .Color = RGB(200, 200, 200) End With d = d + 1 For i = 1 To 1000: DoEvents: Next Next Next End If End Sub
※「if」「for」「DateSerial」というメソッドは知らないので使っていません。
※「祝日名も反映させたい」とのことですが、どこに反映させればいいのか不明なので無視しています
※「祝日は別に祝日シートがある状態です」だけでは、どのように祝日を取得すればいいのか不明なので、祝日の色分けに対応していません
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-02-07 23:28:01 )