- 締切済み
VBAの作成で困ってます。
VBAの作成で困ってます。 あるフォルダに複数のファイルがあるのですが、 そのファイル名をあるファイル「A」のシートに一覧として作成し、 さらに複数あるファイルのシート「1」のセル「A1」と「C3」を 作成したファイル名一覧のファイル名のセルの右側に抽出されるようにしようと思っています。 (複数あるファイルの書式は全て統一されています) ファイル名一覧の作成まではできたのですが、 セルの値の抽出については、 ファイルを一度開いてコピペを繰り返す方法しか(知識が未熟で)作成することができません。。。 しかしこの方法だと時間がかなりかかってしまいます。 ファイルを開くことなく、値だけを抽出してくるにはどうしたらよいでしょうか? ちなみにファイル名は毎月変わるので、特定のファイルをしてすることはできません。 ファイル名一覧で作成したファイル名をもとに、そのファイルの値を抽出しようと思っています 説明が下手で判りにくかったらすいません。。。 どなたかアドバイスいただけませんでしょうか?よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mt2008
- ベストアンサー率52% (885/1701)
Excel4マクロと呼ばれる物を使えばブックを開かずに値を取る事が出来ます。 しかし、Excel4マクロはいつ無くなってもおかしくない古い物ですので、あまりお勧めしません。 Sub Sample1() 'Excel4マクロ使用 Dim sPathBookSheet As String Application.ScreenUpdating = False For i = 1 To 10 sPathBookSheet = "'" & ThisWorkbook.Path & "\[" & Range("A" & i).Value & "]1'!" Range("B" & i).Value = ExecuteExcel4Macro(sPathBookSheet & "R1C1") Range("C" & i).Value = ExecuteExcel4Macro(sPathBookSheet & "R1C3") Next i Application.ScreenUpdating = True End Sub 普通にブックを開いて値を取っても、やり方によってはそれほど遅くはなりませんよ。 Application.ScreenUpdating で処理中の画面更新をOFFにして見てください(最後に戻すのを忘れずに)。 Sub Sample2() '普通に開く Dim Wb As Workbook Dim sPathBook As String Application.ScreenUpdating = False With ThisWorkbook.ActiveSheet For i = 1 To 10 sPathBook = ThisWorkbook.Path & "\" & .Range("A" & i).Value Set Wb = Workbooks.Open(sPathBook) .Range("B" & i).Value = Wb.Sheets("1").Range("A1").Value .Range("C" & i).Value = Wb.Sheets("1").Range("C1").Value Wb.Close False Next i End With Application.ScreenUpdating = True End Sub
- layy
- ベストアンサー率23% (292/1222)
とあるフォルダにあるブックすべての1番目シートを作業用ブックの3シート目以降に取り込む、ということはできます。シート250個くらいまで可能。ここまで自動化したら後は楽です。終わったら取り込んだシートは削除。1シート目は処理用シート、2シート目はファイル一覧と仮定します。
- keithin
- ベストアンサー率66% (5278/7941)
「ファイル」ってエクセルブックでいいんですよね。 >シート「1」の シート名が「1」という事ですね。 もしも実は不定の名前の1枚目のシートとかだった場合は,ファイル名を拾う際に,一緒にいちいちブックを開いてシート名を確認していくしかありませんが。 sub Macro1() dim myFile as string dim myPath as string dim i myPath = "c:\folder\" myFile = dir(myPath & "*.xls") do until myFile = "" i = i + 1 cells(i, "A") = myFile cells(i, "B").formula = "='" & mypath & "[" & myfile & "]1'!A1" cells(i, "C").formula = "='" & mypath & "[" & myfile & "]1'!C3" myFile = dir() loop end sub