- ベストアンサー
複数セル参照で塗りつぶしを変更する方法とは?
- Excel VBAを使用して、複数のセルを参照して塗りつぶしを変更する方法を知りたいです。
- 列Hに入力された数値に応じて、列Eのセルの背景色を青に変えるVBAコードがありますが、列Iに入力された場合に列Eを赤に塗りつぶす方法を知りたいです。
- 同じ行の列Hと列Iに同時に数値が入ることはないので、列Iに入力されたときに列Eを赤に塗りつぶすためにはどのようなコードを追加すればいいですか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コードが冗長なので整理してみました。(H,I入力の妥当性は人任せです) 因みに色付けなら条件付き書式で設定した方が簡単ではないでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim aCell As Range, cl As Integer If Intersect(Target, Range("H:I")) Is Nothing Then Exit Sub For Each aCell In Target Select Case aCell.Column Case Is = 8: cl = 17 Case Is = 9: cl = 3 End Select If aCell.Value = 0 Then cl = xlNone Cells(aCell.Row, "E").Interior.ColorIndex = cl Next aCell End Sub
その他の回答 (2)
- m-take0220
- ベストアンサー率60% (477/782)
> If Rng Is Nothing Then Exit Sub このコードが何を意味するかはご存じですか? Rngに何も設定されていない場合は、関数を抜ける(=処理を終了する)ということです。 先にH列の処理をしているので、変更されたセル範囲(Target)にH列のセルが含まれていないと、前述のコードで処理が終了してしまいます。 判断の仕方を変えて、 If Not Rng Is Nothing Then For Each aCell In Rng If aCell.Value > 0 Then aCell.Offset(0, -3).Interior.ColorIndex = 17 Else aCell.Offset(0, -3).Interior.ColorIndex = xlNone End If Next aCell End If とすると、For~Nextの処理はRngに何かのセルがある場合だけ実行されるようになります。
お礼
m-take0220さん 希望通りの表示が出来ました。 おっしゃるとおりですね。 気付かないという事も勉強不足です。 ありがとうございました。助かりました。
- bin-chan
- ベストアンサー率33% (1403/4213)
Set Rng = Nothingの前の行に列Hから列Eに対する処理一通りをコピぺして、 列Jから列Eに対する処理を追加してください。 ' ここの H を J にする。 Set Rng = Intersect(Target, Range("I:I")) (中略) ' -3が対象セル(列H)の3列左(列E)を指している ' 列Jから見た列Eは5列左だからoffsetは-5 ' ColorIndexは「マクロの記録」を行って調べてね aCell.Offset(0, -5).Interior.ColorIndex = 3
お礼
bin-chanさん、私の勉強不足でした。 有難うございました。
補足
bin-chanさん、有難うございます。 以下でいいのでしょうか? 変色は出来なかったのですが… Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range Dim aCell As Range Set Rng = Intersect(Target, Range("H:H")) If Rng Is Nothing Then Exit Sub For Each aCell In Rng If aCell.Value > 0 Then aCell.Offset(0, -3).Interior.ColorIndex = 17 Else aCell.Offset(0, -3).Interior.ColorIndex = xlNone End If Next aCell Set Rng = Intersect(Target, Range("I:I")) If Rng Is Nothing Then Exit Sub For Each aCell In Rng If aCell.Value > 0 Then aCell.Offset(0, -4).Interior.ColorIndex = 22 Else aCell.Offset(0, -4).Interior.ColorIndex = xlNone End If Next aCell Set Rng = Nothing End Sub
お礼
mu2011さん。 初めに条件付き書式を試したのですが、同じ条件を複数の行に設定することが出来なかった次第です。 どちらも勉強不足です。 ありがとうございました。