1

リコンパイル シートにデータを貼り付けるときに問題が発生しました。再コンパイル シートは要約シートのようなもので、指定された選択したワークシートからすべてのデータを貼り付けます。マスターシートは、範囲(「AA」)がコピーして貼り付けてシートを再コンパイルするすべてのワークシート名で構成される参照シートです。ワークシート名の例は、ワークシート A、B、C などです。ワークシート名をマスター シート範囲 (「AA」) に書き込むだけで、プログラムは指定されたすべてのワークシート名を追跡します。私の問題は、ワークシート A からデータを貼り付けると、ワークシート B、C、D のデータも同じセルに貼り付けられ、上書きされることです。私がやろうとしているのは、データ ワークシート A を貼り付けてシートを再コンパイルし、次の空のセルはワークシート B からのデータなどです。これは私のコードです。

Private Sub CommandButton2_Click()

 Dim Sheetname, myrange As String
 Dim A, noOfrows As Integer
 Dim startRow As Integer

For i = 2 To Worksheets("Master Sheet").Cells.SpecialCells(xlCellTypeLastCell).Row

Sheetname = Worksheets("Master Sheet").Cells(i, 27).Value'Reference sheet range ("AA")
 noOfrows = Worksheets(Sheetname).Cells.SpecialCells(xlCellTypeLastCell).Row
 myrange = "A2:N" & CStr(noOfrows)'Data from column A to column N
 Worksheets(Sheetname).Select
 Worksheets(Sheetname).Range(myrange).Select
 Selection.Copy
 Sheets("Recompile").Select         
 Range("A2").Select
 ActiveSheet.Paste

 Next i
 End Sub
4

2 に答える 2

1

コードに含まれていないものがいくつかあります。反復/ループを使用してこのプロセスに近づいていることを考えると、多少の混乱が予想されます。ただし、私の主な懸念は、 and を使用ActiveSheetSelect、最終的なアクションが 1 つのセル ( Range("A2") のみを参照することです。これは、各反復の結果のアクションがこのセルだけを変更することを意味します。これに対する 1 つの考えられるアプローチについては、以下を参照してください。

最初に、 にあるワークシートの名前を繰り返し処理する必要がありますMaster Sheet, Column AA。次に、この名前に対応するワークシートの最後の行を確認する必要があります。コードに基づいてA2、 の最後の行までのセルの範囲がColumn NRecompile シートにコピーされ、Cell から始まりA2ます (ヘッダーがあると仮定しています)。

ただし、すべてのコピーの後、次の 3 つのことも行う必要があります。 1. シート名のリスト内の次の名前に移動します。2. 次の名前に対応するシートの新しい最後の行を見つけます。3. Recompile シートの新しい最後の行を見つけて、そこから開始できるようにします。

これで、シートの数だけループする必要があります。このロジックにより、次のコードが生成されます (未テスト、ワークブックのバックアップ コピーで実行してください)。

Private Sub Boom()

    Dim ShMaster As Worksheet, ShRecompile As Worksheet
    Dim ShName As String, RngToCopy As Range
    Dim LRowSrc As Long, LRowRecompile As Long 'Src is other sheets
    Dim LRowMaster As Long 'This will be our iteration limit.
    Dim Iter As Long

    With ThisWorkbook
        Set ShMaster = .Sheets("Master Sheet")
        Set ShRecompile = .Sheets("Recompile")
    End With

    LRowMaster = ShMaster.Cells(Rows.Count, 27).End(xlUp).Row

    For Iter = 2 to LRowMaster
        ShName = ShMaster.Cells(Iter, 27).Value
        With ThisWorkbook.Sheets(ShName)
            LRowSrc = .Cells(Rows.Count, 1).End(xlUp).Row
            Set RngToCopy = .Range("A2:N" & LRowSrc)
            RngToCopy.Copy
        End With
        With ShRecompile
            LRowRecompile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
            .Range("A" & LRowRecompile).PasteSpecial xlPasteAll
        End With
    Next Iter

End Sub

ここで、シート名のリストが AA1 で始まるという 1 つの主要な仮定が行われます。これは重要。そうでない場合は、リストの真の開始セルの行番号に変更しIter = 1ます。Iter = nn

これが役立つかどうかお知らせください。

更新:リストが で始まるためAA2、上記のコードを更新しました。

于 2013-11-15T05:59:10.427 に答える
0

未検証

この部分を変更

Sheets("Recompile").Select         
Range("A2").Select
ActiveSheet.Paste

With Sheets("Recompile")
   .Range("A" & .Rows.Count).End(xlUp).offset(1,0).Paste
End With
于 2013-11-15T06:00:09.043 に答える