こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAでのセルの複数選択時の処理について

現在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

投稿日時 - 2007-04-09 09:30:47

QNo.2906534

すぐに回答ほしいです

質問者が選んだベストアンサー

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

ただ、複数選択して値を変えても、一番上の行しか色がつきません。これは、
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
とした方がよいかと思います。

投稿日時 - 2007-04-09 10:02:31

お礼

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

投稿日時 - 2007-04-09 10:28:08

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問