2011-01-05 20 views
2

私は54枚のExcelファイルをそれぞれ3枚ずつ持っていますが、各シートのデータ入力量は異なりますが、それらのシートからVBAを使用して1つのブックにデータをインポートします。多くのExcelブックやシートのデータを1つのブック/テーブルにインポートする

データをインポートするためのループを構築できるようにプログラムする方法はありますか?ループ/シートごとに各ブック名を書き込む必要はありませんか?私はコール関数を使用することができると思うが、ループコードをそれらに適用されるワークブック名​​から独立させる方法を知らない。例えば、 配列それでワークブックファイル名を持つ:

は、それは2つだけを取る

ミリー

答えて

1

、事前にどうもありがとうございます

dim books 
books = array("book1.xls","book2.xls",....) 

次に、あなたのループのコードは、私が詳細にあなたを助けることができない

dim myBk as Workbook 
dim bkFile as string 
For Each bkFile in books 
    myBk = Workbooks.Open(bkFile, ReadOnly) 
    myBk.Activate 
    'Transfer cells from myBk to target workbook 
    target.cells(--).Value = myBk.Sheets("myStuff").Cells(--) 
    ... 
Next 

ようになります。ループを通過するたびにtarget.cells引数を変更してデータの送り先を移動する必要があります。

3

もちろん、フォルダ内のブックをループして開いて、シートをループするだけです。フォーマットのわずかな違いによって、インポート時に余分な作業が必要になることがあります。私は「ImportWorksheet」で「シート」引数に「BYREF引数の型の不一致」を取得しているように思わ

ImportWorkbooks ThisWorkbook, "c:\path\to\folder\containing\workbooks\to\import" 
+0

Sub ImportWorkbooks(destination as workbook, importFolderPath As String) Dim objFSO As Object Dim objFolder As Object Dim objFile As Object Set objFSO = CreateObject("Scripting.FileSystemObject") 'Get the folder object associated with the directory Set objFolder = objFSO.GetFolder(importFolderPath) 'Loop through the Files collection and import each workbook For Each objFile In objFolder.Files Dim source As Workbook Set source = Application.Workbooks.Open(objFile.Path, ReadOnly:=True) ImportWorkbook source, destination wb.Close Set wb = Nothing Next Set objFolder = Nothing Set objFile = Nothing Set objFSO = Nothing End Sub Sub ImportWorkbook(source As Workbook, destination as Workbook) Dim sheet As Worksheet 'Import each worksheet For Each sheet In source.Sheets ImportWorksheet sheet, destination Next sheet End Sub Sub ImportWorksheet(sheet As Worksheet, destination as Workbook) 'Perform your import logic for each sheet here (i.e. Copy from sheet and paste into a 'sheet into the provided workbook) End Sub 

基本的な使用法は、現在のワークブックにインポートするには、次のようなものになるだろうコンパイル時に。理由は何ですか?それにもかかわらず、コードは非常にきれいに見えます。ありがとう! – MattV

+2

はい、シート変数は、具体的にはワークシートとして初期化する必要があります。 VBAがあなたに与える幻想的なエラーメッセージの1つ。:)これを反映するようにコードを更新します。 – Shaun

関連する問題