web-dev-qa-db-ja.com

簡単なExcelの検索と式の置換

ワークシート上のあらゆる場所に、=((E9-E8)/E8)のような多数のセルがあります。最初の2つの値を使用して、この新しい式(EXP((LN(E9/E8)/14.32))-1)

一度にすべてを新しいフォーミュラに変更するにはどうすればよいですか?

14
Tomulent

数式が同一の場合は、[検索してMatch entire cell contentsチェック付き、Look in: Formulasで置換を使用できます。範囲を選択し、[検索と置換]に移動して、入力を行い、[すべて置換]をクリックします。

enter image description here

または、この同じ形式で複数の数式があり、セル参照が異なることを意味しますか?もしそうなら、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を選択します。下にスクロールしてライブラリへの参照を見つけ、その隣のボックスをチェックします。

18
chuff

解決策は、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リファレンスでは、すべての式が同一であったため、検索と置換にはワイルドカードは必要ありませんでした。答えた人に感謝します!

6
Tomulent

私が通常これを処理する方法は、2番目のソフトウェアです。 WindowsではNotepad ++を使用し、OS XではSublime Text 2を使用します。

  1. Excelで、Ctrl +〜(OS X)を押します
  2. Excelはすべての値を数式バージョンに変換します
  3. CMD + A(私は通常これを2回行います)シート全体を選択します
  4. すべての内容をコピーして、Notepad ++/Sublime Text 2に貼り付けます
  5. ここで数式の内容を検索/置換します
  6. 内容をコピーしてExcelに貼り付け、セルサイズの違いに関する問題を確認します。
  7. Ctrl +〜で値モードに切り替えます
3
Craig Hooghiem

Ctrl + hからアクセスできる検索および置換コマンドを使用し、セルの機能を検索していることを確認します。その後、ワイルドカードを使用して、式の偏差に対応できます。 *#ワイルドカードの場合、?文字のワイルドカード、および〜?または〜*を検索するには?または*。

1
Mason