2017-12-12 5 views
0

毎日複数のレポートを抽出し、それらはすべて「レポート」という単語で始まります。それらはすべて、行の量だけが同じ量の列を持ちます。私が作成したのは、最初に「レポート」という名前の開いているワークブックをすべてループし、マスターワークブックに連続して入れるデータを取得するサブフォーム「配布」複数の開いているワークブックを1つのシートにまとめた

私はマクロ私はそれが必要ですが、私はそれをよりダイナミックにするための指針を探しています。ヘッダー行を毎回コピーしていて、新しい列が追加された場合はキャプチャされません。行と同じです。

私はまだVBAにはかなり新しいですが、私はますます理解し始めていると思います。すべてのコメントセクションを残念に思っています。任意の有用なポインタが大いに感謝されるだろう。

Private Sub CommandButton3_Click() 
'Get Data button 
    Dim wbk As Workbook 
    Dim wsh As Worksheet 
    Dim nrow As Long 

    Set wsh = ActiveWorkbook.Worksheets("Data") 
screen 0 'turns off calculation and screen updating 
nrow = 2 
    For Each wbk In Workbooks 
     If Left(wbk.Name, 6) = "report" Then 
      wbk.Worksheets(1).Range("A1:Z1").Copy _ 'copies the header row 
       Destination:=wsh.Range("A1") 'paste data in row 1 
      wbk.Worksheets(1).Range("A2:Z500").Copy _ 'copy the rest of the 
       Destination:=wsh.Range("A" & nrow) 'paste data next available row 
      wbk.Close False 
      nrow = wsh.UsedRange.Rows.Count + 1 'Next row to paste next sheet into 
     End If 
    Next wbk 

nrow = 0 ' reset next row 

FilterData 'Function to filter unwanted data 
screen 1 'Turn on screen updating and calculation 

End Sub 
+0

あなたの最善の策は、Excelの表を使用して、列によりデータ列を転送することです。 Excelテーブルを使用せずにやりとりすることはできますが、もう少し作業が必要になります。ブックをExcelテーブルに変更することはできますか、それとも制御できませんか?ヘッダーは異なるワークブックでまったく同じですか? – Ibo

+0

私は手動でテーブルを変更することはできません。はい、列は常に同じレポート異なる時間枠と同じになります。レポートは30日単位で取得されます。 (IE 0-30,31-60,61-90)。しかし、それぞれの行が異なる..私の主な関心事は、行が500を超えたり、列がZを超えた場合です。 – Tony

+0

すべての列が同じで、順序が同じであれば、このコードは正常に動作します。あなたは実際に使用された範囲をコピーし、それをZ列または500行に限定しないでコピーすることができます – Ibo

答えて

0
Private Sub CommandButton3_Click() 
'Get Data button 
    Dim wbk As Workbook 
    Dim wsh As Worksheet 
    Dim nrow As Long 

    Set wsh = ActiveWorkbook.Worksheets("Data") 
screen 0 
    For Each wbk In Workbooks 
     If Left(wbk.Name, 6) = "report" Then 
      wbk.Worksheets(1).Range("A1:Z1").Copy _ 
       Destination:=wsh.Range("A1") 
      nrow = Worksheets("Data").Cells(Rows.Count, 1).End(xlUp).Row + 1 
      wbk.Worksheets(1).Range("A2:Z500").Copy _ 
       Destination:=wsh.Range("A" & nrow) 
      wbk.Close False 
     End If 
    Next wbk 

nrow = 0 

FilterData 
Sheets("admin").Select 
screen 1 

End Sub 
関連する問題