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
あなたの最善の策は、Excelの表を使用して、列によりデータ列を転送することです。 Excelテーブルを使用せずにやりとりすることはできますが、もう少し作業が必要になります。ブックをExcelテーブルに変更することはできますか、それとも制御できませんか?ヘッダーは異なるワークブックでまったく同じですか? – Ibo
私は手動でテーブルを変更することはできません。はい、列は常に同じレポート異なる時間枠と同じになります。レポートは30日単位で取得されます。 (IE 0-30,31-60,61-90)。しかし、それぞれの行が異なる..私の主な関心事は、行が500を超えたり、列がZを超えた場合です。 – Tony
すべての列が同じで、順序が同じであれば、このコードは正常に動作します。あなたは実際に使用された範囲をコピーし、それをZ列または500行に限定しないでコピーすることができます – Ibo