『条件を満たす日付のフォントの色付けを繰り返す』(バーバラ) またお世話になります。Excel2007、WinXPです。 A1:B21につぎのようなデータがあります。 工程 日程 A 2008/7/25 B 2009/4/13 C 2009/12/13 D 2011/1/1 E 2011/4/1 F 2011/5/1 工程 日程 A 2008/7/25 B 2009/4/13 C 2009/12/13 D 2011/1/1 E 2011/4/1 F 2011/5/1 工程 日程 A 2008/7/25 B 2009/4/13 C 2009/12/13 D 2011/1/1 E 2011/4/1 F 2011/5/1 B列の日付が、たとえば2010/12/1以下の場合、日付のフォントを赤色にする。 という繰り返しマクロを作成したいです。 条件をつけなければできるのですが、、、(下記のとおり) Sub Macro2() Dim Row1 As Long, Row2 As Long  Row1 = 2  Row2 = 7   Do    Range("B" & Row1, "B" & Row2).Font.ColorIndex = 3     Row1 = Row1 + 7     Row2 = Row2 + 7     If Range("B" & Row1) = "" Then Exit Do    Loop End Sub これに、Range、For Each〜Nextを組み合わせればいいと思われるのですが、 どこから手をつければいいかわかりません。よろしくお願いいたします。 ---- 条件付き書式でできるのでは。また「2010/12/1以下」という基準日の変更はあるのでしょうか。1年たてば「2011/12/1以下」に色づけ等。  (NB) ---- マクロでやるなら Sub Macro2() Dim lngRow As Long, i As Long Application.ScreenUpdating = False lngRow = Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To lngRow If Cells(i, 2) <= DateValue("2010/12/1") Then Cells(i, 2).Font.ColorIndex = 3 Next End Sub みたいな感じでしょうか… (se_9) ---- NBさん おっしゃる通り、条件付き書式ならできるのですが、実際のファイルには、上記例でいう8行目以下に、別のデータが 入っています。条件付き書式がそのデータにも効いてきてしまうため、繰り返し処理のほうを 考えました。 >また「2010/12/1以下」という基準日の変更はあるのでしょうか 基準日の変更はあります。 インプットボックスで基準日を設定しようと思います。 このやり方はわかっています。 (バーバラ) ---- se_9さん、できました。 ありがとうございました。(バーバラ) ---- >NBさん >おっしゃる通り、条件付き書式ならできるのですが、実際のファイルには、 >上記例でいう8行目以下に、別のデータが 入っています。 >条件付き書式がそのデータにも効いてきてしまうため、 >繰り返し処理のほうを考えました。 範囲を列指定にしないで B2:B8 にすればいいのでは? ---- se_9さんのコードで、色付けしたい範囲をB列全体とせずに、(B2:B7),(B9:B14),(B16;B21)、、、 というように決まった行数の範囲指定をして、B列セルが空白になるまで上の条件で色付けをする というためにはどのように直せばいいでしょうか。 こうしたい理由は、実際のファイルでは(B2:B7)と(B9:B14)の間に決まった行数があり、 その部分には色付けを効かせたくないからです。 もう一度ご教授いただけないでしょうか。よろしくお願いいたします。 (バーバラ) ---- 条件付き書式の方がいいと思うけど... Sub test() Dim rng As Range On Error Resume Next Set rng = Columns(2).SpecialCells(2, 1) On Error GoTo 0 If Not rng Is Nothing Then rng.Font.ColorIndex = 3 Set rng = Nothing End Sub (seiya) あ.. > B列の日付が、たとえば2010/12/1以下の場合 見逃していました。 Sub test() Dim rng As Range, r As Range On Error Resume Next Set rng = Columns(2).SpecialCells(2, 1) On Error GoTo 0 If Not rng Is Nothing Then For Each r In rng If r.Value <= #12/1/2010# Then r.Font.ColorIndex = 3 Next End If Set rng = Nothing End Sub ---- すでに回答が出ていますが一応…。 飛ばしたい行のA列のセル(上記の例だとA1,A8,A15)には必ず"工程"が 入っているのでしょうか?もし入っているなら If Cells(i, 2) <= DateValue("2010/12/1") Then Cells(i, 2).Font.ColorIndex = 3 を If Cells(i, 2) <= DateValue("2010/12/1") And Cells(i, 1) <> "工程" Then Cells(i, 2).Font.ColorIndex = 3 みたいにすればよいと思います。 (se_9) ---- 例題の場合であれば、条件付き書式で 列指定でも問題ないのでは? >「2010/12/1以下」 「2010/12/1以降」という条件ですか? 例題のように1,8,15,・・・行目の様に 7行ごとに書式設定をしない場合 条件付き書式 数式が =AND(MOD(ROW(B1)-1,7)>0,B1>=("2010/12/1")*1) の様な感じでも出来ますよ ---- 最初の例が悪かったですね。。何度も申し訳ありません。 上に提示いただいたコードは、下記の希望を満たしておりません。 >こうしたい理由は、実際のファイルでは(B2:B7)と(B9:B14)の間に決まった行数があり、 >その部分には色付けを効かせたくないからです。 この間のデータにも色付けされてしまいます。 実際のデータはつぎのように並んでいます。 X1〜X3の部分には、色付けさせたくありません。 工程 日程 A 2008/7/25 B 2009/4/13 C 2009/12/13 D 2011/1/1 E 2011/4/1 F 2011/5/1 X1 10 X2 20 X3 30 工程 日程 A 2008/7/25 B 2009/4/13 C 2009/12/13 D 2011/1/1 E 2011/4/1 F 2011/5/1 X1 5 X2 1 X3 10 工程 日程 A 2008/7/25 B 2009/4/13 C 2009/12/13 D 2011/1/1 E 2011/4/1 F 2011/5/1 X1 1 X2 2 X3 3 (バーバラ) ---- 条件付き書式 数式が =AND(LEFT(A1)<>"X",B1<=("2010/12/1")*1) ---- >上に提示いただいたコードは、下記の希望を満たしておりません。 この修正ができないのなら、条件付き書式の方がいいと思うけど... If r.Value <= #12/1/2010# Then r.Font.ColorIndex = 3 ↓ If IsDate(r.Value) And r.Value <= #12/1/2010# Then r.Font.ColorIndex = 3 ---- お礼が遅れましたが、いろいろご回答ありがとうございました。 もう少し自分でやってみます(バーバラ)