• ベストアンサー

【VBA】 ダブルクリックするとセルの色が変更する

エクセルのA1:A5の範囲でセルをダブルクリックすると(色なし→赤→青→黄色)に変化する方法を教えて下さい。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

シートモジュールにコピーしてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   With Target     If Intersect(.Cells, Range("A1:A5")) Is Nothing Then Exit Sub     If .Interior.Color = vbWhite Then       .Interior.Color = vbRed     ElseIf .Interior.Color = vbRed Then       .Interior.Color = vbBlue     ElseIf .Interior.Color = vbBlue Then       .Interior.Color = vbYellow     ElseIf .Interior.Color = vbYellow Then       .Interior.Color = xlNone     End If   End With   Cancel = True End Sub

sasasasato
質問者

お礼

有難う御座います。 おかげさまで、作りたかった表ができました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

#3です。 その後、考えてみると、意に満たない結果になる場合があるので、 配列にA1:A5セルの各々の現状の色コードを持つのをやめて、セルの現状の色から採るように改良した。 標準モジュール部分のコードは、なしにして、Worksheet_BeforeDoubleClickイベントに ーー Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) colortbl = Array(-4142, 3, 5, 6, 7, 11, 12) If Application.Intersect(Target, Range("A1:A5")) Is Nothing Then Else 'セルのぬりつぶしの色の.ColorIndex i = Target.Interior.ColorIndex MsgBox "現在の色コード" & i '---配列の何番目か For j = 0 To 6 If colortbl(j) = i Then genclindx = j MsgBox "現在の色コードは" & genclindx & "番目" Exit For End If Next j '--1つ右の要素へ genclindx = genclindx + 1 '---限度超えると折り返し If genclindx > 6 Then genclindx = 0 Target.Interior.ColorIndex = colortbl(genclindx) End If End Sub テストが終われば、Msgbox行は削除のこと。 colortbl = Array(-4142, 3, 5, 6, 7, 11, 12)  が我流で決めている。 ColorIndexのコードと並び順は適当に。 次のダブルクリックは、一旦範囲A1:A5以外の他のセルをクリックした後で行ってください。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

標準モジュールに Public ci(6) Sub test01() For i = 1 To 5 ci(i) = 0 Next i End Sub ーー Sheet1のイベントプロシージァーで Worksheet_BeforeDoubleClickを選んで下記にする。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) colortbl = Array(-4142, 3, 5, 6, 7, 11, 12) If Application.Intersect(Target, Range("A1:A5")) Is Nothing Then Else i = ci(Target.Row) MsgBox i i = i + 1 MsgBox i ci(Target.Row) = i + 1 If i > 5 Then ci(Target.Row) = 0 Target.Interior.ColorIndex = colortbl(ci(Target.Row)) End If End Sub ーーー まず最初に標準モジュールの test01 を実行(初期化) 次にエクセルシートSheet1に行って(開いて)、A1:A5のどれかのセルをダブルクリックする。 セルの色が順次に、セル単位で決まった順序に変化してゆく。 ダブルクリックは、一旦前回のダブルクリックのセルから、どこかA1:A5以外にに移って、直後にA1:A5をダブルクリックしてください。 適当数をテストしたらMsgbox行を削除してやり直してください。 ===== なぜ、こういう仕組みを作るか、質問に説明されておらず、趣旨を理解しかねて 作っている。色も質問通りでないかも。 普通セルの色は、セルの値の大小などに従って自動で、付けられる考えが多い。 人間の操作でセルの色を付けることは多くないだろう。 それに過去(直前の)状態を引きずって、色を決める(決定される)などは、 高等過ぎる話と思う。 ーー セルの色について http://excel.style-mods.net/topic11.htm などを見て、Colorindexの値を colortbl = Array(-4142, 3, 5, 6, 7, 11, 12) のところを修正してください。 上記では、セルの色決定をColorIndex値を使って指定している。RGBやvbRedなどではない。 ーー この課題は小生にとっては、難しいと思う。ボロが出たらごめんなさい。

  • kkkkkm
  • ベストアンサー率65% (1619/2458)
回答No.2

No1に訂正と補足 If Target.Row > 1 は If Target.Row >= 1 の間違いです。 ダブルクリックしてセルにカーソルが入らない(セルの編集状態にならない)ようにしてますが入ってもいい場合は Cancel = True を削除してください。

  • kkkkkm
  • ベストアンサー率65% (1619/2458)
回答No.1

シートモジュールに以下でいかがですか。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Application.EnableEvents = False If Target.Row > 1 And Target.Row <= 5 And Target.Column = 1 Then If Target.Interior.Pattern = xlNone Then Target.Interior.Color = vbRed ElseIf Target.Interior.Color = vbRed Then Target.Interior.Color = vbBlue ElseIf Target.Interior.Color = vbBlue Then Target.Interior.Color = vbYellow ElseIf Target.Interior.Color = vbYellow Then Target.Interior.Pattern = xlNone End If End If Cancel = True Application.EnableEvents = True End Sub

