• 締切済み

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.以降がどうしてもできません。どうぞ、よろしくお願いします。

みんなの回答

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

ThisworkbookのSheetBeforeDoubleClickイベントに下記コードをコピペする。 Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) tr = Target.Row  'クリックしたセルの行 ct = Array(3, 5, 7, 9) '50色程度はColorIndex で定義可能。ここでは4ブロック用のみで略。 blk = Int(tr / 10) MsgBox blk Range("B" & (blk * 10 + 1) & ":" & "K" & (blk + 1) * 10).Select Selection.Interior.ColorIndex = ct(blk) End Sub ーー Sheet1の行をダブルクリックすると、そのダブルクリックした行の」属する、10行ごとブロック単位に色がつくだろう。 VBAの コード行数を最少数に抑えて、取り急ぎ、作ってみたので質問者の意図に沿えばよいが。 セル色(のブロック単位の色のコードは)は、ColorIndex 方式で定義し、ct = Array(3, 5, 7, 9)の部分で色コードを定義している。 他の色や、他の色の表現がよければ、WEBで調べてください。

  • SI299792
  • ベストアンサー率47% (788/1647)
回答No.2

すみません、塗りつぶしですね。 “font“を“Interior”に置き換えて下さい。

  • SI299792
  • ベストアンサー率47% (788/1647)
回答No.1

31行目以降は書いていないので、色を付けないとしました。 2種類作りました メンテナンスを優先しました。ColorTableを増やすだけで色を増やせます。 ' Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '   Dim ColorTable As Variant   Dim ColorCode As Integer '   If Target.Column < 2 Or Target.Column > 11 Or Target.Row > 31 Then     Exit Sub   End If   ColorTable = Array(vbRed, vbBlue, vbYellow)   ColorCode = (Target.Row - 1) \ 10   Range("B" & Target.Row & ":K" & Target.Row).Font.Color = _     ColorTable(ColorCode)   Cancel = True End Sub 分かりやすさを優先しました。 ' Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '   If Target.Column < 2 Or Target.Column > 11 Or Target.Row > 31 Then     Exit Sub   End If '   Select Case Target.Row    Case 1 To 10     Range("B" & Target.Row & ":K" & Target.Row).Font.Color = vbRed    Case 11 To 20     Range("B" & Target.Row & ":K" & Target.Row).Font.Color = vbBlue    Case 21 To 30     Range("B" & Target.Row & ":K" & Target.Row).Font.Color = vbYellow   End Select   Cancel = True End Sub どれも、 vbRed  は   255 vbblue は 16711680 vbyellowは  65535 のようにコードに置き換えることも可能です。 単に10行ごとに色を変えるだけるなら、以下の方法がります。30行以降のできますが、好きな色は付けられません。単に遊びで作りました。 ' Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '   If Target.Column < 2 Or Target.Column > 11 Or Target.Row > 541 Then     Exit Sub   End If '   Range("B" & Target.Row & ":K" & Target.Row).Font.ColorIndex = _     (Target.Row - 1) \ 10 + 3   Cancel = True End Sub

関連するQ&A