• ベストアンサー

エクセルのチェックボックスについて

エクセルでアンケートのようなチェック項目がある物を作っているのですが、フォームのチェックボックスは「オン」「オフ」しかないので、次のようなことが出来なくて困っています。 例) □ 今日の天気は晴れです。 □ 今日の天気は雨です。 □ 今は午前です。 □ 2月は英語でFebruaryです。 □ 1+1=2です。    ・    ・    ・ 以上のようにチェック項目があり、該当するところにチェックをつけ、チェックされた数を出します。 また、項目が必要のない時は、例えば二重線(エクセルでは取消線は一本ですが)で消して、消した項目以外の数をだす、というような物です。 この二重線で消すという操作を、チェックボックス上でクリックするだけで、「オン」→「オフ」→「どちらでもない(?)」というようなことは出来るのでしょうか。 チェックボックスのコントロールの書式設定のコントロールタブの中に、「淡色表示」というのがあるのですが、これを「オン」「オフ」と同じようにワンクリックのみで出来たらと思い、質問させていただきました。 分かりにくい質問で大変申し訳ありませんが、どうかお知恵をおかしください。 また、発送の転換で「こんな方法はどう?」などというのがありましたら、お願いいたします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.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)
回答No.2

無理してチェックボックスを使うことはないと思いますが・・・ チェックボックスをやめて、セルに「入力規則」を設定しては 如何でしょうか? メニューから[データ]-->[入力規則]-->[設定]タブで 「入力値の種類」を「リスト」にして「元の値」に ○,×,△ などと 入れて選択するようにし方が良いかと思いますが如何でしょうか。

jun11jun
質問者

お礼

早速のご回答ありがとうございます。 ja7awuさんのおっしゃるとおり、別の入力方法をと思ったのですが、いま作製している物は、不特定多数の方が使用されますので、できるだけ簡単にと思っております。 確かに、○、×、△等でも入力規制を使用して簡単にできますが、様式が決まっていて、チェックボックス形式しかダメなのです(T_T) せっかくご回答をいただいたのですが、別の機会の参考とさせていただきます。申し訳ありません。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 いまいちやりたいことがわかりませんが、こういうことでしょうか。 まず、チェックボックスのプロパティの[TribleState]を「True」にします。 そして、チェックボックスのChangeイベントなどに以下のように書きます。 If IsNull(CheckBox1.Value) Then   CheckBox1.Font.Strikethrough = True Else   CheckBox1.Font.Strikethrough = False End If これで、チェックボックスをクリックするたびに、 取り消し線(グレー) → チェックあり → チェックなし の順に変わると思います。

jun11jun
質問者

お礼

わかりづらい説明にもかかわらず、ご回答いただきありがとうございました。 先ほど教えていただいたとおりやりましたら、私の理想としていることが出来ました。 ただ、ここから先、チェックされた数と、取消線が入った物以外の項目数を表示したいのです。 ご迷惑をおかけいたしますが、もしお分かりでしたらお教え下さい。

関連するQ&A