関連するQ&A

  • VBA ダブルクリックで行に色をつける方法

    VBAで特定のセルをダブルクリックして、セルを塗りつぶす方法について教えてください。 例えば ----------- 1. B1をダブルクリックすると、B1:K1が赤になる、 B2をダブルクリックすると、B2:K2が赤になる、 … B10をダブルクリックすると、B10:K10が赤になる、 ----------- 2. B11をダブルくりっくすると、B11:K11が青になる B12をダブルクリックすると、B12:K12が青になる、 … B20をダブルクリックすると、B20:K20が青になる、 ----------- 3. B21をダブルクリックすると、B21:K21が黄になる、 B22をダブルクリックすると、B22:K22が黄になる、 … B30をダブルクリックすると、B30:K30が黄になる、 ----------- のように10行ごとに塗りつぶす色を変えることはできるでしょうか? 下記質問 https://okwave.jp/qa/q7374899.html のベストアンサーになっている、keithinさんの回答を参考にさせてもらい、 1.の部分を赤にすることはできるようになりましたが、 2.以降がどうしてもできません。どうぞ、よろしくお願いします。

  • 【VBA】クリックする毎にセル色が変わる

    Excelのセルをクリックするたびに、「色なし→赤→青→黄→黒→色なし」などのように色を順番に変更する方法があれば教えてください。 下記のSelectionChangeコードで、「色なし→黄→色なし」にできるのですが、複数の色を順番に表示させたいと思っております。 お手数お掛けいたしますが、よろしくお願い致します。 ================================================= Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim 各セル As Range Set Target = Intersect(Target, Range("A1:A5")) If Target Is Nothing Then Exit Sub For Each 各セル In Target With 各セル If .Value = 1 Then .ClearContents .Interior.Pattern = xlPatternNone Else .Value = 1 .Font.ColorIndex = 6 .Interior.ColorIndex = 6 End If End With Next End Sub =================================================

  • エクセルでセルをクリックすると色が変わるコード

    エクセルでセルをクリックすると色が変わるものが作りたいのですが、 A1:A50など連続した範囲ではなく、 A1,E1,I1...A5,E5,I5...をクリックすると「赤」に塗りつぶされる B1,F1,J1...B5,F5,J5...をクリックすりと「青」に塗りつぶされる A2,E2,I2...A6,E6,I6...をクリックすると「黄」に塗りつぶされる そして、もう一度クリックすると「塗りつぶしなし」に戻る というものを作りたいのです。 連続した範囲のものはなんとかわかったのですが、 上記の条件ですと、複雑でどうしていいかわからなくなってしまいました。 コードを教えていただけませんか? 宜しくお願い致します。

  • ダブルクリックでセルに色をつける方法

    エクセルで、ダブルクリックしたセルに色が付くようにしたいのですが、 どんな方法があるのでしょうか? 教えてください。よろしくお願いします。

  • エクセル VBA セルをクリックすると色が変わる

    いつも皆様には大変お世話になっております。 早速ですが、VBAでセルをクリック(もしくはダブルクリック)するとそのセルの色が変わるといったようなマクロが組めるでしょうか。 色を変えたいのは、A1~A4までの4個のうち1個だけなのでA1がクリックされればA2~A4までは『色なし』にしたいのです。 そんなことは出来るでしょうか? よろしくお願いいたします。

  • セルをクリックしたら色を変えまたくりっくしたらもと

    エクセル2010です。 お願いいたします。 セルをクリックしたら色を変え、またくりっくしたらもと戻す  というのを したいのですが。 詳しく述べます。 セル範囲 (A1:K1) の範囲で そのセルをクリックしたら 黄色 また 同じセルをクリックしたら 色なし というものに できないでしょうか? (A1:K1)以外のセルには、その方式は適応させないものとしたい。 または、オートシェイプを A1 A2 A3 A4 A5 A6 A7 A8 A9 の高さ 幅を ピッタリしたものを 各セルの上に配置して オートシェイプにそれぞれマクロを登録する 形で 同様なものが できてもいいと考えております。 詳しい方アドバイス いただければと 思います。

  • エクセルでクリックしたセルに色をつけたいのですが。

    エクセルでクリックしたセルに色をつけたいのですが。 例:A1をクリックすると黄色になり、A2をクリックすると、A1は元に戻り、A2が黄色になる。 宜しくお願いします。

  • エクセル条件付き書式(空白でない場合に色を付ける、偶数行・奇数行毎に色を変える)

    エクセルの条件付き書式の設定で、 (1)セルが空白でない場合に色を付ける、 (2)偶数行・奇数行毎に色を変える という2つのことを同時に行う方法があれば 教えていただけないでしょうか? (※空白セルは、色なしに設定) (1)=A1<>"" → 赤 (2)=MOD(ROW(),2)=0 → 青  =MOD(ROW(),2)=1 → 黄 上記の設定の場合、空白セルが青・黄になります。 入力すると赤に変わります。 こちらが行いたいことは、 【空白セルは「色なし」で、入力すると、 奇数行は黄色、偶数行は青になることです。】 例 ABC 1* ←A1は黄 2 * ←B2は青 3 A1とB2以外のセルは色なしとなるようにしたい。 ただし、入力した場合に色がつくようにしたい。 よろしくお願いします。

  • エクセルの一つのセルに複数の色をつけたいのですが、可能ですか

    エクセルの一つのセルに複数の色をつけたいのですが、可能ですか 例えば、赤、青、黄色を三等分にしてひとつのセルに色をつけたいのですが よろしくお願いします。

  • VBA_複数条件下での色付

    お願いします。 (XP・エクセル2003) たとえばA列に『あ』『い』『う』の3種の文字のいづれかが1行目から100行目まで並んでいるとします。(空白セルはなく必ずいずれかの文字が入っている) 『あ』の文字のときにはそのセルの色を赤色、『い』の文字なら青、『う』の文字なら黄とかえるマクロを作りたいのですが、方法がわかりません。 教えてください。 お願いします。

専門家に質問してみよう