プロが教える店舗&オフィスのセキュリティ対策術

以下のようなマクロを必要としておりますが、自力で書くことが出来ず、困っております。
どなたかご教示いただけますか。

(Excel2003を使用しています。)

目的:アンケートの集計

状況:
AAAという名前のフォルダ(C:\AAA)に、BBB1,BBB2,・・・,BBB30、という名前の30個のファイル(C:\AAA\BBB*)が格納されています。
各BBBのファイルには、4択で1~4の数字を選んで回答するアンケートの回答が、
問1 1
問2 3
という体裁で記入されています。(全部で40問)
問○ というセルはA1から縦に、
問に対する回答の数字は、B1から縦に並んでいます。

やりたい事:
BBBとは別のファイルで、30個の回答ファイルから、
問1で1と答えた人は○人、2と答えた人は×人・・・。
問2で1と答えた人は○人、2と答えた人は×人・・・。
という風に、問題毎、選択肢毎の回答数を一挙に集計したいと考えています。


特に分からないポイントとしては、
・別のファイルを指定してデータを持ってくる方法
・異なるファイル名を指定する操作をloopさせる方法
の2点です。

マクロは手動で実行するものとし、
データを参照するBBBのファイルは、マクロ起動時も終了時も閉じた状態にしたいと考えています。

ご教示の程、よろしくお願いいたします。

A 回答 (4件)

>別のファイルを指定してデータを持ってくる方法


「マクロの記録」で「開く」と「閉じる」を実行してみてください。

>異なるファイル名を指定する操作をloopさせる方法
For i = 1 To 30
  ファイル名 = "C:\AAA\BBB" & i & ".xls"
  (ファイルを開く)
  (ファイルの集計)
  (ファイルを閉じる)
Next i
    • good
    • 0
この回答へのお礼

夜分にご回答くださり、ありがとうございました。
ポイントに対していち早くご教示頂き、大変参考になりました。
質問のマクロは頂いたヒントで無事完成させることができ、大変感謝しております。

お礼日時:2009/07/08 20:57

マクロでの回答はすでにでていますので…



対象がたかだか30程度ならば、マクロで固定的な集計方法の結果を出すよりも1シートに全部の結果を集計しておいて、あとは自由に集計処理する方法にしておいたほうが、後で違う集計をしたくなってもすぐに対応できそうに思います。

幸い1回答は1列になっているみたいですので、例えばB列からの30列に各回答を参照させておけば、全部の回答内容の一覧ができます。
(ブック間のセル参照を設定しておけばよいだけ)

とりあえず、このシートを回答集計とでもしておいて、他のシートでこのシートを参照しながら、自由に集計すれば(同じシートでもよいですが)、マクロなどを使わなくても関数とコピーフィルだけで集計できることでしょう。
もし、追加などで違う集計が必要になった場合でも、簡単に自力で対応できるのではと思います。
    • good
    • 0
この回答へのお礼

異なる観点からのご回答、ありがとうございます。
ご指摘の通り、マクロに拘泥しない事も重要ですね。
柔軟性という観点にも十分に留意したいと思います。
大変参考になりました。

お礼日時:2009/07/08 21:11

このコーナーを借りて回答者に「コードを書いてくれ」というのは、規約違反ですよ。


もっと自分自身が勉強しないと。ものによっては、金を払って学校に言って勉強したり、手に負えないなら業者にやってもらうのが、世の慣わし(経済原則)です。もっと絞った1点ならよいが、全体を書けと言う丸投げはだめ。
だから下記は1方法だが、各ステップに分ける力を養わないと。
この課題は
(1)決まった1つのフォルダの多数のファイルを1つづつ読んでいくコード
Googleで照会すると、過去に似た質問が多いために沢山出てくる。
 (A)FSOを使う方法
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh1 …注)簡略化すると下記
 (B)Dir関数を使う方法
GoogleでDir関数で照会。
http://www.accessclub.jp/samplefile/samplefile_2 …
など多数。
 (C)FileSearch
http://ziddy.japan.zdnet.com/qa4466015.html
の2-3種有る。
(2)読んだファイルの1つのシートの決まった範囲(A)と思うが、
それを集約シート(B)に貼り付けるコード。
そのとき(A)の最終行が問題になることがある。(B)は最終行の次の行から下に貼り付けるので、必ずといったほど問題になる。
それは
Sub test01()
d = Range("A65536").End(xlUp).Row
MsgBox d
End Sub
を色んなデータでやってみて、納得し応用のこと。
(3)あるシートにデータが集約されたら、VBA処理に拘らず、エクセル関数(Frequency関数)や、ソートや、集計の方法が使えないか考えること。
ーー
1つのシートにデータをまとめず、もちろんVBAだけで、集計したりする方法が有ると思うが、初心者らしい質問者は、VBAの利用は
最小限にとどめるべきだ。ブックを開かないでデータを採る希望が有るのかな、そんなのは勉強して先の先の話だ。ファイルを開いてー読んでー閉じるの繰り返しをやるべきだ。
ーー
(注)  FSO利用でカレントフォルダCurDirのファイル名を列挙の例。
他のフォルダを指定に変更してファイル名が次々出てくることを納得のこと。
Sub test02()
Dim Fld As Object
Dim Fil As Object
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Path1 = CurDir
MsgBox Path1
Set Fld = FSO.GetFolder(CurDir & "\")
For Each Fil In Fld.Files
MsgBox Fil.Name
Next
End Sub
    • good
    • 0
この回答へのお礼

詳細にご指導頂き、誠にありがとうございます。
また、丸投げをしたいという意図があると誤解させる文面になってしまい、大変申し訳ございませんでした。

提示して下さった様々な方法は、今後の能力伸長の指針とさせていただきます。
ありがとうございました。

お礼日時:2009/07/08 21:06

>データを参照するBBBのファイルは、マクロ起動時も終了時も閉じた状態にしたいと考えています。



ブックを開かないで読む
http://www.officetanaka.net/excel/vba/tips/tips2 …

ご参考になるかもです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
添付してくださったURLを参考に、より研鑽を積みたいと思います。

お礼日時:2009/07/08 20:58

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