• ベストアンサー

エクセルVBAで、ある範囲のデータのある行に対して一行おきに色を付けたい

B3:E3以下の行で一行おきに、C列に文字でも数字でも入力がある場合 その行全体(B:E)を色づけしていきたいのですが、どうすればいいでし ょうか。一般機能の条件付書式でのマクロ記録をとってみましたが、 知識が乏しくどうしたらいいか分かりませんでした。 教えてください。よろしくお願いします。 Sub Macro1() Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$C$3<>""""" Selection.FormatConditions(1).Interior.ColorIndex = 3 End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です。そうでしたか、すみません。 条件付き書式をコピーする方法 Sub Macro2()  With ActiveSheet.Range("B3")   .Select   .FormatConditions.Delete   .FormatConditions.Add Type:=xlExpression, Formula1:= _      "=COUNTA($C3)+MOD(ROW(),2)>1"   .FormatConditions(1).Interior.ColorIndex = 3   .Copy  End With  Range("B3:E" & Range("B63556").End(xlUp).Row).Select  Selection.PasteSpecial Paste:=xlPasteFormats  Application.CutCopyMode = False End Sub セルの背景色を直接塗る方法 Sub Macro3() Dim idx, LastR As Long  LastR = Range("B65536").End(xlUp).Row  For idx = 3 To LastR   If Cells(idx, 3) <> "" And (Cells(idx, 3).Row Mod 2) = 1 Then    Range(Cells(idx, "B"), Cells(idx, "E")).Interior.ColorIndex = 3   Else    Range(Cells(idx, "B"), Cells(idx, "E")).Interior.ColorIndex = xlNone   End If  Next idx End Sub どちらもデータの終了判定はB列で行っています

wait4u
質問者

お礼

おつきあいありがとうございました。うまくできました。 いろいろな方法がありおどろきました。 これからが勉強です。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >勉強でマクロでやってみようとしているところです。躓いていてお聞きしたかったのです。 ちょっとおせっかいかもしれませんが、条件付書式は、あまりマクロにすることがありません。それは、それ自身が、動的な変化を持っているからです。 また、うまく行かないのは、「知識が乏しい」のではなく、初級レベルとしては、かなり難問だからです。たったこの程度と思うかもしれませんが、1年ぐらい経っても、てこずるはずです。 Rangeオブジェクトの扱いは、とてもややこしいです。なれるまでには、相当の時間が掛かります。絶対参照と相対参照など、ワークシートの知識も必要になってきます。出来れば、こういうレベルは、後回しにして、通常の書式で、ループを使ってセルに色を塗るマクロをお勧めします。たぶん、マクロの教本でも、このレベルは出てこないと思います。 Sub Macro2() Dim rng As Range Set rng = Range("B3", Range("B65536").End(xlUp))   rng.Resize(, 2).FormatConditions.Delete With rng  .FormatConditions.Add Type:=xlExpression, Formula1:="=MOD(ROW(),2)=0" '=1 にすると、もう片方の行になります。  .FormatConditions(1).Interior.ColorIndex = 3    .Offset(, 1).FormatConditions.Add Type:=xlExpression, Formula1:="=C3<>"""""  .Offset(, 1).FormatConditions(1).Interior.ColorIndex = 3 End With Set rng = Nothing End Sub

wait4u
質問者

お礼

貴重なアドバイスありがとうございました。 遠い道のりですが、マイルストーンができた 感じです。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

マクロが詳しくないなら条件付き書式を使われたらどうですか 条件は「奇数行」でかつ「C列に値がある」ならその行のB:Eに背景色をつけるで良いですか B3を選択して「書式」→「条件付き書式」を選択します 「セルの値が」を「数式が」に変更し、式に以下を貼り付けます。 =COUNTA($C3)+MOD(ROW(),2)>1 「書式」ボタンで「パターン」→「背景色を指定」します。 B3をコピーしてC3:E3に「編集」→「形式を選択して貼り付け」→「書式」で貼り付けます。下方向にも「書式」だけコピー&貼り付けてください

wait4u
質問者

お礼

ありがとうございます。条件付書式で一行おきに色づけは 知っていますが、勉強でマクロでやってみようとしている ところです。躓いていてお聞きしたかったのです。 ありがとうございます。

関連するQ&A