- ベストアンサー
エクセルのチェックボックスについて
エクセルでアンケートのようなチェック項目がある物を作っているのですが、フォームのチェックボックスは「オン」「オフ」しかないので、次のようなことが出来なくて困っています。 例) □ 今日の天気は晴れです。 □ 今日の天気は雨です。 □ 今は午前です。 □ 2月は英語でFebruaryです。 □ 1+1=2です。 ・ ・ ・ 以上のようにチェック項目があり、該当するところにチェックをつけ、チェックされた数を出します。 また、項目が必要のない時は、例えば二重線(エクセルでは取消線は一本ですが)で消して、消した項目以外の数をだす、というような物です。 この二重線で消すという操作を、チェックボックス上でクリックするだけで、「オン」→「オフ」→「どちらでもない(?)」というようなことは出来るのでしょうか。 チェックボックスのコントロールの書式設定のコントロールタブの中に、「淡色表示」というのがあるのですが、これを「オン」「オフ」と同じようにワンクリックのみで出来たらと思い、質問させていただきました。 分かりにくい質問で大変申し訳ありませんが、どうかお知恵をおかしください。 また、発送の転換で「こんな方法はどう?」などというのがありましたら、お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
チェックボックスの値は、 まずNullかどうかをIsNull関数でチェック Nullでない場合は、Valueプロパティを参照 という手順で取得します。 また、チェック項目が多い場合、1つずつ書くのは大変なので、うまくForループを使用するように工夫します。 いろいろ方法はありますが、Tagプロパティを使用する方法を紹介します。 まず、該当するチェックボックスのTagプロパティに、全て同じ値を入力しておきます。(ここでは"AAA"とします。) それ以外のフォーム上のコントロールのTagプロパティに、上記の値が入っていないようにしておきます。 とりあえず、フォーム上にコマンドボタン(CommandButton1)を置いて、そのクリックイベントに以下のように記述します。 Private Sub CommandButton1_Click() Dim chk As Control 'コントロールオブジェクト Dim TrueCount As Long 'チェックありの数 Dim FalseCount As Long 'チェックなしの数 '変数の初期化 TrueCount = 0 FalseCount = 0 For Each chk In Me.Controls 'Tagプロパティが一致するもののみ If chk.Tag = "AAA" Then '値がNullでない場合のみ If Not IsNull(chk.Value) Then If chk.Value Then 'チェックありの場合 TrueCount = TrueCount + 1 Else 'チェックなしの場合 FalseCount = FalseCount + 1 End If End If End If Next chk MsgBox "チェックあり:" & TrueCount & vbCrLf & "チェックなし:" & FalseCount End Sub メッセージボックスに数が表示されたでしょうか。 後は、フォームのテキストボックスなどに表示するなり、適宜変更して下さい。
その他の回答 (2)
- ja7awu
- ベストアンサー率62% (292/464)
無理してチェックボックスを使うことはないと思いますが・・・ チェックボックスをやめて、セルに「入力規則」を設定しては 如何でしょうか? メニューから[データ]-->[入力規則]-->[設定]タブで 「入力値の種類」を「リスト」にして「元の値」に ○,×,△ などと 入れて選択するようにし方が良いかと思いますが如何でしょうか。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 いまいちやりたいことがわかりませんが、こういうことでしょうか。 まず、チェックボックスのプロパティの[TribleState]を「True」にします。 そして、チェックボックスのChangeイベントなどに以下のように書きます。 If IsNull(CheckBox1.Value) Then CheckBox1.Font.Strikethrough = True Else CheckBox1.Font.Strikethrough = False End If これで、チェックボックスをクリックするたびに、 取り消し線(グレー) → チェックあり → チェックなし の順に変わると思います。
お礼
わかりづらい説明にもかかわらず、ご回答いただきありがとうございました。 先ほど教えていただいたとおりやりましたら、私の理想としていることが出来ました。 ただ、ここから先、チェックされた数と、取消線が入った物以外の項目数を表示したいのです。 ご迷惑をおかけいたしますが、もしお分かりでしたらお教え下さい。
お礼
早速のご回答ありがとうございます。 ja7awuさんのおっしゃるとおり、別の入力方法をと思ったのですが、いま作製している物は、不特定多数の方が使用されますので、できるだけ簡単にと思っております。 確かに、○、×、△等でも入力規制を使用して簡単にできますが、様式が決まっていて、チェックボックス形式しかダメなのです(T_T) せっかくご回答をいただいたのですが、別の機会の参考とさせていただきます。申し訳ありません。