• 締切済み

VBAの作成で困ってます。

VBAの作成で困ってます。 あるフォルダに複数のファイルがあるのですが、 そのファイル名をあるファイル「A」のシートに一覧として作成し、 さらに複数あるファイルのシート「1」のセル「A1」と「C3」を 作成したファイル名一覧のファイル名のセルの右側に抽出されるようにしようと思っています。 (複数あるファイルの書式は全て統一されています) ファイル名一覧の作成まではできたのですが、 セルの値の抽出については、 ファイルを一度開いてコピペを繰り返す方法しか(知識が未熟で)作成することができません。。。 しかしこの方法だと時間がかなりかかってしまいます。 ファイルを開くことなく、値だけを抽出してくるにはどうしたらよいでしょうか? ちなみにファイル名は毎月変わるので、特定のファイルをしてすることはできません。 ファイル名一覧で作成したファイル名をもとに、そのファイルの値を抽出しようと思っています 説明が下手で判りにくかったらすいません。。。 どなたかアドバイスいただけませんでしょうか?よろしくお願いします。

みんなの回答

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

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)
回答No.2

とあるフォルダにあるブックすべての1番目シートを作業用ブックの3シート目以降に取り込む、ということはできます。シート250個くらいまで可能。ここまで自動化したら後は楽です。終わったら取り込んだシートは削除。1シート目は処理用シート、2シート目はファイル一覧と仮定します。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

「ファイル」ってエクセルブックでいいんですよね。 >シート「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

関連するQ&A