こんにちは。いつもお世話になっております。
標題の件で質問させて下さい。
セルに入力された値によって塗りつぶす色を変えるマクロを作成しています。
条件付き書式では、条件を3つしか指定できなかったので、マクロにて制御しようと思いました。
値の判定を行い、入力した各文字列の色で塗りつぶされるところは正常に動作しているのですが、
値が入っていてもいなくても、複数のセルを選択し、「Delete」キーを押下すると、背景色がグレーになってしまうのです。
初歩的な質問で申し訳ありませんが、どなたか上記のような動作をする理由をご教授頂けないでしょうか。
以下にソースを載せておきます。
宜しくお願い致します。
---
Private Sub Worksheet_Change(ByVal target As Range)
On Error Resume Next
If (target.Cells.Value = "グレー") Then
target.Cells.Interior.ColorIndex = 15
ElseIf (target.Cells.Value = "イエロー") Then
target.Cells.Interior.ColorIndex = 6
ElseIf (target.Cells.Value = "スカイブルー") Then
target.Cells.Interior.ColorIndex = 33
ElseIf (target.Cells.Value = "ピンク") Then
target.Cells.Interior.ColorIndex = 7
Else
target.Cells.Interior.ColorIndex = 0
End If
End Sub
No.2ベストアンサー
- 回答日時:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target.count
End Sub
で、原因が判ります。
つまり、Target のセルは一つではないことが原因です。
ですから、次のようにセルを一つづつ抜き出せばエラーは回避されます。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngChange As Range
For Each rngChange In Target
If (rngChange.Value = "グレー") Then
rngChange.Interior.ColorIndex = 15
ElseIf (rngChange.Value = "イエロー") Then
rngChange.Interior.ColorIndex = 6
ElseIf (rngChange.Value = "スカイブルー") Then
rngChange.Interior.ColorIndex = 33
ElseIf (rngChange.Value = "ピンク") Then
rngChange.Interior.ColorIndex = 7
Else
rngChange.Interior.ColorIndex = 0
End If
Next rngChange
End Sub
なお、Select文で書いた方がスッキリするかも知れません。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Integer
Dim rngChange As Range
For Each rngChange In Target
Select Case rngChange.Value
Case "グレー"
C = 15
Case "イエロー"
C = 6
Case "スカイブルー"
C = 33
Case "ピンク"
C = 7
Case Else
End Select
rngChange.Interior.ColorIndex = C
Next rngChange
End Sub
ご回答ありがとうございます。
選択された範囲内の1つ1つのセルに対して、繰り返し判定処理を行えばよかったのですね。
大変分かりやすいご回答で、自分でも確認のためソースを記述して、動かすことができました。
For Each ~ Next の使い方も勉強になりました。
初歩的な構文まで教えて頂き、ありがとうございました。
m(_ _)m
No.1
- 回答日時:
こんばんは。
>>複数のセルを選択し、「Delete」キーを押下すると
この動作をした場合、
>>If (target.Cells.Value = "グレー") Then
の判定でエラーになります。
然しながら・・・、
>>On Error Resume Next
なので、当然
>>target.Cells.Interior.ColorIndex = 15
になります・・・。
惜しいっちゃぁ惜しいのですが・・・。
ご回答ありがとうございます。
エラーをハンドリングした場合、"On Error Resume Next" で次の処理に進んでしまうため、背景色がグレーになってしまっているのですね。。
よく分かりました。ありがとうございます。
エラーハンドリングの処理も追々勉強して行きます。
m(_ _)m ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) VBAで重複した値のセルに色付けをしたい 1 2022/11/02 16:12
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メッセージを1度だけ表示したい。
-
VBAで、貼り付け禁止命令を実現...
-
Jtableの特定のセルの背景色や...
-
エクセルVBA セル選択後にカレ...
-
EXCELマクロ 保護されているシ...
-
VBAで丸をつけたいです。
-
エクセルテキストボックスの文...
-
Windowsで動くVBAがmacOSで動か...
-
VBA セルに合わせて移動するが...
-
セル色を5秒間隔で変える
-
ダブルクリックすると現在の時...
-
エクセルVBA(実行時エラー438...
-
(VBA)アクティブセルを起点に...
-
GrapeCityのSpreadの複数セルの...
-
エクセル マクロ 範囲指定。
-
複数行選択のテキストボックス
-
ハイパーリンクされているファ...
-
データが入力されている隣のセ...
-
excel VBA リストボックス複数...
-
EXCEL VBA Rangeの指定方法につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
Excelについて
-
メッセージを1度だけ表示したい。
-
ダブルクリックすると現在の時...
-
ハイパーリンクされているファ...
-
エクセルVBA セル選択後にカレ...
-
Jtableの特定のセルの背景色や...
-
VBAで丸をつけたいです。
-
エクセルVBA(実行時エラー438...
-
Excelのセル内にある図形を削除...
-
Swing 編集不可でも選択可能なJ...
-
(VBA)アクティブセルを起点に...
-
Excel VBA セルを指定個数ラン...
-
VBA セルに合わせて移動するが...
-
Windowsで動くVBAがmacOSで動か...
-
セル色を5秒間隔で変える
-
Excel VBA ダブルクリックで入...
おすすめ情報