プロが教える店舗&オフィスのセキュリティ対策術

エクセルである条件でセルの色を変えたいのですがうまくいきません。
一つのセルを選択した場合にはうまくいくのですが、複数セルを選択するとエラー(1004)になります。
分かりずらい質問で申し訳ありませんが、アドバイスいただけるとありがたいです。

下記の構文の時はエラーにならないです。
Worksheets(KK).Cells(m, t).Interior.Color = RGB(255, 255, 255)
Worksheets(KK).Cells(m, t).Interior.Color = RGB(191, 191, 191)

複数セルを選択するとエラーになります。
下記のプログラムがエラーになるときです。

For i = 1 To 31
If InStr(Worksheets(KK).Cells(4, t).Value, Worksheets("設定").Cells(s, "G").Value) > 0 Then
Worksheets(KK).Range(Cells(m, t), Cells(m, k)).Interior.Color = RGB(255, 255, 255)
Else
Worksheets(KK).Range(Cells(m, t), Cells(m, k)).Interior.Color = RGB(191, 191, 191)
End If
s=s+1
m = m + 1
Next i

A 回答 (2件)

>Worksheets(KK).Range(Cells(m, t), Cells(m, k)).Interior.Color



この時のRangeとCellsで示すセルを持つシートが違う場合に起きますね。
具体的にはWorksheets(KK)がループ作業を行っている際にアクティブな状態にあるかどうかです。
アクティブでなければCellsで示すセルはアクティブシートのセルを示しますから『どっちのシートの事?』とExcelはエラーになるのです。

なので纏めるならWith~End Withで

With Worksheets(KK)
For i = 1 To 31
If InStr(.Cells(4, t).Value, Worksheets("設定").Cells(s, "G").Value) > 0 Then
.Range(.Cells(m, t), .Cells(m, k)).Interior.Color = RGB(255, 255, 255)
Else
.Range(.Cells(m, t), .Cells(m, k)).Interior.Color = RGB(191, 191, 191)
End If
s=s+1
m = m + 1
Next i
End With

とピリオドを頭に付けるとWithで示す物に繋がる事となり纏めやすくなり、且つ指定が明確になります。
    • good
    • 0
この回答へのお礼

返答ありがとうございます。
なるほど・・・
最初に作業するシートを明確に指定してループを行えばいいんですね。
自分で書いた内容でうまくいったときがあったのですが、たまたまそのシートが選択されていただけだったのですね。
構文の先頭にシートを書いたので、それでいいと思っていました。

お礼日時:2020/05/16 15:57

rangeの中のcellsにワークシートが省略されてるから。


そこにもつけないと。

条件付き書式を試しましたか?
これはVBA使う話じゃないと思うよ。
    • good
    • 0
この回答へのお礼

返答ありがとうございます。
シートの選択がrangeの中にも必要なんですね。
項目ごとに一週間の予定内容によってセルの色を変えるため、条件が多くなってしまうのでVBAでやろうと思いました。

お礼日時:2020/05/16 15:50

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

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


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