• ベストアンサー

空白セルと行に色をつけるVBA Excel2010

VBAの超初心者です。 条件が一致した時に、セルの背景を黄色にしたいのですが、VBAで教えて下さいませんか? D1が空白セルの場合には、C1のみを黄色。 D1とB1の両方が空白の場合は、A1からC1を黄色にしたいのです。 尚、行はどんどん増えて行く予定です。 「条件付き書式」では考えておりません。 よろしくお願いします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

No.2・4・5です! >2~79行間は連続してデータが入っているわけではないのです。 >「2~79行間のランダムにデータが入力されたものに対して」 >という事なんです ということなので・・・ ある行には全くデータがない場合もあるということだとしての一例です。 A~D列にデータがない行は無視しています。 Sub test() Columns("A:C").Interior.ColorIndex = xlNone Dim i As Long For i = 2 To 79 If WorksheetFunction.CountA(Range(Cells(i, 1), Cells(i, 4))) Then If Cells(i, 2) <> "" And Cells(i, 4) <> "" Then Range(Cells(i, 1), Cells(i, 3)).Interior.ColorIndex = 6 ElseIf Cells(i, 4) <> "" Then Cells(i, 3).Interior.ColorIndex = 6 End If End If Next i End Sub 今度は希望通りになれば良いのですが・・・m(_ _)m

xx_HELP_xx
質問者

お礼

本当にありがとうございます!! やりたい事がちゃんと出来ました! 何度も何度も聞いてしまい、 その度にご親切に教えて下さって、心より感謝しております。 これを機に、しっかり勉強して行きたいと思います。

その他の回答 (6)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.6

NO3です。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column < 5 Then Range("A:C").Interior.ColorIndex = xlNone For i = 2 To UsedRange.Rows.Count Range("A" & i & ":C" & i).Interior.ColorIndex = xlNone If Range("D" & i).Value = "" Then Range("C" & i).Interior.ColorIndex = 8 If Range("B" & i).Value = "" And Range("D" & i).Value = "" Then Range("A" & i & ":C" & i).Interior.ColorIndex = 6 Next End If End Sub では如何でしょうか。 但し、データの量が増えてくるとパソコンへの負担も増えますよ。

xx_HELP_xx
質問者

お礼

ありがとうございます。 教えて下さったコードでも出来たのですが、 見やすさの面(私以外にも使うファイルの為)から、他の方をベストアンサーとさせて頂きましたが、 ご親切に教えて下さり、ありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.2・3です! たびたびごめんなさい。 前回の投稿で間違いがありました。 2行目~79行目であれば For i = 2 To 79 でした。 尚、この場合は列は全く関係なくてデータがあるなしにかかわらず、マクロは2~79行目まで走ります。 何度も失礼しました。m(_ _)m

xx_HELP_xx
質問者

お礼

お返事をどうもありがとうございます。 2~79行間は連続してデータが入っているわけではないのです。 「2~79行間のランダムにデータが入力されたものに対して」 という事なんです。 本当に、こちらこそ何度もすみませんっ!!!

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2です。 >A列の2行目から79行目の範囲にデータが入っているものに対して・・・ とありますので、2行目から79行目と行数が決まっているのであれば >For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row の行を For i = 1 To 79 とすれば大丈夫です。 尚、データ数がこれから増えるのであれば For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row としておけばA列の2行目から最終行までの操作が可能になります。 この程度でよろしいでしょうかね?m(_ _)m

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

これからデータを入力や編集した行に有効です。 シート名のタブをクリック コードの表示をクリックして VBエディターを起動 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column < 5 Then Range("A" & Target.Row & ":C" & Target.Row).Interior.ColorIndex = xlNone If Range("D" & Target.Row).Value = "" Then Range("C" & Target.Row).Interior.ColorIndex = 8 If Range("B" & Target.Row).Value = "" And Range("D" & Target.Row).Value = "" Then Range("A" & Target.Row & ":C" & Target.Row).Interior.ColorIndex = 6 End If End Sub 貼り付けて、Vbエディターを閉じます A~Dデータを入れていく、あるいは入力済みのデータを変更してみてください。 既に入力済みのデータに対して実行するものではありません。

xx_HELP_xx
質問者

お礼

どうもありがとうございます。 入力済みのデータに色を付けたかったのです。 私の説明不足ですみません。 お力を貸して頂いた事はとても感謝しております。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 無限に最終行まで色付という訳にはいかないと思いますので とりあえずA列には必ずデータがあるという前提です。 D列にデータがある場合はその行は色を付けなくて良いわけですよね? 一例です。 ↓のコードをコピー&ペーストしてデータが増えるたびにマクロを実行してみてください。 (本来であればコマンドボタンをSheet上に配置し、ボタンをクリックするとマクロが実行されるようにする方が良いかもしれませんね。) Sub test() Columns("A:C").Interior.ColorIndex = xlNone Dim i As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 2) = "" And Cells(i, 4) = "" Then Range(Cells(i, 1), Cells(i, 3)).Interior.ColorIndex = 6 ElseIf Cells(i, 4) = "" Then Cells(i, 3).Interior.ColorIndex = 6 End If Next i End Sub こんな感じではどうでしょうか?m(_ _)m

xx_HELP_xx
質問者

お礼

ありがとうございます! A列にデータが入っているという事前提で作って頂き、 何とも機転の利いた配慮をありがとうございました。 私が最初の質問の時に、説明が不足していて申し訳なかったのですが、 「A列の2行目から79行目の範囲にデータが入っているものに対して」 という場合でしたら、 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row の部分を修正したら良いんですよね? 変数があまり分かってないのですが、その場合はどうなりますか?

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

VBAに取り組みたいのでしたら ・基本構文を身に着けてください。 ・「マクロの記録」を参考にすると、どの操作にはどんな命令(メソッド)を使えばいいのかわかります。 ・何をどうしたいのか、手順を詳細に書き出して、それに合わせてコードを書いてください。 ・エラーがあれば、自動でそこで停止しエラーメッセージが出ますから、どうすればいいのか考えて修正していってください。 下記は、「マクロの記録」例です。 *このような記録を参考にして書き換えていきます。 Range("D1").Select ActiveCell.FormulaR1C1 = "" Range("C1").Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With MsgBox "next" Range("D1").Select ActiveCell.FormulaR1C1 = "" Range("B1").Select ActiveCell.FormulaR1C1 = "" Range("A1:C1").Select With Selection.Interior .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With

xx_HELP_xx
質問者

お礼

ありがとうございます。 おっしゃる通り、基本操作を学ばなければいけないのですが、 コードをよく分かっていない上に、時間がありません。 申し訳ないのですが、質問のコードを書いて頂けませんか?

関連するQ&A