- ベストアンサー
一つのセルの中に二個のチェックボックスを作りたい
Excel2003の質問です、宜しくお願いします。 一つのセルの中で 「□良い □悪い」という回答にチェックを入れて貰うような フォームみたいなものを設定したいのですが、どのようにしたら良いのでしょうか。 Wordなら、ツールバーのフォームから設定できそうなのですが、Excelの一つのセル の中に二つ以上のチェックボックスの設定の仕方が分かりません。 また、二個以上のチェックをつけるとセルの色が赤になるとか、何もつけない (シートを開いた状態)と緑になるとかにしたいのですが、どのようにしたら良いのか、 さっぱり分かりません。 宜しくお願いします。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
表示→ツールバー→フォームにチェックを入れるとフォームツールバーが出てくると思いますので、チェエクボックスを選んで任意のセルに二つ作ったら如何ですか? また、チェックボックスは他セルとリンクさせてチェックが入っているとTrue、入ってないとFalseとする事ができますので、リンクセルの状態を条件に条件付書式を設定すれば色付けもできるかと思います。 チェックボックスを右クリック→コントロールの書式設定→コントロールタブ リンクさせるセルにお好きなセルを設定。 これを二つそれぞれ別セルにリンク。 チェックボックスを入れているセルに条件付書式で色付け(リンクセルが両方ともTrueとかどちらもFalseとか) でも択一の設問ならオプションボタンの方がいいかと思います。 (白丸の中に選択すると黒丸が入るもの) オプションボタンを使用する場合は、設問がいくつかある場合はグループボックスで設問ごとに囲んでください。 囲んだ中で一つだけが選択されるようになります。 こちらはリンクすると「1,2・・・」と数値で返ります。
その他の回答 (9)
- layy
- ベストアンサー率23% (292/1222)
「□良い □悪い」でここまでしないといけないのか?。 良悪でなくても、この(対関係)分類でチェックで2つ並べるのはおかしい。 ラジオボタンでないのか?。 前述べたように、 「□良い」 のOFFで 「□悪い」 のON、その逆だし、 両方押すことないし、押されないことはある。 これらを連動させるのか?。 それもおかしい。
- Wendy02
- ベストアンサー率57% (3570/6232)
マクロ自体の問題ではありませんが、コメントが前のままでした。 >.CheckBoxes("CB" & j).Value = xlOff Then '1個 ↓ .CheckBoxes("CB" & j).Value = xlOff Then '0個 です。 もし、お使いのようなら、ここらは、また要相談ですね。VBAでも構わないならですが。
- Wendy02
- ベストアンサー率57% (3570/6232)
私の#6のマクロについて、ご指摘があったようですが、オブジェクトとセルの位置関係は連動し、設定にはある程度、正確さが必要だというだけです。今度は、新たにチェックボックスを取り付ける場合、設定まで自動的に行うマクロを披露します。セルに機械的に納まります。数が数百でも、1秒程度で出来ます。 *Range("B1:B30") 'チェックボックスの範囲 *Const EA '何行おきか?(n -1 )行置き '//標準モジュール Private Const EA As Integer = 2 '* Sub AddFormCheckBoxes() 'チェックボックスの設定マクロ Dim rng As Range Dim i As Long, j As Long Dim aSh As Worksheet If EA = 0 Then Exit Sub Set aSh = ActiveSheet Set rng = aSh.Range("B2:B30") '* rng.EntireColumn.ColumnWidth = 16 With rng j = 1 For i = 1 To .Rows.Count Step EA With .Cells(i, 1) '左側のチェックボックス With aSh.CheckBoxes.Add(.Left + 5, .Top + 1, .Width / 3, .Height / 8) .Name = "CB" & j .Caption = "良い" .OnAction = "CheckBoxes_Click" j = j + 1 End With '右側のチェックボックス With aSh.CheckBoxes.Add(.Left + 50, .Top + 1, .Width / 3, .Height / 8) .Name = "CB" & j .Caption = "悪い" .OnAction = "CheckBoxes_Click" j = j + 1 End With End With Next i End With Set aSh = Nothing Set rng = Nothing End Sub Private Sub CheckBoxes_Click() 'CheckBoxのマクロ Dim n As String Dim myCell As Range Dim i As Long, j As Long, k As Long, m As Long With ActiveSheet m = .CheckBoxes(1).TopLeftCell.Row n = Application.Caller i = Replace(n, "CB", "", , , 1) If i Mod 2 = 0 Then j = i - 1 k = j Else j = i + 1 k = i End If Set myCell = .Cells(Int((k - 1) / 2) * EA + m, 2) If .CheckBoxes("CB" & i).Value = xlOn And _ .CheckBoxes("CB" & j).Value = xlOn Then myCell.Interior.ColorIndex = 38 '赤 ElseIf .CheckBoxes("CB" & i).Value = xlOff And _ .CheckBoxes("CB" & j).Value = xlOff Then '1個 myCell.Interior.ColorIndex = 35 '緑 Else myCell.Interior.ColorIndex = xlNone '色なし End If End With Set myCell = Nothing End Sub 'おまけ Sub ClearCheckBoxes() 'チェックボックスの削除 Dim cb As Object Application.ScreenUpdating = False For Each cb In ActiveSheet.CheckBoxes cb.TopLeftCell.ClearFormats cb.Delete Next cb Application.ScreenUpdating = True End Sub
- chonami
- ベストアンサー率43% (448/1036)
えと、フォームでのチェックボックスやオプションボタンですが、基本的にオブジェクトなので配置するセルの位置などには左右されません。 セルの境目に置こうが機能は変化しません。 見た目の問題でセルの中に置きたいのかと思いますので、そこはセルを大きくして二つ並べればいいと思いますが、その色を変えたいセルとチェックボックスの位置は直接は関連しません。(そのセルの中にチェエクボックスがないと駄目なわけではない。) 例えば、チェエクボックスをA5セルに配置していても、A1セルの色を変えたりする事ができます。 チェックボックス1のリンクセル→C1 チェックボックス2のリンクセル→C2 とした場合A1に条件付書式の数式で「=AND($C$1=TRUE,$C$2=TRUE)」→お好きな色 と設定すればA5にあるチェックボックスが二つともチェックが入ればA1が赤になります。 個人的には、扱いやすいフォームツールが好きなので力説してしまいました。
- Wendy02
- ベストアンサー率57% (3570/6232)
コントロールツールもフォームツールも同じですが、コントロールツール側のほうが、少し難しいと思います。確かに、名前を、CheckBox1 とか分かっていればよいのですが、基本的には、CheckBox の数だけマクロが必要になってしまいます。そういう点で、フォームツール側のCheckBox のほうが楽です。VBAでも、どうやって色を付けるか、その先まで考えていないと話が進められませんね。 標準モジュールに、二つを貼りつけて、SetInActonで、マクロを関連付けてください。 色については、気に入らなかったらヘルプなどを見ながら、調整してください。 2個以上と書かれていますが、現在は横並びの2個までです。 Private Sub CheckBoxes_Click() Dim n As String Dim chkb As Object Dim cb As Object Dim i As Integer n = Application.Caller i = 0 'カウントのクリア Set chkb = ActiveSheet.CheckBoxes(n) If chkb.Value = xlOn Then i = 1 '1個目 For Each cb In ActiveSheet.CheckBoxes If chkb.Name <> cb.Name Then If Not Intersect(cb.TopLeftCell, chkb.TopLeftCell) Is Nothing Then If cb.Value = xlOn Then i = i + 1 '加算 Exit For End If End If Next cb If i > 1 Then '2個以上 chkb.TopLeftCell.Interior.ColorIndex = 3 '赤 ElseIf i = 1 Then '1個 chkb.TopLeftCell.Interior.ColorIndex = xlNone '色なし Else chkb.TopLeftCell.Interior.ColorIndex = 10 '緑 End If End Sub 'チェックボックスにマクロを関連付けさせる Sub SetInActon() Dim cb As Object For Each cb In ActiveSheet.CheckBoxes cb.OnAction = "CheckBoxes_Click" Next cb End Sub *フォームツールのCheckBox の取り付けの注意点 クリックしたりすると、CheckBox の点線の領域線が現れるかと思います。その領域線の左上端が、その色を変更するセルの中にないといけません。 端 ↓ +………+ +……… | □ | | □ +………+ +………
- layy
- ベストアンサー率23% (292/1222)
良い、悪い、何もつけない、の3択か。 対義語なら1つチェック入れるか入れないか。 「良い」から「悪い」にしたいとき 「良いON」→「良いOFF」で、 さらに「悪いON」にしないと「悪い」にならないのはうっとおしい。 「良い」も「悪い」もONにできるが、その制御はどうする?。 事例だから「良い、悪い」にしただけ、ならいいが・・・。
- imo8001
- ベストアンサー率14% (26/179)
If CheckBox1.Value = True And checkbox2.Value = True Then のように 条件分岐をします ♯3氏が指摘されている フォームのチェックボックスは使ったことが無いのでよくわかりません ほとんど ユーザーフォーム のほうのチェックボックスか シートのコントロールチェックボックスしか 使っていないので・・。
- mt2008
- ベストアンサー率52% (885/1701)
- imo8001
- ベストアンサー率14% (26/179)
コントロールツールボックスのチェックボックスは セルに影響されない配置ができるで これを使えばいいのでは? チェックボックスの値がTRUEかFALSEかでの条件判断はVBAでないと無理かと思います
お礼
imo8001さん、回答有難う御座います。 一つのセルの中に2個のチェックボックスを配置して、そのチェックボックスがチェックされた こと(1個とか2個とか)はどのようにして、VBAで拾ってやれる(判断できる)のでしょうか。