[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件を満たす日付のフォントの色付けを繰り返す』(バーバラ) またお世話になります。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
お礼が遅れましたが、いろいろご回答ありがとうございました。 もう少し自分でやってみます(バーバラ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.