プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (3件)

失礼。

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/01/20 08:57

下記の例は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でなんとかならないかな。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/01/20 09:06

コピぺすると、すべて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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!