マクロで計算式を作成できるようになると、大きな表でも苦もなく必要な式を貼り付けていくことができます。
しかも、手操作における誤りも防げます。
但し、それにより巨大なファイルサイズになってしまうことも発生するので、以後に再計算の必要が発生しないシートについては不必要な計算式を残しておかないように心がける必要があります。
'***************************************************************************************************
' 計算式を値に貼り替えるサンプル Module1(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'03/07/24(1.00)新規作成
'12/01/22(1.01)初回修正
'20/02/23(1.10)*.xlsm化、他
'***************************************************************************************************
Option Explicit
'***************************************************************************************************
' ■■■ ワークシート側からの呼び出し処理 ■■■
'***************************************************************************************************
'* 処理名 :FormulaReplaceValues
'* 機能 :計算式を値に貼り替えるサンプル
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年07月24日
'* 作成者 :井上 治
'* 更新日 :2020年02月23日
'* 更新者 :井上 治
'* 機能説明:横縦の合計を算出し式を値に置き換える
'* 注意事項:
'***************************************************************************************************
Sub FormulaReplaceValues()
'-----------------------------------------------------------------------------------------------
Dim lngRow As Long ' 行INDEX
With ThisWorkbook.Worksheets(1)
' フィルタモード解除
If .FilterMode Then .ShowAllData
' 最終行の取得(全行埋まることは想定していない)
lngRow = .Range("$A$" & .Rows.Count).End(xlUp).Row
'---------------------------------------------------
' 各行の横合計式の配置+値貼り替え
With .Range(.Cells(2, 4), .Cells(lngRow, 4))
' 「金額」の横計の計算式をセット
.FormulaR1C1 = "=RC2*RC3"
' 再計算
.Calculate
' 値に置き換え
.Value = .Value
End With
'---------------------------------------------------
' 縦合計を作成
lngRow = lngRow + 1
.Cells(lngRow, 3).Value = "合計"
With .Cells(lngRow, 4)
' 縦合計式をセット
.FormulaR1C1 = "=SUM(R2C:R[-1]C)"
' 再計算
.Calculate
' 値に置き換え
.Value = .Value
End With
End With
End Sub
'----------------------------------------<< End of Source >>----------------------------------------