1

ある Excel ワークシートから値をコピーして別のワークシートに貼り付けるマクロを作成しています。以下に示すように、値を正しいワークシートに正しくコピーして貼り付けるコードがありますが、セル "C3" だけでなく、行 3 の次の空のセルに貼り付けたいと考えています。すべての助けに感謝します。

Private Sub CommandButton1_Click()
 Dim wsMaster As Worksheet, wbDATA As Workbook
Dim NextRow As Long, LastRow As Long
Dim vMax As Variant

Set wsMaster = ThisWorkbook.Sheets("Contract Metrics")
NextRow = wsMaster.Range("A" & Rows.Count).End(xlUp).Row + 1

Set wbDATA = Workbooks.Open("C:\Documents and Settings\Michael Palkovitz\My Documents\Test\Contracts Metrics.xlsx")
With wbDATA.Sheets("Contract Task Summary(1)")
    LastRow = .Range("C" & .Rows.Count).End(xlUp).Row

    If LastRow > 1 Then
        .Range("C" & LastRow).Copy
        wsMaster.Range("C" & 3).PasteSpecial xlPasteValues
        wsMaster.Range("C" & 3).PasteSpecial xlPasteFormats
    End If
End With

wbDATA.Close False
End Sub
4

1 に答える 1

1

これはあなたが探しているコードです:

Private Sub CommandButton1_Click()
Dim wsMaster As Worksheet, wbDATA As Workbook
Dim NextRow As Long, LastRow As Long
Dim vMax As Variant
Dim columnToPaste As Integer
Dim lastColumnToPaste As Integer
Dim lastColumn as Integer

Set wsMaster = ThisWorkbook.Sheets("Contract Metrics")
NextRow = wsMaster.Range("A" & Rows.Count).End(xlUp).Row + 1

Set wbDATA = Workbooks.Open("C:\Documents and Settings\Michael Palkovitz\My Documents\Test\Contracts Metrics.xlsx")
With wbDATA.Sheets("Contract Task Summary(1)")
    LastRow = .Range("C" & .Rows.Count).End(xlUp).Row

    If LastRow > 1 Then
        .Range("C" & LastRow).Copy
        lastColumn = 3
        lastColumnToPaste = lastColumn + 20
        columnToPaste = lastColumn - 1
        Do
           columnToPaste = columnToPaste + 1
           If IsEmpty(wsMaster.Cells(lastRow, columnToPaste)) Then
               wsMaster.Cells(lastRow, columnToPaste).PasteSpecial xlPasteValues
               wsMaster.Cells(lastRow, columnToPaste).PasteSpecial xlPasteFormats
               Exit Do
           End If
        Loop While (columnToPaste < lastColumnToPaste)
    End If
End With

wbDATA.Close False
End Sub

これは、問題を解決するための基本的なアプローチにすぎません。一部の値は動的に更新する必要があります (たとえば、変数で指定された、チェックする最大行lastRowToPaste)。

2 つの異なるワークブック間での書き込み/貼り付けは非常に非効率的であることに注意してください。このプロセスを長時間繰り返さなければならない場合は、次のようにします。入力スプレッドシートを開き、すべての値を一時的な場所 (サイズに応じて、配列または一時ファイル) に保存し、閉じます。コピー先のスプレッドシートを開き、この場所からデータを書き込みます (コピー/貼り付けに依存しません)。これは、問題に対するはるかに迅速なアプローチです。

于 2013-06-17T12:35:01.147 に答える