2017-06-27 5 views
0

すべてのファイル名が異なる〜20個のワークブックがあるフォルダがあり、各ワークブックの特定のワークシートを1つのメインワークブックにまとめる必要があります。私はVBAに慣れていませんが、私は誰かが私の擬似コードをExcel用のVBAスクリプトに変えることを望んでいました。複数のワークブックの特定のシートをループしてコンパイルするVBAコード

create wrkbk_names as array 
store workbook names in "folder" to wrkbk_names 
for each book in wrkbk_names 
    for each worksheet in book 
     if worksheet.name = "targetSheet" 
       copy worksheet("targetSheet") to Mainbook.xlxs 

ワークブックは非常に大きく、50枚以上の本があるので、起動しなくても開くことができれば、プロセスがかなりスピードアップします。私が抽出しようとしている特定のワークシートは、すべてのワークブックで同じ名前を持っていますが、私はそのインデックスについてあまりよく分かりません。

スクリプトは、ワークブックのセルをメインブックの次の空行にコピーできるので、20個のブックからのすべてのtargetSheetデータをメインブックの1つのワークシートにコンパイルすることができます。

+0

すべてのブックのシートが同じ構造を持ち、特定のフォルダの1か所に保存されている場合は、Power Queryを使用してみてください。 YouTubeの「Power Queryでファイルを結合する方法」を検索すると、簡単にどのように達成できるかについての十分な情報が得られます。 – sktneer

答えて

0

あなたはVBAでこれを行うための特定の好みを持っている場合は、Scripting.FileSystemObjectが使用することを検討してください(ツール経由のMicrosoftスクリプトランタイムへの参照を追加します - > [参照...):すべての場合

'Assuming you are running this within Excel 
'otherwise you'll have to create an Excel instance 

'This also assumes that the target workbook is the currently active workbook 
'in the Excel instance 

Dim mainBook As Workbook 
Set mainBook = ActiveWorkbook 

Dim fso As New Scripting.FileSystemObject 
Dim fle As Scripting.File 
Dim book As Workbook 
For Each fle In fso.GetFolder("C:\folder").Files 

    'Should probably check here that the file is actually an Excel file 

    Set book = Workbooks.Open(fle.Path) 
    Dim wks As Worksheet 
    For Each wks In book.Worksheets 
     If wks.Name = "targetSheet" Then 
      wks.Copy mainBook.Worksheets(1) 'copies to the start of the main workbook 
     End If 
    Next 
    book.Close 
Next 
+0

ありがとうございました。私は他の誰かがフォーラムで書いたスクリプトを見つけてそれを修正しました。私は基本的にディレクトリ内のファイルの文字列を取得し、順次開いて、必要なシートを抽出しました。スクリーン更新のプロパティは確かに便利でした。 – TeeWee

関連する問題