gooID利用規約 改定のお知らせ

エクセルで行事入力表を毎月作成しています。
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に予め入力しています。
どなたか、よろしくお願いいたします。

A 回答 (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
    • good
    • 0
この回答へのお礼

お礼が遅れました。申し訳ありません。
早速のご教示ありがとうございました。
活用させていただきます。
また、よろしくお願いいたします。

お礼日時:2009/11/16 10:31

この質問は丸投げです。

結局無理をして、前質問で回答をコピペだけしているのでこうなる。
今回は曜日関数を使う、では役立たないのはわかるでしょう。
別途、その日が、>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の課題ではないかな。
    • good
    • 0
この回答へのお礼

お礼が、遅れて申し訳ありません。
また、ご指示、ご回答ありがとうございました。
参考とさせていただきます。
また、よろしくお願いいたします。

お礼日時:2009/11/16 10:39

AK4からAK15をiでループさせてそれぞれの値がD4からAG4までに


存在しないかjでループさせ、総あたりチェックをかけてはどう
でしょうか?

それようの関数を作って

If Weekday(Cells(4, idx).Value) = vbSunday Or _
  Weekday(Cells(4, idx).Value) = vbSaturday Or _
総当たりチェック関数 Then

ってやればOKだと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報