これはExcelマクロの質問です。次のような一連の式が与えられます。
= A1 + A2
= B2 + B2
など、.。
セル全体を置き換えることなく、これらの各セル参照を値に置き換えたいと思います。
= 1 + 2
= 3 + 4
これを手動で行う方法は、数式内の各参照を強調表示して、を押すことです。 F9 参照を値に置き換えます。しかし、私は何千ものセルに対してこれをしなければなりません。これを自動的に実行するマクロはありますか?
次のモジュールは範囲を取り、セル参照を参照されたセルで見つかった値に置き換えます。 _Range.Precedents
_を使用して参照されるセルアドレスを文字列に取得し、Split
を使用してそれをセルアドレスの配列に変換します。次に、この配列を使用して、ターゲットセルの数式内の一致するテキストを検索して置換します。
使用法
Call ReplaceReferencesWithValues(yourRange)
を使用してサブルーチンを呼び出します。Test
マクロは、サブルーチンを呼び出して、選択した範囲の参照を置き換えます。
コード
_Option Explicit
Sub Test()
Call ReplaceReferencesWithValues(Selection)
End Sub
Sub ReplaceReferencesWithValues(rng As Range)
Dim cl As Range
Dim ws As Worksheet
Dim strTemp As String
Dim strRef() As String
Dim intIndex As Integer
For Each cl In rng
Set ws = cl.Worksheet
strTemp = cl.Formula
strRef() = ReferenceArray(cl)
For intIndex = LBound(strRef) To UBound(strRef)
strTemp = Replace(strTemp, strRef(intIndex), _
ws.Range(strRef(intIndex)).Value)
Next
cl.Formula = strTemp
Next
End Sub
Function ReferenceArray(rngSource As Range) As Variant
Dim rngRef As Range
Dim strTemp As String
On Error Resume Next
For Each rngRef In rngSource.Precedents.Cells
strTemp = strTemp & ", " & rngRef.Address(False, False)
Next
If Len(strTemp) > 0 Then strTemp = Mid(strTemp, 3)
ReferenceArray = Split(strTemp, ", ")
End Function
_
懸念事項
String
として行われるため、数式にcell "A1"への参照と他のテキストの両方が含まれる場合「A1」を含めると、一致するテキストもcell「A1」の値に置き換えられます。SUM
など、関数に範囲を必要とする数式は、参照をセル値に置き換えようとすると壊れます。