29140


やりたいことはタイトルの通りです。  
コードと問題点は以下の通りです。

[code]

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
      '複数選択したセルを着色
      '下記2行を有効にすると、下記2行含む、以下全てのコードが機能しなくなります。
      '下記2行を無効にすると、複数選択したセルの脱色が有効になり、クリックしたセルも着色されます。
      If Target.Count <= 1 Then Exit Sub
         Target.Interior.ColorIndex = xlNone
    
      '「Row」と入力しても、なぜか自動で「row」になります
      'その上、指定した通りの範囲条件が適用されません
      If Target.row >= 11 And Target.Column >= 6 Then Exit Sub
    
          Select Case Target.Interior.ColorIndex 'クリックしたセルの色が
    
            Case Is = xlNone '無色の場合は
                Target.Interior.ColorIndex = 3 '「3」赤色に着色
    
            Case Else 'それ以外の色の場合は
                Target.Interior.ColorIndex = xlNone '無色にする
    
      End Select
    
    
    End Sub
    
[/code]

以上、どなたか問題点をご教示いただけないでしょうか。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー  
以下は、頂いたアドバイスを参考に修正を加えたものです。

[code]

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      '(A1:E10)の範囲内で、クリックした単一のセルを着色
      If Target.Count <= 1 And Target.row <= 10 And Target.Column <= 5 Then
       Select Case Target.Interior.ColorIndex '複数選択したセルの色が
    
        Case xlNone '無色の場合は
            Target.Interior.ColorIndex = 3 '「3」赤色に着色
    
        Case Else 'それ以外の色の場合は
            Target.Interior.ColorIndex = xlNone '無色にする
    
        Exit Sub
    
      End If
    
      '(A1:E10)の範囲内で、複数選択したセルを塗りつぶし無しにする
      If Target.row <= 10 And Target.Column <= 5 Then
    
         Target.Interior.ColorIndex = xlNone
         Exit Sub
    
      End If
    
    End Sub
    
[/code]

これで、目的通りの動きを実現できました。ご回答ありがとうございました。


CC BY-SA 3.0
2016-09-26T07:16:46.893
29139
2016-09-26T09:52:25.437
2016-09-26T09:52:25.437
7470
7470
question
excel vba
セルのクリックでセルを着色・脱色し、範囲選択で一括脱色したい


`Exit Sub`とはサブルーチン(Private SubからEnd Subまでの範囲)を抜ける命令です。  
`If ～ Then Eixt Sub` とコードを記述すると、`If ～
Then`の評価がTrueの場合に`Worksheet_SelectionChange`の処理からExitしてしまいます。

手元の環境では`Target.Row`が`Target.row`に書き換わる現象は再現しませんでした。  
`row`プロパティを含む`Target`クラスモジュールなどが原因の可能性がありますので、vbaのカレントプロジェクト全体で`row`を検索して、当該コードがないか確認するのが良いと思います。

それを踏まえて修正すると下記のコードのようになるでしょうか。  
「複数選択したセルを着色」というコメントの意図が分からないので、単一セルを選択した場合には塗りつぶしなしにするよう実装しています。

[code]

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      '単一のセルを選択した場合は塗りつぶしなしにする
      If Target.Count <= 1 Then
         Target.Interior.ColorIndex = xlNone
         Exit Sub
      End If
    
      '複数選択したセルを着色
      If Target.Row >= 11 And Target.Column >= 6 Then
          Select Case Target.Interior.ColorIndex 'クリックしたセルの色が
    
            Case xlNone '無色の場合は
                Target.Interior.ColorIndex = 3 '「3」赤色に着色
    
            Case Else 'それ以外の色の場合は
                Target.Interior.ColorIndex = xlNone '無色にする
    
          End Select
      End If
    
    End Sub
    
[/code]


CC BY-SA 3.0
2016-09-26T08:28:02.430
29140
2016-09-26T08:28:02.430
9820
29139
answer