プロが教えるわが家の防犯対策術!

こんにちは、エクセルのマクロについて教えて頂けませんか?

以下のようなコードでクリックをしたらセルの色を変更できるようにしてあります。

目的のセルをダブルクリックしたらセルに色が付く形です。
これを2色で使いたいのです。

まずは色なしの状態からクリックしたら薄いピンク、もう一度ダブルクリックしたら薄い青、もう一度ダブルクリックしたら元の色なしの状態にしたいと思います。

マクロ知識が無く、見よう見まねで作ったものなので、実際にコードを教えてくださる方、よろしくお願いいたします。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Const Hani = "B3:B9,A11:A31"
Const Iro As Variant = 38
'赤=3, 緑=4, 青=5, 黄=6, ピンク=7, 水=8, 茶=9, 灰=15
Dim Rng As Range
Set Rng = Intersect(Range(Hani), Target)
If Not Rng Is Nothing Then
Cancel = True
If Rng.Interior.ColorIndex = xlNone Then
Rng.Interior.ColorIndex = Iro
Else
Rng.Interior.ColorIndex = xlNone ' <-- 全ての色を対象に消去するとき
'If Rng.Interior.ColorIndex = Iro Then Rng.Interior.ColorIndex = xlNone
' Wクリックで着けた色だけを消す場合は、こちら↑を有効にする
End If
End If
Set Rng = Nothing

If Intersect(Target, Range("A3:A9")) Is Nothing Then Exit Sub
With Target
Select Case .Value
Case ""
.Value = "注意"
Case "注意"
.Value = ""
End Select

End With
End Sub

A 回答 (2件)

No.1です。



何とかご自身で応用してもらえるだろうと思い
前回のコードを投稿しました。

結局
A3~A9 は「注意」か「空白」
B3~B9 はカラーインデックス「38」(ローズ?)か「色なし」
A11~A31 が前回の色付け

になれば良いのですかね。

とりあえずそういうコトだとして・・・

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Intersect(Target, Range("A3:B9,A11:A31")) Is Nothing Then Exit Sub
  Cancel = True
  With Target
   If .Row <= 9 Then
    If .Column = 1 Then
     If .Value = "" Then
      .Value = "注意"
     Else
      .Value = ""
     End If
    Else
     If .Interior.ColorIndex = xlNone Then
      .Interior.ColorIndex = 38
     Else
      .Interior.ColorIndex = xlNone
     End If
    End If
   Else
    Select Case .Interior.ColorIndex
     Case 7: .Interior.ColorIndex = 8
     Case 8: .Interior.ColorIndex = xlNone
    Case Else
     .Interior.ColorIndex = 7
    End Select
   End If
  End With
End Sub

今度はどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

再度教えていただき ありがとうございます!
お陰様で目的通りできました! 
感謝感謝です!

お礼日時:2018/09/13 23:15

こんばんは!



>まずは色なしの状態からクリックしたら薄いピンク、もう一度ダブルクリックしたら薄い青、もう一度ダブルクリックしたら元の色なしの状態に・・・

の部分だけですが、一例です。
色の数がすくないので、「Select Case」で対応できると思います。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Cancel = True
 With Target
  Select Case .Interior.ColorIndex
   Case 7: .Interior.ColorIndex = 8
   Case 8: .Interior.ColorIndex = xlNone
   Case Else
    .Interior.ColorIndex = 7
  End Select
 End With
End Sub

こんな感じで。m(_ _)m
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やってみたのですが、目的のセル以外にも適用されてしまうようで、目的のセルA11~A31にのみ適用されるようにするにはどうしたら良いでしょうか?

お手数ですが教えて頂けませんか?

よろしくお願いします!

お礼日時:2018/09/13 21:57

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

このQ&Aを見た人はこんなQ&Aも見ています