Excelのマクロでデータを別の場所へコピーする際、元のセルに数式が入っていると困ることがあります。
とくに、コピー先では「計算結果だけがほしい」というケースでは、数式ごとコピーされてしまうと意図しない再計算や参照エラーを引き起こすこともあります。
そこで今回は、VBAを使って「値だけ」をコピーする方法と、その応用について紹介します。
なぜ数式ごとコピーされてしまうのか?
次のようなコードを書くと、セルに含まれる数式もそのままコピーされてしまいます。
Range("A1:B5").Copy Destination:=Range("D1")
この方法では、A1:B5 にあるすべての情報(値・数式・書式)がそのまま D1 に貼り付けられます。
そのため、コピー先のセルに数式が残ってしまい、意図しないセル参照やエラーになることがあります。
値だけをコピーする方法
数式ではなく、計算結果だけをコピーしたい場合は、.Value を使うのが基本です。
次のようなコードにすれば、値のみがコピーされます。
Sub copy_values_only()
Dim src As Range
Dim dst As Range
Set src = Range("A1:B5")
Set dst = Range("D1")
' 値のみをコピー
dst.Resize(src.Rows.Count, src.Columns.Count).Value = src.Value
End Sub
このコードでは、Resize を使ってコピー先のサイズをコピー元に合わせています。
これにより、見た目は通常のコピーと変わらず、数式だけが除かれた状態で値が貼り付けられます。
実装するメリット
- 数式を含むコピーでエラーになるのを防げる
- コピー先で意図しない参照が起きない
- 計算結果を記録として残す際に便利
見た目も含めてコピーしたいときの工夫
.Value を使うと「値だけ」は正しくコピーされますが、セルの書式(罫線・色・フォントなど)は含まれません。
書式も含めてコピーしたいときは、値と書式を分けて貼り付ける方法があります。
Sub copy_values_and_format()
Dim src As Range
Dim dst As Range
Set src = Range("A1:B5")
Set dst = Range("D1")
With dst.Resize(src.Rows.Count, src.Columns.Count)
.Value = src.Value ' 値をコピー
.Interior.Color = src.Interior.Color ' 背景色のみコピー(必要に応じて追加)
.Font.Name = src.Font.Name ' フォント指定(必要に応じて追加)
' 必要な書式を個別に指定して追加できる
End With
End Sub
必要な要素だけを個別に指定してコピーできるので、「値だけコピーしたいけど、最低限の見た目も維持したい」といった場合に有効です。
まとめ
コピー元に数式が含まれていると、マクロの動作が不安定になったり、意図しない値が表示されてしまうことがあります。
そんなときは、.Value を使って値だけをコピーするのがもっとも安全な方法です。
今回のポイントは次の通りです。
.Copyは数式や書式も含まれるため、注意が必要.Valueを使えば、計算結果だけをコピーできる- 書式を残したいときは、必要な項目だけを個別に指定して貼り付ける
処理の目的に応じて「何をコピーすべきか」を考えることで、より実務的で安全なマクロを作成できます。
数式を気にせず処理できる仕組みを作って、日々の作業を効率化していきましょう。


