MW211 EXIT

devlog
ExcelVBA/範囲の値コピー最速
2018年03月24日
配列を介するのがよいようだ。
配列は二次元配列となるが、Variant型配列にすれば手軽に使える。

「入力」シートの左上3×3を、「出力」シートの左上3×3に値コピーする処理は
以下のような感じになる
┌──────────────────────────────────────┐
│Dim 配列 As Variant                                                         │
│With ThisWorkbook.Worksheets("入力")                                        │
│    配列 = Range(.Cells(1, 1), .Cells(3, 3)).Value                          │
│End With                                                                    │
│With ThisWorkbook.Worksheets("出力")                                        │
│    Range(.Cells(1, 1), .Cells(3, 3)) = 配列                                │
│End With                                                                    │
└──────────────────────────────────────┘

配列を介さず直接値コピーすることも可能。
┌──────────────────────────────────────┐
│Range(.Cells(4, 4), .Cells(6, 6)) = Range(.Cells(1, 1), .Cells(3, 3)).Value │
└──────────────────────────────────────┘
この方式では、異なるシート間でもコピーは可能だが
記述が煩雑となるので、異なるシート間の場合は、
配列を介した方がわかりやすいであろう
┌──────────────────────────────────────┐
│Range(出力シート.Cells(4, 4), 出力シート.Cells(6, 6)) _                     │
│= Range(入力シート.Cells(1, 1), 入力シート.Cells(3, 3)).Value               │
└──────────────────────────────────────┘
なお、配列に代入する際には「.Value」を省略できるが
範囲から範囲へ代入する場合には省略すると
値がコピーされない(何も起きない)ので注意。
分類:ExcelVBA