[[20110610231411]] 『条件を満たす日付のフォントの色付けを繰り返す』(バーバラ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

 『条件を満たす日付のフォントの色付けを繰り返す』(バーバラ)
 またお世話になります。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.