• ベストアンサー

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