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

現在EXCEL VBAである行の値が変わったときにその列の塗りつぶしの
色を変えるといった処理を作成しております。
そこで、複数選択して値を変えた場合の処理が変数の型が一致しません
的なエラーが表示されてしまいます。
どのように修正したらうまくいくでしょうか?
教えてください。
ソースは下記の通りとなります。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 13 Then Exit Sub
Application.EnableEvents = False
MsgBox (Target.Rows.Count)
Dim rngSelectRng As Range

For Each rngSelectRng In Target
If rngSelectRng.Value = "" Then rngSelectRng.Value = " "
'ステータス欄の入力の判断
'Select Case Target.Rows.Value
MsgBox (Target.Row)
Select Case rngSelectRng.Value
Case "あああ"
Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 24
Case "いいい"
Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 35
Case "ううう"
Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 38
Case "えええ"
Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 36
Case "おおお"
Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 16
Case Else
Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 2
End Select
Next
Application.EnableEvents = True
End Sub

A 回答 (1件)

上記のコードで試してみましたが、複数選択してもエラーは出ませんでした。

どの行でエラーが出たのでしょうか。

ただ、複数選択して値を変えても、一番上の行しか色がつきません。これは、
Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 24

Worksheets("表1").Rows(rngSelectRng.Row).Interior.ColorIndex = 24

にすると解決しました。

それから、

Worksheets("表1").Rows(rngSelectRng.Row).Interior.ColorIndex =

というのを羅列すると、見栄えもよくないし、あとから修正するのも大変なので、
With Worksheets("表1").Rows(rngSelectRng.Row).Interior
 Select Case rngSelectRng.Value
 Case "あああ"
  .ColorIndex = 24
    :
    :
 End Select
End With
とした方がよいかと思います。
    • good
    • 0
この回答へのお礼

早速確認してみたところうまく動作いたしました。
ご回答、ありがとうございました。

お礼日時:2007/04/09 10:28

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