.Copy
このメソッドは、連続していない範囲では使用できません。
ただし、ほとんどの場合、人々は何かを「コピー」したいのですが、本当に気にするのは値を転送することだけです。これは、コピー/貼り付け手順なしで実行できます (書式設定などもコピーする必要がある場合、これは次のように同様に実行できます)。下)。
これを通常のコード モジュールではなく Workbook コード モジュールに入れます。Workbook コード モジュールに入れる必要があります。これにより、ワークブックでTransferValues
a を実行するたびにサブルーチンが呼び出されます。Save
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.Run "TransferValues"
End Sub
これを通常のコードモジュールに入れます。
改訂
範囲が連続していないため、いくつかの変更を加える必要がありました。範囲を反復処理してから.Areas
、それぞれのセル内の個々のセルを反復処理する必要があります。
Private Sub TransferValues()
Dim wsMain As Worksheet: Set wsMain = Sheets("Main Form")
Dim wsData As Worksheet: Set wsData = Sheets("Database")
Dim rngToCopy As Range: Set rngToCopy = wsMain.Range("e3:e7,h3:h7,k3:k7,i12:i16,i18:i21,i23")
Dim c As Long
Dim ar As Range
Dim cl As Range
Dim lastRow As Long
Dim rngDestination As Range
'Get the last row in Database sheet:
lastRow = Application.WorksheetFunction.CountA(wsData.Range("A:A"))
Set rngDestination = wsData.Cells(lastRow + 1, 1).Resize(1, 25).Offset(1, 0)
For Each ar In rngToCopy.Areas
For Each cl In ar
c = c + 1
'I used this next line for testing:
' rngDestination.Cells(c).Value = cl.Address
rngDestination.Cells(c).Value = cl.Value
Next
Next
End Sub