0

ループを使用して、あるワークブックのデータを別のワークブックに移動する次のようなコードを見つけました。移動する情報が正しくないことを除いて、コードは機能します。最後の列をX回(X =行数)コピーし続ける理由を誰かに教えてもらえますか?J2のX行とJ3のX行などではなく、A2とJ11の間のデータを1回だけコピーしたい。

Sub CopySample()
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lCol As Range, lRow As Range
Dim CurCell_1 As Range, CurCell_2 As Range

Application.ScreenUpdating = False

'~~> Change as applicable
Set wb1 = Workbooks("Sample1.xlsm")
Set wb2 = Workbooks("OverallData_Month_X.xlsm")
Set ws1 = wb1.Sheets("SampleSheet")
Set ws2 = wb2.Sheets("All Cylinders Data") '<~~ Change as required

For Each lCol In ws1.Range("A2:J11")
'~~> Why this?
Set CurCell_2 = ws2.Range("A2:J2")
For Each lRow In ws1.Range("A2:J11")
    Set CurCell_1 = ws1.Cells(lRow.Row, lCol.Column)
    If Not IsEmpty(CurCell_1) Then
        CurCell_2.Value = CurCell_1.Value
        Set CurCell_2 = CurCell_2.Offset(1)
    End If
Next
Next

Application.ScreenUpdating = True
End Sub
4

1 に答える 1

0

テストされていませんが、この行Set CurCell_2 = ws2.Range("A2:J2")を次のように変更してみてください:

Set CurCell_2 = ws2.Cells(1, lCol.Column)

アップデート

全体として、上記のコードは、ワークブックのさまざまなセクションへの参照を設定し、それらの参照をオフセット(移動)しているようです。これを行うにはもっと効果的な方法があり、コーディングするのも簡単な方法があると私は主張します。したがって、上記の回答はあなたが抱えていた問題の半分しか解決しませんでしたが、私はあなたが理解して更新するためにあなたにもっと意味を持たせることができるようにあなたのコードを書き直しました。

以下のコード例は、あなたが達成しようとしていることを実行すると思います。

(コード内のコメント)

Sub CopySample

Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet

Set wb1 = Workbooks("Sample1.xlsm")
Set wb2 = Workbooks("OverallData_Month_X.xlsm")
Set ws1 = wb1.Sheets("SampleSheet")
Set ws2 = wb2.Sheets("All Cylinders Data")

Dim rngCopyFromRange As Range
Set rngCopyFromRange = ws1.Range("A2:J11") '- name the copy range for ease of read

Dim rngPasteStartCell As Range
Set rngPasteStartCell = ws2.Range("A2") 'top left cellt o begin the paste


Dim lCurrentColumn As Long
Dim lCurrentRow As Long

    For lCurrentColumn = 1 To rngCopyFromRange.Columns.Count 'for each column in the source data
        For lCurrentRow = 1 To rngCopyFromRange.Rows.Count '-for each row in each column in source data
            'set the offset of the starting cell's value equal ot the top left cell in the source data offset by the same amount
            '- where the offsets are equal to the row/column we are on - 1
            rngPasteStartCell.Offset(lCurrentRow - 1, lCurrentColumn - 1).Value = _
                rngCopyFromRange.Cells(1, 1).Offset(lCurrentRow - 1, lCurrentColumn - 1).Value
        Next lCurrentRow
    Next lCurrentColumn

End Sub
于 2012-09-14T18:16:13.080 に答える