こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

エクセルでアンケートのようなチェック項目がある物を作っているのですが、フォームのチェックボックスは「オン」「オフ」しかないので、次のようなことが出来なくて困っています。

例)
□ 今日の天気は晴れです。
□ 今日の天気は雨です。
□ 今は午前です。
□ 2月は英語でFebruaryです。
□ 1+1=2です。
   ・
   ・
   ・

以上のようにチェック項目があり、該当するところにチェックをつけ、チェックされた数を出します。

また、項目が必要のない時は、例えば二重線(エクセルでは取消線は一本ですが)で消して、消した項目以外の数をだす、というような物です。

この二重線で消すという操作を、チェックボックス上でクリックするだけで、「オン」→「オフ」→「どちらでもない(?)」というようなことは出来るのでしょうか。

チェックボックスのコントロールの書式設定のコントロールタブの中に、「淡色表示」というのがあるのですが、これを「オン」「オフ」と同じようにワンクリックのみで出来たらと思い、質問させていただきました。

分かりにくい質問で大変申し訳ありませんが、どうかお知恵をおかしください。

また、発送の転換で「こんな方法はどう?」などというのがありましたら、お願いいたします。

投稿日時 - 2003-02-25 14:40:23

QNo.482911

困ってます

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

チェックボックスの値は、
まず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


メッセージボックスに数が表示されたでしょうか。
後は、フォームのテキストボックスなどに表示するなり、適宜変更して下さい。

投稿日時 - 2003-02-25 17:13:57

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

無理してチェックボックスを使うことはないと思いますが・・・
チェックボックスをやめて、セルに「入力規則」を設定しては
如何でしょうか?

メニューから[データ]-->[入力規則]-->[設定]タブで
「入力値の種類」を「リスト」にして「元の値」に ○,×,△ などと
入れて選択するようにし方が良いかと思いますが如何でしょうか。

投稿日時 - 2003-02-25 15:31:01

お礼

早速のご回答ありがとうございます。

ja7awuさんのおっしゃるとおり、別の入力方法をと思ったのですが、いま作製している物は、不特定多数の方が使用されますので、できるだけ簡単にと思っております。

確かに、○、×、△等でも入力規制を使用して簡単にできますが、様式が決まっていて、チェックボックス形式しかダメなのです(T_T)

せっかくご回答をいただいたのですが、別の機会の参考とさせていただきます。申し訳ありません。

投稿日時 - 2003-02-25 16:12:04

ANo.1

こんにちは。maruru01です。

いまいちやりたいことがわかりませんが、こういうことでしょうか。

まず、チェックボックスのプロパティの[TribleState]を「True」にします。
そして、チェックボックスのChangeイベントなどに以下のように書きます。


If IsNull(CheckBox1.Value) Then
  CheckBox1.Font.Strikethrough = True
Else
  CheckBox1.Font.Strikethrough = False
End If


これで、チェックボックスをクリックするたびに、
取り消し線(グレー) → チェックあり → チェックなし
の順に変わると思います。

投稿日時 - 2003-02-25 15:13:21

お礼

わかりづらい説明にもかかわらず、ご回答いただきありがとうございました。

先ほど教えていただいたとおりやりましたら、私の理想としていることが出来ました。

ただ、ここから先、チェックされた数と、取消線が入った物以外の項目数を表示したいのです。

ご迷惑をおかけいたしますが、もしお分かりでしたらお教え下さい。

投稿日時 - 2003-02-25 16:07:03

あなたにオススメの質問