プロが教えるわが家の防犯対策術!

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

A 回答 (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のヘルプを参照願います。

お役に立てば幸いです。長文、失礼しました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/08/19 17:24

チェックボックス/オプションボタン(総称してシェイプ)



それらの変更値を、配布したブック内のセルに反映する仕込みをして置けば、シェイプから値を読み取らないでも、シートの値を読み取るだけで実現可能です。
っていうか、シェイプの値って、読めるのかなぁ?



チェックボックス/オプションボタンは、二つのツールバーで作成できます。

※1.「フォーム」ツールバー
※2.「コントロールツールボックス」ツールバー

※1を利用しましょう。
なぜかというと、マクロを仕込まずに、そのシェイプの変更値を、ローカルのシートに反映することが出来ます。
※2だとマクロを配布先のブックに仕込むために、配布先の環境に結果が左右されます。


で後は、各ブックのセルを集計するだけです。

[ブックを開く]
[セルを読む]
は、サンプルを書くまでも無く、VBカテゴリやOfficeの過去ログにいっぱいあります。
http://okweb.jp/oshiete.php3?c=257
http://okweb.jp/oshiete.php3?c=232
Excel.Application
で検索してください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/08/19 17:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!