2

複数のワークシートを 1 つに連結するマクロを作成しています。各ワークシートの行数はさまざまであるため、.end(xlDown) を使用して動的に設定しようとしています。現在、サブルーチンは多くのエラーに遭遇します: 最初はオブジェクト エラーでした。それらを修正すると、スタック オーバーフロー ランタイム エラー 6 が発生しました。変数を整数からロングに変更しても問題は解決しませんでした。今は " 400」エラー。

コードは次のとおりです。

Sub Concatenate()
    'Declare Variables
    Dim Curwb As Workbook

    'Set Variables
    Set Curwb = ActiveWorkbook

       'Concatenate Data
       'Timestamps
        Dim Stage1Count As Long
        Dim Stage2Count As Long
        Dim Stage3Count As Long
        Dim Stage4Count As Long
        Dim Stage5Count As Long
        Dim TotalCount As Long
            'Stage 1
                Curwb.Sheets("Stage 1").Select
                If Range("A3").End(xlDown).Address = Range("A3").Address Then
                    Range("A3").Copy Destination:=Curwb.Sheets _
("CombinedData").Range("A3")
                Else
                Range("A3", Range("A3").End(xlDown)).Select
                    Stage1Count = Selection.Cells.Count
                    Selection.Copy Destination:=Curwb.Sheets _
("Combined Data").Range("A3")
                End If
            'Stage 2
                Curwb.Sheets("Stage 2").Select
                If Range("A3").End(xlDown).Address = Range("A3").Address Then
                    Range("A3").Copy Destination:=Curwb.Sheets _
("Combined Data").Range("A3").Offset(Stage1Count, 0)
                Else
                Range("A3", Range("A3").End(xlDown)).Select
                    Stage2Count = Selection.Cells.Count
                    Selection.Copy Destination:=Curwb.Sheets _
("Combined Data").Range("A3").Offset(Stage1Count, 0)
                End If
End Sub

コードの何が問題になっていますか?

4

1 に答える 1

1

役立ついくつかのこと:

1) 、 などの使用は避け.SelectてくださいActiveWorkbookActiveSheet

2) を使用する代わりに.End(xlDown)、最後の行に移動して使用.End(xlUp)すると、最後に使用した行がより効果的に取得されます。

3) 変数として宣言されたシートを操作するのも簡単です。

私はあなたのコードに調整を加えました。これによりコードはかなり短縮され、目的を達成できるはずです。

Sub Concatenate()

'Declare Variables
Dim Curwb As Workbook

'Set Variables
Set Curwb = Workbooks("NameOfWorkbook") 'Avoid ActiveWorkbook at all cost :)

Dim ws As Worksheet, wsCopyTo As Worksheet
Dim rng As Range

With Curwb

    Set ws = .Sheets("Stage 1")
    Set wsCopyTo = .Sheets("Combined Data")

    With ws

        Set rng = .Range(.Range("A3"), .Range("A" & .Rows.Count).End(xlUp))
        rng.Copy wsCopyTo.Range("A" & wsCopyTo.Rows.Count).End(xlUp).Offset(1)

    End With

    Set ws = .Sheets("Stage 2")
    With ws

        Set rng = .Range(.Range("A3"), .Range("A" & .Rows.Count).End(xlUp))
        rng.Copy wsCopyTo.Range("A" & wsCopyTo.Rows.Count).End(xlUp).Offset(1)

    End With

End Sub
于 2012-10-24T17:43:03.423 に答える