• ベストアンサー

VBAのチェックボックス結果を集計したい

Excel上でVBAのチェックボックスやオプションボタンを使ったアンケートを作りました。 このアンケート結果(チェックボックスなどのオン・オフ)を集計したいのですが、回収件数が多いので、自動的に処理したいのです。 複数のExcelファイルが回収して集まってきます。 どのようなマクロやVBAを作ればよいか、教えて下さい。

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

  • ベストアンサー
  • Gody
  • ベストアンサー率52% (9/17)
回答No.2

文脈から、もう既に作り終え、回答をもらって今から集計しようとしている状態とお見受けします。ので、「こう作れば……」的なことには一切触れません。的を外していたらすみません。 まず、1050YENさんのおっしゃるとおり、チェックボックス、オプションボタンの作成には2通りの方法があり、それによって値の取得の仕方も異なります。取得の仕方はそれぞれ次のようになります。 ●「Sheet1」に「フォーム」ツールバーからチェックボックス「CheckBox1」を作成した場合 Sheets("Sheet1").Shapes("CheckBox1").Selection で一旦セレクトした後、(Sheets("Sheet1").Shapes("CheckBox1").Valueにするとエラーになります。) Selection.Value で値を参照することができます。 オンの場合は数値で 1 を返し、オフの場合は -4146 を返すようです。何故Boolean型ではないのかは分かりませんが……。 ●「Sheet1」に「コントロールツールボックス」ツールバーからチェックボックス「CheckBox1」を作成した場合 Sheets("Sheet1").CheckBox1.Value で値を参照することができます。 値はBoolean型で、オンの場合はTrue、オフの場合はFalseを返します。 なお、ラジオボタンの場合も取得の仕方、返ってくる値は変わりません。 次に、ファイルの開き方はご存知と思いますが、ファイル名を取得するのが少し難しいかも知れません(自分は少し悩んだ経験があります)。Dir関数を用いると、指定したフォルダ以下のファイルを取得できます。 Dir(ThisWorkbook.Path & "\*.xls") とすれば、現在マクロの入っているファイルと同じフォルダにあるExcelファイルのファイル名が取得できます。 同じ条件に適合する他のファイル名を取得したい場合は Dir と引数を無しで呼び出すと次のファイル名が取得できます。もうこれ以上見つからない、というところまできた場合は長さ0の文字列が返されます。 つまり、 Dim FilePath As String Dim FileName As String FileName = Dir(ThisWorkbook.Path & "\*.xls") Do Until FileName = Empty   If FileName <> ThisWorkbook.Name Then     FilePath = ThisWorkbook.Path & "\" & FileName     Workbooks.Open (FilePath)     ' ここに集計する処理を書く   End If   FileName = Dir Loop こんな感じでどうでしょうか? Dir関数に関する説明はExcel VBAのヘルプを参照願います。 お役に立てば幸いです。長文、失礼しました。

totootoo
質問者

お礼

Godyさん 遅くなりましたが、アドバイスありがとうございました。 こちらの状況を想定いただき、丁寧な回答がとてもうれしかったです。 今回はコントロールツールボックスから作ったのですが、まったく勉強不足のままだったので、手を焼いています。 ファイルを開くプログラムは、ばっちりでした! しかし、 Sheets("Sheet1").CheckBox1.Value については、どのように使えばよいか、まだ理解できませんでした。 ひとまず解決としますが、引き続き質問をアップしますので、どうぞよろしくお願いします。m(_ _)m

その他の回答 (1)

回答No.1

チェックボックス/オプションボタン(総称してシェイプ) それらの変更値を、配布したブック内のセルに反映する仕込みをして置けば、シェイプから値を読み取らないでも、シートの値を読み取るだけで実現可能です。 っていうか、シェイプの値って、読めるのかなぁ? チェックボックス/オプションボタンは、二つのツールバーで作成できます。 ※1.「フォーム」ツールバー ※2.「コントロールツールボックス」ツールバー ※1を利用しましょう。 なぜかというと、マクロを仕込まずに、そのシェイプの変更値を、ローカルのシートに反映することが出来ます。 ※2だとマクロを配布先のブックに仕込むために、配布先の環境に結果が左右されます。 で後は、各ブックのセルを集計するだけです。 [ブックを開く] [セルを読む] は、サンプルを書くまでも無く、VBカテゴリやOfficeの過去ログにいっぱいあります。 http://okweb.jp/oshiete.php3?c=257 http://okweb.jp/oshiete.php3?c=232 Excel.Application で検索してください。

