【VBA】セルの数式を結果の値に変換(値貼り)するマクロ

目次

はじめに

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

使い方

  1. VBE(Alt + F11)を開き、標準モジュールに上記のコードを貼り付けます。
  2. 数式を値に変換したいセル範囲を選択します。
  3. ConvertFormulasToValues マクロを実行します。
  4. 選択した範囲の数式が、すべて計算結果の数値や文字列に置き換わります。

コードの解説

If TypeName(Selection) <> "Range" Then ...

マクロ実行時に、グラフのオブジェクトなど、セル範囲 (Range) 以外が選択されているとエラーになってしまうのを防ぐための安全装置です。

targetRange.Value = targetRange.Value

この一行が、この記事の核心です。一見すると「AにAを代入する」という無意味な処理に見えますが、VBAの仕様上、右辺の targetRange.Value は「セルの計算結果」を返します。その計算結果を、左辺の targetRange.Value(セルの値そのもの)に代入することで、結果的に数式が値で上書きされるのです。

この方法は、クリップボードを使わないため、コピー&ペーストを行うよりも処理が高速で、コードもシンプルになるというメリットがあります。


まとめ

今回は、VBAを使って選択範囲の数式を値に変換する、非常にシンプルで効果的な方法をご紹介しました。

  • Selection.Value = Selection.Value という一行で、コピー&ペーストなしの「値貼り」が実現できる。

このマクロをクイックアクセスツールバーに登録しておけば、いつでもワンクリックで数式を値に変換でき、日々の業務がさらに効率的になります。ぜひ活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次