はじめに
Excelで作成した計算シートを他の人に共有する際、「計算式を消して、見えている結果の数値だけを送りたい」ということはよくありますよね。
通常は、範囲をコピーして、同じ場所に「形式を選択して貼り付け」から「値」を選ぶ(通称「値貼り」)という操作を行います。これは非常に便利な機能ですが、頻繁に行う場合は少し手間です。
この「値貼り」と同じことを、VBAマクロを使えばコピー&ペーストの操作なしで、よりスマートに実行できます。この記事では、選択した範囲の数式をその計算結果の値に一括で変換する、魔法のような一行コードをご紹介します。
数式を値に変換するVBAサンプルコード
VBAで数式を値に変換する基本的な考え方は、「セルの Value
プロパティに、それ自身の Value
プロパティを代入する」というものです。
Excel VBAでは、Range.Value
はセルの計算結果の値を返すため、この操作によって数式が計算結果で上書きされる、という仕組みです。
完成コード
' 選択範囲の数式をその計算結果の値に変換する
Sub ConvertFormulasToValues()
' 変数を定義します
Dim targetRange As Range
' グラフなどが選択されている場合を考慮し、対象がセル範囲かを確認
If TypeName(Selection) <> "Range" Then
MsgBox "セル範囲を選択してから実行してください。", vbExclamation
Exit Sub
End If
' 選択範囲をセット
Set targetRange = Selection
' 選択範囲の数式を値に変換
targetRange.Value = targetRange.Value
End Sub
使い方
- VBE(
Alt + F11
)を開き、標準モジュールに上記のコードを貼り付けます。 - 数式を値に変換したいセル範囲を選択します。
ConvertFormulasToValues
マクロを実行します。- 選択した範囲の数式が、すべて計算結果の数値や文字列に置き換わります。
コードの解説
If TypeName(Selection) <> "Range" Then ...
マクロ実行時に、グラフのオブジェクトなど、セル範囲 (Range
) 以外が選択されているとエラーになってしまうのを防ぐための安全装置です。
targetRange.Value = targetRange.Value
この一行が、この記事の核心です。一見すると「AにAを代入する」という無意味な処理に見えますが、VBAの仕様上、右辺の targetRange.Value
は「セルの計算結果」を返します。その計算結果を、左辺の targetRange.Value
(セルの値そのもの)に代入することで、結果的に数式が値で上書きされるのです。
この方法は、クリップボードを使わないため、コピー&ペーストを行うよりも処理が高速で、コードもシンプルになるというメリットがあります。
まとめ
今回は、VBAを使って選択範囲の数式を値に変換する、非常にシンプルで効果的な方法をご紹介しました。
Selection.Value = Selection.Value
という一行で、コピー&ペーストなしの「値貼り」が実現できる。
このマクロをクイックアクセスツールバーに登録しておけば、いつでもワンクリックで数式を値に変換でき、日々の業務がさらに効率的になります。ぜひ活用してみてください。