dポイントプレゼントキャンペーン実施中!

VBAの超初心者です。

条件が一致した時に、セルの背景を黄色にしたいのですが、VBAで教えて下さいませんか?

D1が空白セルの場合には、C1のみを黄色。
D1とB1の両方が空白の場合は、A1からC1を黄色にしたいのです。

尚、行はどんどん増えて行く予定です。


「条件付き書式」では考えておりません。
よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

本当にありがとうございます!!

やりたい事がちゃんと出来ました!
何度も何度も聞いてしまい、
その度にご親切に教えて下さって、心より感謝しております。

これを機に、しっかり勉強して行きたいと思います。

お礼日時:2011/06/27 13:21

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
では如何でしょうか。
但し、データの量が増えてくるとパソコンへの負担も増えますよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

お礼日時:2011/06/27 13:29

No.2・3です!


たびたびごめんなさい。

前回の投稿で間違いがありました。

2行目~79行目であれば

For i = 2 To 79

でした。
尚、この場合は列は全く関係なくてデータがあるなしにかかわらず、マクロは2~79行目まで走ります。

何度も失礼しました。m(_ _)m
    • good
    • 0
この回答へのお礼

お返事をどうもありがとうございます。

2~79行間は連続してデータが入っているわけではないのです。
「2~79行間のランダムにデータが入力されたものに対して」
という事なんです。

本当に、こちらこそ何度もすみませんっ!!!

お礼日時:2011/06/26 20:33

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
    • good
    • 0

これからデータを入力や編集した行に有効です。


シート名のタブをクリック
コードの表示をクリックして 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データを入れていく、あるいは入力済みのデータを変更してみてください。

既に入力済みのデータに対して実行するものではありません。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。

入力済みのデータに色を付けたかったのです。
私の説明不足ですみません。

お力を貸して頂いた事はとても感謝しております。

お礼日時:2011/06/26 11:19

こんばんは!



無限に最終行まで色付という訳にはいかないと思いますので
とりあえず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
    • good
    • 0
この回答へのお礼

ありがとうございます!

A列にデータが入っているという事前提で作って頂き、
何とも機転の利いた配慮をありがとうございました。

私が最初の質問の時に、説明が不足していて申し訳なかったのですが、
「A列の2行目から79行目の範囲にデータが入っているものに対して」

という場合でしたら、

For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row

の部分を修正したら良いんですよね?
変数があまり分かってないのですが、その場合はどうなりますか?

お礼日時:2011/06/26 11:30

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
    • good
    • 0
この回答へのお礼

ありがとうございます。

おっしゃる通り、基本操作を学ばなければいけないのですが、
コードをよく分かっていない上に、時間がありません。

申し訳ないのですが、質問のコードを書いて頂けませんか?

お礼日時:2011/06/25 11:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!