質問: 3 + 4 これを手動で行う方法は、数式内の各参照を強調表示して、を押すことです。 f9 参照を値に置き換えます。しかし、私は何千ものセルに対してこれをしなければなりません。これを自動的に実行するマクロはありますか?
回答: 次のモジュールは範囲を取り、セル参照を参照されたセルで見つかった値に置き換えます。 _range.precedents_を使用して参照されるセルアドレスを文字列に取得し、splitを使用してそれをセルアドレスの配列に変換します。次に、この配列を使用して、ターゲットセルの数式内の一致するテキストを検索して置換します。使用法 コード全体をvisualbasiceditorの標準コードモジュールにコピーします。 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など、関数に範囲を必要とする数式は、参照をセル値に置き換えようとすると壊れます。