- ベストアンサー
シート間の値の貼り付け。スマートにしたい。
- エクセルのシート1の[d7]からシート2の[最終行]からカウントした数分(下の場合はシート1[d7]の値をc列に3行分)貼り付ける方法について質問です。
- シート1の[b2](貼り付け時に日付)[b3](VLOOKUPの計算式が入っているので値のみ)[b4](時刻)の形式でシート2のd,e,l列に3行ずつ貼り付けたい方法を教えてください。
- 動作が重くなってしまったため、値のみ貼り付ける方法を試したいです。元のコードの代わりに、Worksheets("Sheet1").Range("c7")の値をWorksheets("月度集計").Range("c65536").End(xlUp).Offset(1, 0).Resize(n, 1)に貼り付けたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
動作が重くなるのはおそらくセルのCopy&Pasteを何回も繰り返しているためだと思います。 Excelはコピーした情報を複数持てるので、何回もコピーするとメモリーを消費してしまいます。 対策は、コピー先の書式が列ごとに決まっているならあらかじめ書式を列単位に設定しておいて、セルの値だけをコピーしたほうはいいでしょう。 どうしても書式をコピーしたいのであれば、毎回ではなく最初に1回だけ書式をコピーしそれを保存しておいて、Pasteだけを複数回繰り返せば重くならないと思います。 値だけのコピーの場合のコードは、下記のとおりです。 Dim n As Integer Dim p As Integer n = 3 p = Worksheets("Sheet2").Range("C65536").End(xlUp).Row + 1 Worksheets("Sheet2").Cells(p, 3).Resize(n, 1).Value = Worksheets("Sheet1").Range("C7").Value Worksheets("Sheet2").Cells(p, 4).Resize(n, 1).Value = Worksheets("Sheet1").Range("B2").Value Worksheets("Sheet2").Cells(p, 5).Resize(n, 1).Value = Worksheets("Sheet1").Range("B3").Value Worksheets("Sheet2").Cells(p, 6).Resize(n, 1).Value = Worksheets("Sheet1").Range("B4").Value