- ベストアンサー
VBAのヒントを(暦)
あるカレンダーがありまして、それを指定期間分、自動作成するVBA(Excel)を作りたいと思っています。 まずひとつは1~末日まで日数がありまして、それの特定の日(たとえば、日曜や○週目)のみにセルに色づけするというプログラムを作りたいと思っています。 もうひとつは普通にカレンダーを自動で作りたいんですが、アルゴリズムがよくわかっていません。両方とも手順について詳しく教えていただけると助かります。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
(1)特定の日を色付け 土曜日の例 A1:B1に2003と9をいれる。 Sub test03() s = DateSerial(Cells(1, 1), Cells(1, 2), 1) e = DateSerial(Cells(1, 1), Cells(1, 2) + 1, 1) - 1 j = 2 For i = s To e If Weekday(i) = 7 Then Cells(j, 1).Interior.ColorIndex = 6 End If Cells(j, 1) = j - 1 j = j + 1 Next i End Sub (3)普通にカレンダーを自動で作りたいんですが Sub test04() s = DateSerial(Cells(1, 1), Cells(1, 2), 1) e = DateSerial(Cells(1, 1), Cells(1, 2) + 1, 1) - 1 i = 2 For k = s To e w = Weekday(k) Cells(i, w) = k - s + 1 If w = 7 Then i = i + 1 End If Next k End Sub 説明をすっきりさせるため、12月の次ぎが年を+1、1月にすべきを考慮してませんが、組みこんでください。 If Cells(1, 2) = 12 Then e = DateSerial(Cells(1, 1) + 1, 1, 1) - 1 Else e = DateSerial(Cells(1, 1), Cells(1, 2) + 1, 1) - 1 End Ifのように。 (2)○週目)のみにセルに色づけするという WEEKNUM関数がワークシート関数で使えないので 工夫した。 Sub test05() s = DateSerial(Cells(1, 1), Cells(1, 2), 1) If Cells(1, 2) = 12 Then e = DateSerial(Cells(1, 1) + 1, 1, 1) - 1 Else e = DateSerial(Cells(1, 1), Cells(1, 2) + 1, 1) - 1 End If i = 2 wn = 1 For k = s To e w = Weekday(k) Cells(i, 1) = k - s + 1 i = i + 1 If w = 7 Then wn = wn + 1 End If If wn = 3 Then Cells(i, 1).Interior.ColorIndex = 6 End If Next k End Sub
その他の回答 (2)
- GuruGuru22
- ベストアンサー率51% (177/346)
こことか参考になるかと。
- popesyu
- ベストアンサー率36% (1782/4883)
1について 1~末日までのセルをループをかましてその都度判定すれば良いかなと。 具体的にはこんな感じ。 --- For Each C In Range("A1:A30") If Weekday(C) = 1 Then Range(C.Address).Interior.ColorIndex = 45 End If Next C --- A1からA30に日付があって、それを一つずつWeekday関数 でチェック。1の値が返ってきた(つまりは日曜日)セルのみオレンジ色にしています。 ○週ということであれば、Weekday関数で返って来る値をカウントすれば何週かが判定できるでしょう。 2について わざわざ一から作らなくても、既存の機能なりアドインを使えばいいんじゃないかなと思いますが。勉強がてらにやりたいということであれば別ですが。 アクセスやVBが既に入っていればカレンダーコントロールが付いてきてますし、それが無くてもフリーのアドインは幾らでもあります。
お礼
大変な作業をありがとうございました。ばっちりできそうなんですが、検証してわからない点があれば、もう一度お聞きしたいと思うのでしばらくお待ちいただけますか。