- 締切済み
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.以降がどうしてもできません。どうぞ、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17070)
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)
すみません、塗りつぶしですね。 “font“を“Interior”に置き換えて下さい。
- SI299792
- ベストアンサー率47% (788/1647)
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