• ベストアンサー

エクセルでチェックの無い行に着色

エクセルでツールバー→フォームにある チェックボックスをA1~A551に入れ、O1~O551に それぞれをリンク(TRUE、FALSEの表示) させたいのですが、 コントロールの書式設定でA1にO1をリンクさせ、コピぺすると、A2もO1をリンクし、うまくいきません。 相対参照にしています。数が多い為、それぞれリンクを設定するには非常に時間がかかります。 うまくいく方法はありませんか、最終的には、 チェックが入っていない行を着色したいと考えています。 全く別の方法でもいいので、分かる方お願いします。

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

  • ベストアンサー
回答No.2

失礼。No1ですが、最終的にチェックが入っていない行を着色するんでしたね。 最初から書き直してみました。 テスト環境でやってください。行の高さやA列の幅がある程度ないとエラーになりますが。 Sub CB配置() Dim x As CheckBox Dim n As Integer ActiveSheet.CheckBoxes.Add(7.5, 3.75, 68, 12).Select 'チェックボックスを配置 Selection.OnAction = "行着色マクロ" 'チェックの場合行に色をつけるマクロを設定 Range("A1").Select Selection.AutoFill Destination:=Range("A1:A551"), Type:=xlFillDefault 'チェックボックスを551行までコピペ n = 1 For Each x In ActiveSheet.CheckBoxes x.Select With Selection .Value = xlOn 'チェックボックス初期値をonに .LinkedCell = "$O$" & n 'リンク先をそれぞれ設定 .Name = n 'チェックボックスに1から551間での名前を付ける End With n = n + 1 Next End Sub Sub 行着色マクロ() Dim n As Integer n = Application.caller If Cells(n, "O").Value = False Then Rows(n).Interior.ColorIndex = 15 '灰色に Else Rows(n).Interior.ColorIndex = xlNone '色なしに End If End Sub

uk5050
質問者

お礼

非常にすばらしいですね。着色までしてもらい、ありがとうございます。チェックボックス初期値offにし、着色は、最初に色がついていて、チェックを入れる毎に消えるほうが、都合がいいため条件付き書式ですることにします。 すぐに作ることができました。本当にありがとうございました。

その他の回答 (2)

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

下記の例は10個ですが500にでも変えられるでしょう。 Sheet1で実験 C列にチェックスを並べる(他の列にするには”C”を 別のものに変える) リンクドセルをF列に設定(他の列にするには”F”を 別のものに変える) チェックボックスの見出しもSheet2とかの対応行に セットしておけば、それを使って自由に表示できそう。 下記はあまり解説書にも載ってません。チェックボックスの貼りつけは、VB・VBAなどは手動でやらせる建前ですから。そういう意味で貴重なはず。 Worksheets("sheet1").DrawingObjects.Delete はテストの時クリアするため使ったものですが、有害なら コメント化して下さい。 Sub test01() Worksheets("sheet1").DrawingObjects.Delete l = Cells(1, "c").Left h = Cells(1, "c").Height w = Cells(1, "c").Width For i = 1 To 10 t = Cells(i, "c").Top ActiveSheet.CheckBoxes.Add(l, t, w, h).Select Selection.Characters.Text = "チェック " & i With Selection .LinkedCell = Cells(i, "F").Address End With Next i End Sub 一遍に行に色づけ Sub test02() n = Worksheets("sheet1").CheckBoxes.Count MsgBox n For i = 1 To n If ActiveSheet.CheckBoxes(i).Value = xlOff Then Range(Cells(i, 1), Cells(i, 10)).Interior.ColorIndex = 8 End If Next i End Sub フォームのチェックボックスの場合で、コントロールツールボックスのイベントのTargetに当たるものが判らず、チェックボックスをONに変えたイベントで、その行の色を脱色するコードが作れません。済みません。Indexでなんとかならないかな。

uk5050
質問者

お礼

この方法だと、test02のマクロを実行しない限り、勝手に行の着色を行わないので、非常にいいなと思いました。 脱色ができないのが残念ですね。私も作り方は分かりませんが、とても参考になりました。どうもありがとうございました。

回答No.1

コピぺすると、すべてO1をリンクするようになりますね。 その場合、コピペが終わった後で以下のVBAでなおせます。 Sub test() Dim x As CheckBox Dim n As Integer n = 1 For Each x In ActiveSheet.CheckBoxes x.Select With Selection .Value = xlOn .LinkedCell = "$O$" & n End With n = n + 1 Next End Sub

関連するQ&A