これまでで一番「情けなかったとき」はいつですか?

 Excel2003の質問です、宜しくお願いします。

 一つのセルの中で 「□良い □悪い」という回答にチェックを入れて貰うような
フォームみたいなものを設定したいのですが、どのようにしたら良いのでしょうか。
 Wordなら、ツールバーのフォームから設定できそうなのですが、Excelの一つのセル
の中に二つ以上のチェックボックスの設定の仕方が分かりません。

 また、二個以上のチェックをつけるとセルの色が赤になるとか、何もつけない
(シートを開いた状態)と緑になるとかにしたいのですが、どのようにしたら良いのか、
さっぱり分かりません。
 宜しくお願いします。

A 回答 (10件)

表示→ツールバー→フォームにチェックを入れるとフォームツールバーが出てくると思いますので、チェエクボックスを選んで任意のセルに二つ作ったら如何ですか?


また、チェックボックスは他セルとリンクさせてチェックが入っているとTrue、入ってないとFalseとする事ができますので、リンクセルの状態を条件に条件付書式を設定すれば色付けもできるかと思います。

チェックボックスを右クリック→コントロールの書式設定→コントロールタブ

リンクさせるセルにお好きなセルを設定。

これを二つそれぞれ別セルにリンク。

チェックボックスを入れているセルに条件付書式で色付け(リンクセルが両方ともTrueとかどちらもFalseとか)

でも択一の設問ならオプションボタンの方がいいかと思います。
(白丸の中に選択すると黒丸が入るもの)
オプションボタンを使用する場合は、設問がいくつかある場合はグループボックスで設問ごとに囲んでください。
囲んだ中で一つだけが選択されるようになります。
こちらはリンクすると「1,2・・・」と数値で返ります。
    • good
    • 2

「□良い □悪い」でここまでしないといけないのか?。


良悪でなくても、この(対関係)分類でチェックで2つ並べるのはおかしい。

ラジオボタンでないのか?。
前述べたように、 「□良い」 のOFFで 「□悪い」 のON、その逆だし、
両方押すことないし、押されないことはある。

これらを連動させるのか?。
それもおかしい。
    • good
    • 0

マクロ自体の問題ではありませんが、コメントが前のままでした。


>.CheckBoxes("CB" & j).Value = xlOff Then '1個
      ↓
.CheckBoxes("CB" & j).Value = xlOff Then '0個
です。

もし、お使いのようなら、ここらは、また要相談ですね。VBAでも構わないならですが。
    • good
    • 0

私の#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
「一つのセルの中に二個のチェックボックスを」の回答画像8
    • good
    • 1

えと、フォームでのチェックボックスやオプションボタンですが、基本的にオブジェクトなので配置するセルの位置などには左右されません。


セルの境目に置こうが機能は変化しません。

見た目の問題でセルの中に置きたいのかと思いますので、そこはセルを大きくして二つ並べればいいと思いますが、その色を変えたいセルとチェックボックスの位置は直接は関連しません。(そのセルの中にチェエクボックスがないと駄目なわけではない。)

例えば、チェエクボックスをA5セルに配置していても、A1セルの色を変えたりする事ができます。

チェックボックス1のリンクセル→C1
チェックボックス2のリンクセル→C2

とした場合A1に条件付書式の数式で「=AND($C$1=TRUE,$C$2=TRUE)」→お好きな色

と設定すればA5にあるチェックボックスが二つともチェックが入ればA1が赤になります。

個人的には、扱いやすいフォームツールが好きなので力説してしまいました。
    • good
    • 1

コントロールツールもフォームツールも同じですが、コントロールツール側のほうが、少し難しいと思います。

確かに、名前を、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 の点線の領域線が現れるかと思います。その領域線の左上端が、その色を変更するセルの中にないといけません。




+………+ +………
| □  | | □
+………+ +………
「一つのセルの中に二個のチェックボックスを」の回答画像6
    • good
    • 0

良い、悪い、何もつけない、の3択か。


対義語なら1つチェック入れるか入れないか。

「良い」から「悪い」にしたいとき
「良いON」→「良いOFF」で、
さらに「悪いON」にしないと「悪い」にならないのはうっとおしい。
「良い」も「悪い」もONにできるが、その制御はどうする?。

事例だから「良い、悪い」にしただけ、ならいいが・・・。
    • good
    • 0

If CheckBox1.Value = True And checkbox2.Value = True Then




のように 条件分岐をします


♯3氏が指摘されている フォームのチェックボックスは使ったことが無いのでよくわかりません
ほとんど ユーザーフォーム のほうのチェックボックスか シートのコントロールチェックボックスしか
使っていないので・・。
    • good
    • 0

Excelのチェックボックスには、ANo.1の方が説明しているコントロールボックスのチェックボックスと、ANo.2の方が説明しているフォームのチェックボックスの2種類があります。



フォームの方が古い機能なので、どちらかといえばコントロールボックスの方が主流です。

しかし、今回のようにチェックボックスが乗っているセルの色を変えたいならフォームの方がお勧め。
コントロールボックスの方は、背景色を透明(プロパティでBackStyle=0)に設定してセルの色をそのまま見せようとしても、チェックボックスをクリックするとなぜか背景色が不透明になります(おそらくExcelのバグ)。
「一つのセルの中に二個のチェックボックスを」の回答画像3
    • good
    • 0

コントロールツールボックスのチェックボックスは セルに影響されない配置ができるで


これを使えばいいのでは?

チェックボックスの値がTRUEかFALSEかでの条件判断はVBAでないと無理かと思います
    • good
    • 0
この回答へのお礼

 imo8001さん、回答有難う御座います。
 
 一つのセルの中に2個のチェックボックスを配置して、そのチェックボックスがチェックされた
こと(1個とか2個とか)はどのようにして、VBAで拾ってやれる(判断できる)のでしょうか。

お礼日時:2011/02/17 15:27

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A