重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

【VBA】セルが空白の場合に処理を抜ける方法


以前質問したんですが、補足に書ききれず、再度質問です(>人<;)

D列の記入する状況によって、入力必須のセルを塗りつぶししたいです!
そして、文字を入力したら塗りつぶしを消したいです!

色をつけるのはできるのですが、空白の場合に塗りつぶしを無くす(背景色を白にする)方法が分かりません(;_;)

private sub worksheet_change (Byval target as range)

dim i as long
for i = 2 to 1000

if cells (i,4).value = “依頼” then
cells(i,1).interior.color = RGB(255,255,0)

elseif cells(i,4).value =“作業中” Then
cells(i,3).interior.color = RGB(255,255,0)

elseif cells(i,4).value =“対応済” Then
cells(i,2).interior.color = RGB(255,255,0)
cells(i,5).interior.color = RGB(255,255,0)

end if
next i
end sub

ご存知の方がいらっしゃいましたら、教えていたたいですヽ(;▽;)ノ
読んでいただき、ありがとうございます(*^_^*)

質問者からの補足コメント

  • なんとか解決しました!☆
    ありがとうございました〜!(*≧∀≦*)☆

    丁寧に全部の式を書いてくださったfumiakiさんをベストアンサーに選ばせていただきました(*^_^*)

    GOM∧FUさんも、すぐにご回答くださりありがとうございます(๑˃̵ᴗ˂̵)♪

      補足日時:2019/09/02 16:35

A 回答 (3件)

空白はヌル、半角スペース、全角スペースのどれを言ってるのか不明なので、全てだと仮定。


また、どこのセルを白くするかも言って無い。仕方無いからcells(i,2)にしておいた。

if cells (i,4).value = “依頼” then
cells(i,1).interior.color = RGB(255,255,0)

elseif cells(i,4).value =“作業中” Then
cells(i,3).interior.color = RGB(255,255,0)

elseif cells(i,4).value =“対応済” Then
cells(i,2).interior.color = RGB(255,255,0)
cells(i,5).interior.color = RGB(255,255,0)

↓下2行を追加
elseif cells(i,4).value =“” or cells(i,4).value =“ ” or cells(i,4).value =“ ” Then
cells(i,2).interior.color =2
↑追加終わり


end if

cells(i,2).interior.color =2では無くて
cells(i,2).interior.color =RGB(255,255,255)でも可。
    • good
    • 1
この回答へのお礼

質問が分かりづらくて申し訳ありません(>人<;)
空白は、無記入(“”)のことを言っております!

そして無記入は、D列(i,4)以外のセルのことなんです(>人<;)

お礼日時:2019/09/02 14:26

こんにちは!



横からお邪魔します。
せっかくチェンジイベントを使っているのであれば、
2行目~1000行目までをループして空白セルの場合に
ループを抜けるのではなく、対象行だけの操作にしてみてはどうでしょうか?

D列は 依頼・作業中・対応済 の3種類だけ反応すれば良いのですね。
一例です。

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim c As Range, myRng As Range
 If Intersect(Target, Range("D:D")) Is Nothing Then Exit Sub
  With Target
   If .Count < 1000 And .Row > 1 Then
    For Each c In Target
     Union(Range(Cells(c.Row, "A"), Cells(c.Row, "C")), Cells(c.Row, "E")).Interior.ColorIndex = xlNone '//一旦色をクリア//
      If c <> "" Then
       Select Case .Value
        Case "依頼"
         Set myRng = Cells(.Row, "A")
        Case "作業中"
         Set myRng = Cells(.Row, "C")
        Case "対応済"
         Set myRng = Union(Cells(.Row, "B"), Cells(.Row, "E"))
       End Select
      End If
       If Not myRng Is Nothing Then
        myRng.Interior.Color = RGB(255, 255, 0)
       End If
    Next c
   End If
  End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 1

.ClearFormats



.Interior.ColorIndex = 0
    • good
    • 1
この回答へのお礼

お早い回答ありがとうございますヽ(;▽;)ノ!
ごめんなさい、どこに入れれば良いか分からず(>_<;)
初心者ですみません‥

お礼日時:2019/09/02 13:09

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A