- ベストアンサー
土日に加えた日の列幅変更マクロを教えてください。
エクセルで行事入力表を毎月作成しています。 D4からAG4までに1日から31日の日付を入れ、土日は行事がないので、 教えていただいた下のマクロの実行で列幅を縮小しています。 Sub Macro1() Dim idx As Integer For idx = 4 To 34 If Weekday(Cells(4, idx).Value) = vbSunday Or _ Weekday(Cells(4, idx).Value) = vbSaturday Then Columns(idx).ColumnWidth = 1.5 End If Next End Sub これに、お盆や正月の行事のない日(会社の休日)を加えたいのですが、出来るでしょうか。 行事のない日付は、AK4からAK15に予め入力しています。 どなたか、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Range("AK4:AK15").Find(Cells(4, idx).Value, LookAt:=xlWhole) でAK4:AK15の範囲にデータがあるかないか判断できるので、これを条件に付け加えてあげればOKです。 Sub Macro1() Dim idx As Integer For idx = 4 To 34 If Weekday(Cells(4, idx).Value) = vbSunday Or _ Weekday(Cells(4, idx).Value) = vbSaturday Or _ Not Range("AK4:AK15").Find(Cells(4, idx).Value, LookAt:=xlWhole) Is Nothing Then Columns(idx).ColumnWidth = 1.5 End If Next End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
この質問は丸投げです。結局無理をして、前質問で回答をコピペだけしているのでこうなる。 今回は曜日関数を使う、では役立たないのはわかるでしょう。 別途、その日が、>AK4からAK15に予め入力しています、の月日に当たるか判別すれば良い。質問に書いてないが>AK4からAK15に予め入力している、日は月+日だろうね。 (1)このシートのC1にでも月数字があるとして(今回2009年1月としてC1に1を入れておく) (2)AK列に4御意行目以下に 祝日+会社休業日 1/1 1/2 1/3 1/15 ・・・ があるとして 標準モジュールに、関数を下のように作る Function Shuku(a) For i = 4 To 15 If Cells(i, "AK") = a Then Shuku = True Exit Function End If Next i Shuku = False End Function ーーー 本体は Sub Macro1() Dim idx As Integer For idx = 4 To 34 tuki = Cells(1, "C") hi = Day(Cells(4, idx)) a = tuki & "/" & hi MsgBox a MsgBox Shuku(a) If Weekday(Cells(4, idx).Value) = vbSunday Or _ Weekday(Cells(4, idx).Value) = vbSaturday Or _ Shuku(a) Then Cells(5, idx) = 1 'Columns(idx).ColumnWidth = 1.5 End If Next End Sub を実行して、1/1,1/2,1/3,1/15が土日のほかに(その日の第5行目が)1になることを確かめて、納得してください。 その後 'Columns(idx).ColumnWidth = 1.5 を生かし(’を除く) Cells(5, idx) = 1 をコメント化してください。 ーー- 月の指定をどうして居るか、 AK列をどうしているか(年まで入れて指定しているのか はっきり書けてない。祝日などは毎年変わるが、毎月変えるより、1年一回の見直しの方が良かろう。 解決策の構想力も含め、質問者には難しい程度のVBAの課題ではないかな。
お礼
お礼が、遅れて申し訳ありません。 また、ご指示、ご回答ありがとうございました。 参考とさせていただきます。 また、よろしくお願いいたします。
- ap_ex_mem
- ベストアンサー率0% (0/2)
AK4からAK15をiでループさせてそれぞれの値がD4からAG4までに 存在しないかjでループさせ、総あたりチェックをかけてはどう でしょうか? それようの関数を作って If Weekday(Cells(4, idx).Value) = vbSunday Or _ Weekday(Cells(4, idx).Value) = vbSaturday Or _ 総当たりチェック関数 Then ってやればOKだと思います。
お礼
お礼が遅れました。申し訳ありません。 早速のご教示ありがとうございました。 活用させていただきます。 また、よろしくお願いいたします。