ワークシート上のあらゆる場所に、=((E9-E8)/E8)
のような多数のセルがあります。最初の2つの値を使用して、この新しい式(EXP((LN(E9/E8)/14.32))-1)
。
一度にすべてを新しいフォーミュラに変更するにはどうすればよいですか?
数式が同一の場合は、[検索してMatch entire cell contents
チェック付き、Look in: Formulas
で置換を使用できます。範囲を選択し、[検索と置換]に移動して、入力を行い、[すべて置換]をクリックします。
または、この同じ形式で複数の数式があり、セル参照が異なることを意味しますか?もしそうなら、1つの方法は正規表現の一致と置換です。正規表現はExcel(またはVBA)に組み込まれていませんが、MicrosoftのVBScript正規表現ライブラリを介してアクセスできます。
次の機能は、必要な一致および置換機能を提供します。指定された範囲内の数式でセルを識別し、その数式を関数への入力として使用するサブルーチンで使用できます。探しているパターンに一致する式文字列の場合、関数は置換式を生成し、ワークシートに書き戻すことができます。
Function RegexFormulaReplace(formula As String)
Dim regex As New RegExp
regex.Pattern = "=\(\(([A-Z]+\d+)-([A-Z]+\d+)\)/([A-Z]+\d+)\)"
' Test if a match is found
If regex.Test(formula) = True Then
RegexFormulaReplace = regex.Replace(formula, "=(EXP((LN($1/$2)/14.32))-1")
Else
RegexFormulaReplace = CVErr(xlErrValue)
End If
Set regex = Nothing
End Function
関数が機能するためには、Microsoft VBScript Regular Expressions 5.5ライブラリへの参照を追加する必要があります。メインリボンのDeveloper
タブから、VBA
を選択し、メインツールバーからReferences
を選択します。下にスクロールしてライブラリへの参照を見つけ、その隣のボックスをチェックします。
解決策は、R1C1セル参照に切り替えることでした。私のワークシートは、すべてのフォーミュラがちょうど異なる参照を持つ同じ構造を持つように構成されていました。幸運なことに、彼らは常に同じように配置されていました
=((E9-E8)/E8)
なりました
=((R[-1]C-R[-2]C)/R[-2]C)
そして
(EXP((LN(E9/E8)/14.32))-1)
なりました
=(EXP((LN(R[-1]C/R[-2]C)/14.32))-1)
R1C1リファレンスでは、すべての式が同一であったため、検索と置換にはワイルドカードは必要ありませんでした。答えた人に感謝します!
私が通常これを処理する方法は、2番目のソフトウェアです。 WindowsではNotepad ++を使用し、OS XではSublime Text 2を使用します。
Ctrl + hからアクセスできる検索および置換コマンドを使用し、セルの機能を検索していることを確認します。その後、ワイルドカードを使用して、式の偏差に対応できます。 *#ワイルドカードの場合、?文字のワイルドカード、および〜?または〜*を検索するには?または*。