アプリ版:「スタンプのみでお礼する」機能のリリースについて

入力があればセルが黄色のなり、入力がなければ無色とするマクロです。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value <> "" Then
Target.Interior.ColorIndex = 6
Else
Target.Interior.ColorIndex = xlNone
End If
End Sub

このように書くと、通常は正しく動きますが、ドラッグした場合や、複数セルを一度にクリアした場合、エラーになってしまいます。
ただしく作動させるにはどう直せばいいのでしょうか?

A 回答 (2件)

For Each ~Nextを使わずにやる方法が思い浮かばないので、たとえ列を選択された場合でも、範囲をUsedRangeと重なる部分のみに限定してみました。

これならそんなに時間はかからないと思います。
ほかにももっといい方法があるとは思いますが・・・・。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set Target = Application.Intersect(Target, UsedRange)
If Target Is Nothing Then Exit Sub
For Each c In Target
With c
If .Value <> "" Then
.Interior.ColorIndex = 6
Else
.Interior.ColorIndex = xlNone
End If
End With
Next
End Sub

If Target Is Nothing Then Exit Subは、UsedRange外を削除したような場合のエラー防止のためです。
    • good
    • 0
この回答へのお礼

なるほど!
ありがとうございます。

お礼日時:2004/05/04 12:27

内部を以下のようにすると、正しく動作します。



Dim c As Range

For Each c In Target
With c
If .Value <> "" Then
.Interior.ColorIndex = 6
Else
.Interior.ColorIndex = xlNone
End If
End With
Next
    • good
    • 0
この回答へのお礼

さっそくありがとうございます。
なるほどFor Each ~Nextで一個ずつやるわけですね。

やってみましたところ、ちゃんと作動しました。ありがとうございました。ただ、列を選択してクリアした場合、一個ずつみるためだと思いますが、かなり時間がかかってしまいます。これはどうしようもないのでしょうか?

お礼日時:2004/04/30 13:15

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