0

すべてのワークシートを 1 つのワークシートにコピーする Excel マクロを作成しようとしています。

すべてのワークシートは、すべての行のすべてのセルにデータを含む同じ 4 列にレイアウトされます。各シートにはヘッダーがあります。各シートから事前にフィルター処理されたデータを結果シートにコピーしようとしています。各シートのデータは互いに積み重ねられます。

これまでのところ、これは私が持っているものであり、ほとんど機能しています。

Dim sh As Worksheet
Dim iRows As Long

iRows = 0

For Each sh In ActiveWorkbook.Worksheets

sh.Select
Range("A1").Select
Selection.Offset(1, 0).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

Worksheets("Results").Select
Range("A1").Select
Selection.Offset(iRows, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues

iRows = Worksheets("Results").UsedRange.Rows.Count
Next sh

オフセットが正しくありません。次のシートにコピーすると、前の行にコピーされたデータにコピーされます。

誰かがそれを手伝ってくれるなら、私がここで間違っていることも説明できれば、私はExcelとVBAが初めてなので、それは素晴らしいことです. ペーストが正しく機能する方法を理解していないと思いますか?

4

2 に答える 2

4
Sub tgr()

    Dim ws As Worksheet
    Dim wsDest As Worksheet

    Set wsDest = Sheets("Results")

    For Each ws In ActiveWorkbook.Sheets
        If ws.Name <> wsDest.Name Then
            ws.Range("A2", ws.Range("A2").End(xlToRight).End(xlDown)).Copy
            wsDest.Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End If
    Next ws

End Sub
于 2013-09-17T16:15:32.863 に答える
0

私はそれを理解することができました。私のコードが理想的かどうかはわかりませんが、必要なものが機能するようになりました。

ワークブックに 2 つの空白のワークシートがありました。1 つはテンプレートと呼ばれ、もう 1 つは結果です。私が行ったことは追加され、これらの 2 つのページを無視する if ループです。空白のシートが 2 枚あったため、余分なスペースを追加していたようです。

于 2013-09-17T16:16:11.023 に答える