この質問は、丸投げなので、ヒントだけ。
Sub test02()
ActiveWorkbook.Sheets("Sheet2").Range("a2").Copy Workbooks("AAA.xls").Worksheets("Sheet1").Range("A20")
End Sub
たった1行でコア部分は実現できる。
ただしブックAAAは実行時には開いておく必要がある。
そしてコピーが終わったらブックAAAはClose。
上記の中で
Sheet2
a2
AAA
Sheet1
A20
の部分のうち、毎回のブックに対応し変わる部分は、現在のSheet2のセルに、(始める前に)文字列の値として、各行の各列のセルに入力して保持しておく。
その文字列を上記の1行の各部分に置き換えて(=代入して)、(くり返し)実行すればよい。
くり返し回数は上記ではSheet2のA列のデータ行数である。
Sheet2の全行くり返しは、dを最終行の行番号として、
For i=2 to d
処理
Next i
でできる。
その各行の各列はCells(i,"A") や Cells(i,"B")・・のようにして取れる。
最終行は、Googleで「エクセルVBA 最終行」で照会すればわかる。
ブックを開くコードはGoogle照会せよ。
「エクセルVBA ブックを開く」
200もあるブックの開閉は時間がかかると思う。200のブックを扱うのは無理があるだろう。全体の処理の設計を(出来れば)やりなおすべきものと思う。
例えば
「サブフォルダ名」「ブック名」「シート名」「セルアドレス」「転記文字」
画像のような表に対象ブックの情報を記入して、
これらの情報を元にマクロ処理するという事でしょうか。
転記先のシート名やセルアドレスは事前にわかっているという事ですか?
その場合、ブック名、シート名、セルアドレスを入力する手間などを考えると、
そんなに改善されないような気がしますし、
シートの状態など確認しながら入力しなくても良いものなんでしょうか。
いずれにしても、一度、1Bookの処理を[マクロの記録]してみてください。
記録された直値の部分を変数に置き換えて、
その変数にセルに入力した文字を代入する事になります。
それから不明点を質問されたほうが効率が良いと思います。
例として、タテ方向の入力表の場合のLoop処理のサンプル。
Sub try()
Dim ws As Worksheet
Dim mx As Long
Dim i As Long
Set ws = ActiveSheet
mx = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To mx
MsgBox ThisWorkbook.Path & ws.Cells(i, 1).Value & "\" & ws.Cells(i, 2).Value & ".xls"
MsgBox ws.Cells(i, 3).Value & "|" & ws.Cells(i, 4).Value & "|" & ws.Cells(i, 5).Value
Next
Set ws = Nothing
End Sub
お礼
お礼が遅くなりました。 データ入力部だけで500行程になりました。 そこで更新部のコードが今夜になりました。 更新部をテストするまでお礼を保留してました。 さて、テストではほぼ1秒で更新・保存できています。 これで、1週間の作業が3分で済みます。 皆様の回答のお陰です。 本当にありがとうございました。