マクロという方法を使った方が簡単なので,次の通りにします。
準備:
Book1から50を1つのフォルダに集めておく
集計ブックも作成して同じフォルダに入れておく
手順:
集計ブックを開く
ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける
sub macro1()
dim myPath as string
dim myFile as string
dim t as workbook
dim w as worksheet
dim r as long, c as long
application.screenupdating = false
set w = activesheet
cells.clearcontents
range("A1") = "File Name"
range("B1:I1") = array("A1","A2","A3","B1","B2","C1","C2","C3")
r = 1
mypath = thisworkbook.path & "\"
myfile = dir(mypath & "*.xls*")
do until myfile = ""
if myfile <> thisworkbook.name then
r = r + 1
w.cells(r, "A") = myfile
set t = workbooks.open(filename:=mypath & myfile)
for c = 2 to 9
w.cells(r, c).value = t.worksheets(31).range(w.cells(1, c).value)
next c
t.close false
end if
myfile = dir()
loop
application.screenupdating = true
end sub
ファイルメニューから終了してエクセルに戻る
ALT+F8を押し,登録したマクロを実行する。
これこそチョコチョコとメモ程度を書いて、課題を丸投げしただけではないか。
少しでも手をつけて自分でやるようにしてください。
ここは下請けをやりますよ、というコーナーではないよ。
これはエクセルVBAで無いと出来ないのは認識しているよね。
マクロの記録というのがあって、1つのブックを開くのにはどういうコードになるか、判ると思う。
あとファイルはフォルダの元にまとまっている場合が多いがその点はどうなのかな。
ーー
あるフォルダの中のブックを(ファイル名の点から)より分ける方法はわかるかな。
Googleで「VBA フォルダ ファイルの取得」で照会すれば沢山コード例がある。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.htmlなど
ここで拡張子でエクセルで無いものは捨てる
ファイル名文字列で、漢字名の部分が目的のものでなければ捨てる。
そして条件を満たす1つエクセルファイルを掴んだら、OPENする。
そして
Sub test01()
flname = "C:\Documents and Settings\xxxx\My Documents\YYYY.xls"
Set wb = Workbooks.Open(flname)
For i = 1 To 3
MsgBox wb.Worksheets("Sheet1").Range("A" & i)
Next i
End Sub
のようなので、Sheet1のA1:A3セルのデータが採れる。
処理が終わったらCLOSEする。
しかし質問の課題は処理に相当時間がかかりそう。こういうのはエクセルのファイル設計の失敗か、エクセルに過ぎた処理内容だと思う。
お礼
ありがとうございます。 出張に出ていて、御礼が遅れました。 マクロが使えると非常にうれしいです。 明日にでも試してみます。 それから、自分でもこのマクロを参考に解読して勉強させていただきます。