totootoo
質問者

お礼

1050YENさん 遅くなりましたが、どうもありがとうございます。 チェックボックスを使う方法が2種類あることを 初めて知りました。 あまり複雑なことを行なわない場合には、 「フォーム」から作成した方がよかったのですね。 まだ解決はしていないのですが、もっと勉強がんばります。

関連するQ&A

  • VBAでエクセルの自動集計ができますか?

    エクセルを利用してアンケートを作成しています。 具体的には、「コントロールツールボックス」の「チェックボックス」や「オプションボタン」などを利用して回答項目を作成し、 回収後に一括して集計・分析したいと考えています。 (回答対象者は100人程度ですので、集計を自動化したいと考えています) そこで質問なのですが、 ・複数のエクセルブックを対象に、上記のような回答の自動集計  を行うためには、VBAで可能でしょうか。  それともVBでないとできないでしょうか。 VBAとVBの違いもよく分かっていないので大変恐縮なのですが・・・ どうぞよろしくお願いします

  • ASP:チェックボックスについて

    アンケートページを作成中です。HTMLでチェックボックスを作りました。テキストベースかエクセルベース(縦並び)でアンケートの答えを書き出し集計をとる予定です。まず、ラジオボタンに対してのASPは分かったのですが、チェックボックスに対してのASPが分かりません。複数チェックが出来なくなってしまったり、結果(テキストやエクセル)にアンケートの答えが出なく”;;”表示になってしまいます。分かる方、どうか教えてください。ASP初心者です。よろしくお願いします。

  • エクセル2003VBA チェックボックスについて

    エクセル2003VBA チェックボックスについての質問です よろしくお願いします。    A         B 1 あああ       □ 2 いいい       □ 3 ううう        □ . . . . 35 かかか      □ 複数のチェックボックスをB列に配置し、 B1がオンになるとbook1を開く B2がオンになるとbook2を開く ・ ・ B35がオンになるとbook35を開く処理を行いたいのですが、 非常にコードが長くなってしまいます。 以下のコード以外で、 どのチェックボックスがオンになっているかを調べる方法が知りたいのですが、よろしくお願いします。 Private Sub CheckBox1_Click() book1を開く処理 End Sub Private Sub CheckBox2_Click() book2を開く処理 End Sub ・ ・ ・ Private Sub CheckBox35_Click() book35を開く処理 End Sub

  • ワードのチェックボックスについて

    教えてください。Word2002を使用しています。 チェックボックスを作り、それをオン・オフする際に複数のチェックボックスでどれか一つしかチェックできないようにはできないのでしょうか? VBAを使えばできるのでしょうか?

  • チェックボックスについて

    Excelでフォームにチェックボックスを使用してアンケートを作成しています。 ある質問に対してチェックボックスが3つある場合、どれか1つしか選択できないようにするには、どうすればいいのでしょうか? これはオプションボタンでしかできないのでしょうか?

  • エクセルVBAでのチェックボックス操作

    エクセルを利用した、VBAで困っています。 所定のsheetに埋め込まれたチェックボックスに対して、 別sheet内のセルの値を参照し、結果をオン、オフという 操作を行いたいのですが、チェックボックスに対するVBAでの指定方法 が分かりません。 イメージとしては (1)Sheet1内にチェックボックスがある。  該当チェックボックスは7個のチェックボックスで構成されており  それぞれにchb1~chb7といったオブジェクト名がある。 (2)sheet2のA1セルに特定の値が入っていればチェックボックス(chb1)  がオン値がなければオフのまま (3)sheet2のB1セルに特定の値が入っていればチェックボックス(chb2)  がオン値がなければオフのまま という感じです。 先方より指定された様式なのでsheet1の内容や書式を変更することが出来ないので、なんとか埋め込まれたオブジェクトを操作したいのですが・・・ 良い方法があれば教えてください。

  • ラジオボタンやチェックボックスの作り方

    エクセルで簡単なアンケートを作っていて、性別の選択などで ラジオボタンを、複数選択項目でチェックボックスを設置した いのですが、どのような操作をすればよいのでしょうか? ただ見るだけ、プリントアウトするだけなので、プログラム (VBA?)などに反映されていなくてもいいです。 また、ワードでもこのようなボタンを設置することはできるの でしょうか?

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

    エクセルのチェックボックスを利用してアンケート用紙を作りたいです。それを簡単に集計したいです。例えば1)・・2)・・というような項目の前にチェックボックスを使用して集計したいのですが、出来ますか?

  • PHPでチェックボックスの結果を離れた配列に入れる

    PHPにて、複数あるチェックボックスの操作結果(オン/オフ)を変数に格納する方法を探しています。 予定として プログラム実行 → ボタンが1つと、チェックボックスが複数表示される → チェックボックス操作 → ボタンを押す → 複数のオン/オフ状況が配列に格納される といったものを作りたいと考えています。 現在はそのためのテストとして、ボタンを押した際のオン/オフの状況が画面に順に表示されるものを作っていますが、変数がUndefined Indexであると言われ、表示することができません。 現在のプログラムは下の通りです。 実際のプログラム上では、(1),(2),(3)はそれぞれソース内のかなり離れた場所にあります。 各チェックボックス(各<form>~</form>)毎にボタンを用意していないのが原因であるとは思うのですが、ボタンは特定の箇所に1つだけ用意したいと考えています。 またチェックボックス表示部とボタン表示部は(ソース的に)離れているため、 ボタン表示部で<form>を開いて、開いたまま進み、チェックボックス表示部が終わってやっと閉じる、という方法は難しいと思います。 どうすればチェックボックスの結果を離れた箇所にある配列に入れることができるのでしょうか。 宜しくお願いします。 [regist.php] <?php //(1) 更新ボタンを押すとチェックボックスのon/off結果が表示される if(isset($_POST['cmd_Print'])){ $check = $_POST["cb"]; for($i=0; $i<count($check); $i++){ print "${check[$i]}<br>"; } } //(2) 更新ボタンの表示 print("<form method=\"post\" action=\"regist.php\">"); print("<input type=\"submit\" name=\"cmd_Print\" value=\"結果表示\">"); print("</form>"); //(3) チェックボックス(on,off)を交互に表示 for($i=0; $i<5; $i++){ //チェックボックスをオンの状態で表示 print("<form method=\"POST\" action=\"./regist.php\">"); print sprintf('<input type="hidden" name="cb[]" value="off">'); print sprintf('<input type="checkbox" name="cb[]" value="on" checked="checked">'); print("</form>"); //↑チェックボックス操作後、オフの状態なら$cb[]に"off"を、オンの状態なら$cb[]に"on"を入れる //チェックボックスをオフの状態で表示 print("<form method=\"POST\" action=\"./regist.php\">"); print sprintf('<input type="hidden" name="cb[]" value="off">'); print sprintf('<input type="checkbox" name="cb[]" value="on">'); print("</form>"); //↑チェックボックス操作後、オフの状態なら$cb[]に"off"を、オンの状態なら$cb[]に"on"を入れる } ?>

    • 締切済み
    • PHP
  • Excel VBAのチェックボックスについて

    こんばんは、Excel vbaのチェックボックスについてご教授をお願いします。 Userformを作成しています。 チェックボックスを横に4つ配置したとします。その際、常にどれか一つのチェックボックスにしかチェックできないようにしたいのです(チェックしたあとに、違うチェックボックスにチェックしたら、先にチェックしてあるのもはチェックを消したい)。 このような事をしたい場合、マクロ記述での操作になるのでしょうか?それとも、何か違う操作かコマンドがあるのでしょうか?4つ一組でたくさん並べたいので、すべてにマクロ記述となると大変かな?と思いまして・・・。もし、マクロ記述でしか方法が無い場合、マクロ記述の内容も教えて頂ければと思います。 申し訳ありませんが、よろしくお願いします。 ※Excel2000を使用しています。

専門家に質問してみよう