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

マクロ初心者です。よろしくお願いします。

セル範囲(A1:F20)に何も入力されていなければ塗りつぶしされ、
何か(文字、数字などなんでも)入力されていれば、塗りつぶしがなくなる。
というマクロをあえて、条件付き書式を使わずに行いたいとやってみました。(以下)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Range
For Each a In Range("A1:F20")
If a.SpecialCells(xlCellTypeVisible) Then
a.Interior.ColorIndex = xlNone
Else
a.Interior.ColorIndex = 7
End If
Next a
End Sub

ところが、半角数字(0以外)では動作するのですが
文字を入力するとエラーとなり「型が一致しません」と表示されます。
どう直したらよいのでしょうか?

最近マクロをやってみようと始めたので、基本的なことがわかっていないのかも。
どなたか、具体的なご指導お願いします。

A 回答 (2件)

NO.1です。



たびたびごめんなさい。
前回の後者のコードでは空白セルがない場合、エラーとなりますので、
↓のコードのように1行追加してください。

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:F20")) Is Nothing Then Exit Sub
On Error Resume Next '←お・ま・じ・な・い!
With Range("A1:F20")
.Interior.ColorIndex = xlNone
.SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 7
End With
End Sub

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

素早い解答ありがとうございます。早速試してみましたところ、バッチリでした。私初心者なのでまだ知らない言葉が少々ありますのでそこらへんを調べつつ引き続き勉強したいと思います。

どうもどうもありがとうございました。大変助かりました。

お礼日時:2013/11/13 02:32

こんばんは!



>If a.SpecialCells(xlCellTypeVisible) Then
の部分でエラーになるのでは?

Dim a As Range
If Intersect(Target, Range("A1:F20")) Is Nothing Then Exit Sub
For Each a In Range("A1:F20")
a.Interior.ColorIndex = xlNone
If a = "" Then
a.Interior.ColorIndex = 7
End If
Next a

としてみてはどうでしょうか?

今回はセル範囲が少ないので一つずつセルを検索していってもさほど問題はないと思いますが、
一気に!というコトであれば

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:F20")) Is Nothing Then Exit Sub
With Range("A1:F20")
.Interior.ColorIndex = xlNone
.SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 7
End With
End Sub

といった感じでも大丈夫だと思います。m(_ _)m
    • good
    • 0
この回答へのお礼

素早い解答ありがとうございます。早速試してみましたところ、バッチリでした。私初心者なのでまだ知らない言葉が少々ありますのでそこらへんを調べつつ引き続き勉強したいと思います。

どうもどうもありがとうございました。大変助かりました。

お礼日時:2013/11/13 02:33

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