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

複数列を指定、3列含む行が空白だったら背景色をつける。


質問を見てくださってありがとうございます。
VBA初心者です。

5行目をスタートとして、
行をひとつひとつ見て、
F、G、H列が全て空白だった場合は背景を黄色にする。
おわったら次の行へ、

というマクロを作りたいのですが、
どうも tblrow でエラーがおきます。
わかる方、教えてください。



maxrow = sh.Cells(Rows.Count, "B").End(xlUp).Row 'B列の商品名

For k = 5 To maxrow
Set rng = Range("F:H")
Set tblrow = k & rng
If tblrow <> "" Then
tblrow.Interior.Color = vbYellow
End If
Next k

「複数列を指定、3列含む行が空白だったら背」の質問画像

A 回答 (4件)

こんにちは



変数shに何が入っているのか不明なのと、操作の対象がどのシートなのか不明確なコードになっていますが、それで問題が出ていないのならActiveSheetに対する操作を行いたいのかなと、勝手に解釈しました。

また、どのような状態のシートに対して処理を行うのか不明ですが、
ご提示のコードでは「背景色を付ける」ことしかしていないようなので、既に色がついているセルがある場合には、仮に空白では無くても色がついたままになります。
ですので、事前にクリアしてから処理を行うものと、これまた勝手に解釈しました。

・・・と、勝手な解釈だらけですが、こんな感じでは?

Set sh = ActiveSheet

maxrow = sh.Cells(Rows.Count, "B").End(xlUp).Row

For k = 5 To maxrow
 Set rng = sh.Cells(k, 6).Resize(, 3)
 rng.Interior.Pattern = xlNone
 If Application.CountBlank(rng) = 3 Then rng.Interior.Color = vbYellow
Next k
    • good
    • 2
この回答へのお礼

助かりました

fujillinさん

色々不手際が・・申し訳ありません。
それなのに想像でも私のやりたいことを汲んでくださり、ありがたい限りです。
勝手な解釈といえども完ぺきにアドバイスいただけて感動です。
やりたいことがそのまま叶いました。
Application.CountBlank、覚えます。
ありがとうございました。

お礼日時:2020/12/11 15:45

シート名は任意です。


初級レベルなのでミスってたらスル~してください。

Sub try()
Dim sh As Worksheet

Set sh = Sheets("Sheet1") '★取り敢えず

Dim r As Range, rr As Range

With sh
Set rr = .Range("B5", .Cells(Rows.Count, "B").End(xlUp))
End With

For Each r In rr

r.Range("E1:G1").Interior.ColorIndex = _
IIf(Join(Array(r.Range("E1").Value, r.Range("F1").Value, r.Range("G1").Value), "") = "", 6, xlNone)

Next

Set rr = Nothing

End Sub
    • good
    • 1
この回答へのお礼

解決しました

めぐみんさん、わかりやすくコードを書いてくださってありがとうございます。
お答えくださることで私の知識とモチベーションになります。
色んな書き方があるのだと学べて勉強になるのでありがたいです。
また質問した際にはどうぞよろしくお願いいたします

お礼日時:2020/12/11 15:45

最初の行のシート名は変えて下さい。



<コード>

Sub ggrks()

Dim ws As Worksheet: Set ws = Thisworkbook.Sheets("")

Dim tbl As Range
Set tbl = ws.Range("F5:H" & ws.Cells(Rows.Count, "B").End(xlUp).Row).Resize(, 7)

Dim r As Long, c As Long
For r = 1 To tbl.Rows.Count
If tbl(r, 1) & tbl(r, 2) & tbl(r, 3) = "" Then
ws.Range(tbl(r, 1), tbl(r, 3)).Interior.Color = vbYellow
End If
Next

End Sub
    • good
    • 1
この回答へのお礼

あなたに会えてよかった

お早い回答ありがとうございます。
tblrowはrangeでした。でも色々組み合わせが悪かったのかエラーが出続けて..
オブジェクトをなんとなくで扱っていましたが、今回でさらに勉強になりました。
コードまでありがとうございます。
.Resizeも、初めて触れたので参考になりました!
ggrksdqnさんにはたびたび参考にさせていただいております。
いつもコードの名前であわわ…と思いながら、
クスッとしてしまいます。
ありがとうございます。

お礼日時:2020/12/11 15:44

コードはこれで全部ですか。

何がやりたいのかは何となく分かりますが。

tblrowが何型の変数なのか分かりませんが、
Set キーワードで入れられるのは、RangeとかSheetとかのオブジェクト変数です。 rng はオブジェクト変数ですが、 k & rng はオブジェクト変数ではありません。だからエラーになります。
    • good
    • 1
この回答へのお礼

助かりました

ggrksdqnさん
上の方でお礼させていただきます

お礼日時:2020/12/11 15:43

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