Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


794 / 13645 ツリー ←次へ | 前へ→

【78263】クリックしてセルの色を変える時 sea 16/6/15(水) 9:42 質問[未読]
【78264】Re:クリックしてセルの色を変える時 独覚 16/6/15(水) 10:30 発言[未読]
【78265】Re:クリックしてセルの色を変える時 sea 16/6/15(水) 12:44 質問[未読]
【78266】Re:クリックしてセルの色を変える時 独覚 16/6/15(水) 13:39 発言[未読]
【78268】Re:クリックしてセルの色を変える時 sea 16/6/15(水) 15:33 お礼[未読]

【78263】クリックしてセルの色を変える時
質問  sea  - 16/6/15(水) 9:42 -

引用なし
パスワード
   一部のセルの色を、クリックすることで黄色⇔灰色に変えたく、ネットで見つけた
ものを使用してみたのですが、間に白が入ってしまいます。この白を省いて
クリック毎に黄色⇔灰色にするにはどうすればよいでしょうか。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim iAry As Variant
  Dim r As Range
  Dim i As Long

  iAry = Array(xlPatternNone, 56, 6)

  Set Target = Intersect(Target, Range("b:f"))
  If (Target Is Nothing) Then Exit Sub

  For Each r In Target
    For i = 0 To UBound(iAry)
      If (iAry(i) = r.Interior.ColorIndex) Then Exit For
    Next
    i = i + 1
    If (i > UBound(iAry)) Then i = 0
    r.Interior.ColorIndex = iAry(i)
  Next
End Sub

【78264】Re:クリックしてセルの色を変える時
発言  独覚  - 16/6/15(水) 10:30 -

引用なし
パスワード
   ▼sea さん:
セルの色は最初から黄色か灰色になっているのでしょうか?
もし背景色が何もない状態から始める場合、一回目のクリックでは何色にするのでしょうか?

もし、最初から黄色か灰色になっているのであれば

>iAry = Array(xlPatternNone, 56, 6)

>iAry = Array(56, 6)
でいいと思いますが。

もし、最初は背景色なしで有れば
>iAry = Array(xlPatternNone, 56, 6)
はそのままで
>If (i > UBound(iAry)) Then i = 0

>If (i > UBound(iAry)) Then i = 1
かな。

なおこの場合、一回目のクリックの色は
>iAry = Array(xlPatternNone, 56, 6)
の56と6の順番を変えることで変更できます。

また、あくまでもseaさんの書いたVBAを生かす形での変更です。

【78265】Re:クリックしてセルの色を変える時
質問  sea  - 16/6/15(水) 12:44 -

引用なし
パスワード
   ▼独覚 さん:
ありがとうございます!
>>If (i > UBound(iAry)) Then i = 0
>を
>>If (i > UBound(iAry)) Then i = 1
>かな。

こちらで、思い通りの動作が出来ました。

更に一つ質問ですが、(灰色もしくは黄色に)一度色を変えた後に
直ぐに色を変えようとする場合、続けざまにクリックしても色は変わらず
一度別のセルをクリックしないと変えることが出来ません。
一つのセルで、クリックを続けざまに行い色を変える設定は可能でしょうか。

【78266】Re:クリックしてセルの色を変える時
発言  独覚  - 16/6/15(水) 13:39 -

引用なし
パスワード
   ▼sea さん:
それは分かったうえで使っているのだと思っていました。

SelectionChangeは選択セルが変更された場合に実行されるイベントです。
なので現在選択しているセルをもう一度選択しても反応しません。

で、クリック時に発生するイベントはありません。
(なので上記のVBAも代わりにSelectionChangeを使っている)

代わりに使えるものは
ダブルクリック
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

右クリック
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

なお、ダブルクリック時はTargetは必ず一つのセルになるので現在のVBAで組まれている
複数セル対応は必要なくなります。
(あってもおかしくなることはありませんが)

あと、右クリックおよびダブルクリック時の通常の動作を抑制したい場合は
Cance = True
が必要になります。

【78268】Re:クリックしてセルの色を変える時
お礼  sea  - 16/6/15(水) 15:33 -

引用なし
パスワード
   ▼独覚 さん:
返信有り難うございます。

VBAの事は、全く理解しないまま試みていました。
一から勉強し直します。

ありがとうございました。

794 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free