Excel:複数の値を一度に検索して置換する

  • これを共有
Michael Brown

このチュートリアルでは、複数の単語、文字列、または個々の文字を検索して置換する方法をいくつか紹介しますので、ご自分のニーズに合った方法をお選びください。

Excelで検索をする場合、通常は検索と置換の機能を使います。 しかし、数十個、数百個の値を置換する場合はどうでしょうか。 確かに、すべての置換を一つずつ手動で行い、データが変更されたらまた同じことを繰り返すのは誰も望まないでしょう。幸い、Excelで大量置換を行うより効率的な方法がいくつかあります。それぞれを詳しく調査していきます。

    ネストされたSUBSTITUTEによる複数値の検索と置換

    Excelで複数の項目を検索して置換する最も簡単な方法は、SUBSTITUTE関数を使用することです。

    この式のロジックは非常に単純で、古い値を新しい値に置き換える関数をいくつか書き、それらの関数を互いに入れ子にして、後続のSUBSTITUTEが前のSUBSTITUTEの出力を使って次の値を探すようにしています。

    代用品(代用品( テキスト , 古いテキスト1 , 新規テキスト1 ), 旧テキスト2 , ニューテキスト2 ), 古いテキスト3 , 新規テキスト3 )

    A2:A10の拠点一覧で、略称の国名(例えば、以下のように)を置き換えたいとします。 FR , 英国 米国 ) をフルネームで表示します。

    そのためには、以下のスクリーンショットのように、D2:D4に古い値を、E2:E4に新しい値を入力してください。 そして、B2に以下の数式を入力してEnterキーを押してください。

    =substitute(substitute(a2:a10、d2、e2)、d3、e3)、d4、e4)

    ...そして、すべての交換を一度に済ませることになります。

    なお、上記の方法は Excel 365 は、ダイナミックアレイをサポートする

    Excel 2019、Excel 2016以前の動的バージョンでは、一番上のセル(B2)に対して数式を記述し、その下のセルにコピーする必要があります。

    =substitute(substitute(a2、$d$2、$e$2)、$d$3、$e$3)、$d$4、$e$4)

    この場合、置換値を絶対セル参照でロックしているので、数式をコピーダウンしても置換値がずれることはないことに注意してください。

    注)SUBSTITUTE(サブスティテュート)関数は ケースセンシティブ ということは、古い値を入力する必要があるということです( 古文 )を、元データと同じアルファベットケースで表記しています。

    この方法は簡単なのですが、大きな欠点があります。交換する項目が何十個もある場合、ネストした関数を管理するのが非常に難しくなるのです。

    メリット すべてのExcelバージョンでサポートされています。

    欠点 : 限られた数の検索/置換値に使用するのが最適です。

    XLOOKUPによる複数項目の検索と置換

    買い替えを検討する場面では セル全容量 その部分ではなく、XLOOKUP機能が便利です。

    例えば、A列に国のリストがあり、すべての略語をフルネームで置き換えたいとします。 前の例と同様に、まず「検索」と「置換」の項目をそれぞれ別の列(DとE)に入力し、B2にこの数式を入力します。

    =xlookup(a2, $d$2:$d$4, $e$2:$e$4, a2)

    この数式をExcel言語から人間の言葉に置き換えると、以下のようになります。

    D2:D4 (lookup_array) から A2 の値 (lookup_value) を検索し、E2:E4 (return_array) から一致するものを返す。 見つからない場合、A2 から元の値を引き出す。

    塗りつぶしハンドルをダブルクリックすると、下のセルに数式がコピーされ、結果が待たされることはありません。

    XLOOKUP関数はExcel 365でのみ利用可能なので、上記の式はそれ以前のバージョンでは動作しません。 しかし、IFERRORまたはIFNAとVLOOKUPの組み合わせで簡単にこの動作を模倣することができます。

    =ifna(vlookup(a2, $d$2:$e$4, 2, false), a2)

    注)SUBSTITUTEと異なり、XLOOKUP関数とVLOOKUP関数は ケースセンシティブでない つまり、大文字小文字を無視して検索します。 例えば、この式では FR フラン をもって フランス .

    メリット 通常とは異なる関数の使用、すべてのバージョンのExcelで動作します。

    欠点 : セルレベルで動作し、セルの内容の一部を置き換えることはできません。

    再帰的LAMBDA関数による多重置換

    Microsoft 365の契約者には、従来の数式言語を使ってカスタム関数を作成できる特別な機能が提供されています。 LAMBDAのことです。 この方法の優れた点は、非常に長くて複雑な数式を非常にコンパクトでシンプルなものに変換できることです。 さらに、Excelに存在しない独自の関数を作成することができ、これまであったものVBAのみ可能です。

    カスタムLAMBDA関数の作成と使用に関する詳細情報は、こちらのチュートリアル「ExcelでLAMBDA関数を書く方法」をご覧ください。 ここでは、いくつかの実用的な例について説明します。

    メリット : その結果、置換ペアの数に関係なく、エレガントで驚くほどシンプルな機能を実現しました。

    欠点 : Excel 365でのみ利用可能、ワークブックに依存し、異なるワークブック間で再利用することはできません。

    例1.複数の単語/文字列を一度に検索・置換する場合

    複数の単語やテキストを一度に置換するために、カスタムLAMBDA関数を作成しました。 マルチリプレイス のいずれかである。

    =LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))), text)

    または

    =LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))

    どちらも自分自身を呼び出す再帰的な関数で、違いは出口をどのように設定するかだけです。

    最初の式では、IF関数が オールド が空白でない場合(old"")、TRUE の場合は マルチリプレイス が呼び出され、FALSE の場合、この関数は テキスト を現在の形にして終了します。

    2番目の式は逆の論理で、もし オールド が空白(old="")であれば、return テキスト を呼び出して終了し、それ以外の場合は マルチリプレイス .

    一番厄介な部分は達成されました!あとは、名前をつけて マルチリプレイス 詳細なガイドラインは、LAMBDA関数の名前の付け方を参照してください。

    関数に名前を付けると、他の組み込み関数と同じように使用することができます。

    2つの式のどちらのバリエーションを選んでも、エンドユーザーの視点からは、このようにシンプルな構文になります。

    MultiReplace(text, old, new)

    どこで

    • テキスト - 原データ
    • - を見つけるための値です。
    • 新規 - で置き換える値です。

    先ほどの例をもう少し進めて、国名だけでなく州名の略語も置き換えてみましょう。 そのためには、略語( オールド 値)をD2列目から、フルネーム( 値)をE列のE2より開始する。

    B2で、MultiReplace機能を入力します。

    =MultiReplace(A2:A10, D2, E2)

    Enterキーを押して、結果をお楽しみください :)

    この式の仕組み

    この式を理解する手がかりは、再帰性を理解することです。 複雑に聞こえるかもしれませんが、原理はとても簡単です。 再帰関数は、反復するたびに、より大きな問題の小さなインスタンスを解決します。 この例で言えば マルチリプレイス 関数は,古い値と新しい値をループし,ループごとに1回ずつ置換を行います。

    マルチリプレイス (SUBSTITUTE(text、old、new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))

    ネストされたSUBSTITUTE関数と同様に、直前のSUBSTITUTEの結果が、SUBSTITUTE関数になります。 テキスト を呼び出すたびに、次のSUBSTITUTEのためのパラメータを指定します。 マルチリプレイス SUBSTITUTE関数は、元のテキスト文字列ではなく、前の呼び出しの出力を処理します。

    のすべての項目を処理するために オールド のリストでは、一番上のセルから始めて、OFFSET関数を使って、相互作用のたびに1行下に移動します。

    OFFSET(old, 1, 0)

    についても同様に行います。 のリストが表示されます。

    OFFSET(new, 1, 0)

    を提供することが肝心です。 でぐちてん これはIF関数の助けを借りて行われます。 オールド セルが空の場合,この関数は テキスト を、現在の形と出口にする。

    =LAMBDA(text, old, new, IF(old="", text, MultiReplace(...)))

    または

    =LAMBDA(text, old, new, IF(old"", MultiReplace(...), text))

    例2.Excelで複数の文字を置換する

    原則的に マルチリプレイス 関数では、上記のスクリーンショットにある略称とフルネームのように、新旧の文字がそれぞれ別のセルに入力されれば、個々の文字を扱うこともできます。

    もし、古い文字をあるセルに、新しい文字を別のセルに入力したり、数式に直接入力したい場合は、別のカスタム関数を作成します。 ReplaceChars のいずれかを使用する。

    =LAMBDA(text, old_chars, new_chars, IF(old_chars"", ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))), text )

    または

    =LAMBDA(text, old_chars, new_chars, IF(old_chars="", text, ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)))

    新しいLambda関数には、いつも通りName Managerで名前を付けるのを忘れないようにしましょう。

    そして、新しいカスタム関数は、すぐに使用できます。

    ReplaceChars(text, old_chars, new_chars)

    どこで

    • テキスト - げんげん
    • - 検索する文字
    • 新規 - で置き換える文字

    インポートデータでよく行われる、スマートクォートとスマートアポストロフィをストレートクォートとストレートアポストロフィに置き換えるという作業を、実際にやってみましょう。

    まず、D2にスマートクォートとスマートアポストロフィ、E2にストレートクォートとストレートアポストロフィを入力し、読みやすくするためにスペースで区切ります(両方のセルで同じ区切り文字を使用しているので、結果に影響はありません - Excelはスペースをスペースに置き換えるだけです)。

    その後、B2にこの数式を入力する。

    =ReplaceChars(A2:A4, D2, E2)

    そして、まさに求めていた結果を得ることができます。

    また、数式に直接文字を入力することも可能です。 この場合、次のようにストレートクォートを「複製」することだけは覚えておいてください。

    =ReplaceChars(A2:A4, "" "'", """ "'")

    この式の仕組み

    があります。 ReplaceChars を循環させる関数です。 古い文字 新しい文字 この部分はSUBSTITUTE関数で行われます。

    SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))

    RIGHT関数は,反復するたびに,両者の左側から1文字ずつ切り取っていく。 古い文字 新しい文字 という文字列があり、LEFTが次の文字の組を取得して代入できるようになっています。

    ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))を実行。

    各再帰呼び出しの前に、IF関数が評価します。 古い文字 文字列が空でない場合、この関数は自分自身を呼び出します。 最後の文字が置換されると同時に、反復処理が終了し、数式が返されます。 テキスト を、現在の形と出口にする。

    注)コアとなる数式で使用するSUBSTITUTE関数が ケースセンシティブ は、両方のLambda( マルチリプレイス ReplaceChars ) は、大文字と小文字を別の文字として扱います。

    UDFによる大量検索と置換

    LAMBDA関数がExcelで利用できない場合、VBAを使用して従来の方法でマルチリプレイスのためのユーザー定義関数を記述することができます。

    UDFとLAMBDAで定義されたものを区別するために マルチリプレイス 関数の名前を変更します。 マスリプレイス この関数のコードは次のとおりです。

    Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant '結果を格納する配列 Dim arSearchReplace(), sTmp As String '検索/置換ペアの格納場所、一時文字列 Dim iFindCurRow, cntFindRows As Long 'SearchReplace 配列の現在の行インデックス、行数 Dim iInputCurRow, iInputCurCol, cntInputRows.Range , CRL , DELO ', DELO ` `,'CRL`,'DOL ,'DOL ,'DOL,'DOL, 'DOL, 'DL',DOL , 'DOL, 'DEL, 'DEL, 'DEL, `, 'DEL ・・・・・・・・・・・・・・・・・・・・・・・。cntInputCols As Long '入力範囲内の現在の行のインデックス,入力範囲内の現在の列のインデックス,行数,列数 cntInputRows = InputRng.Rows.Count cntInputCols = InputRng.Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) ' 検索/置換ペア配列を作成します For.iFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value 次 '元範囲で検索と置換 For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value '各セルで検索・置換対を全部入れ替える。For iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1, arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End Function

    LAMBDAで定義された関数と同様に、UDFは ワークブックワイド を意味します。 マスリプレイス 関数は、コードを挿入したワークブックでのみ動作します。 正しい方法がわからない場合は、「ExcelでVBAコードを挿入する方法」で説明した手順に従ってください。

    コードをワークブックに追加すると、関数は数式のインテリセンスに表示されます - 関数の名前だけで、引数は表示されません! しかし、私は構文を覚えても大したことはないと信じています。

    MassReplace(input_range、find_range、replace_range)

    どこで

    • 入力範囲 - 値の置き換えを行うソース範囲を指定します。
    • 検索範囲 - 検索する文字、文字列、単語を指定します。
    • 置換範囲 - 置換する文字、文字列、単語を指定します。

    Excel 365では、動的配列のサポートにより、これは通常の数式として動作し、一番上のセル(B2)に入力するだけで済みます。

    =MassReplace(A2:A10, D2:D4, E2:E4)

    ダイナミック以前のExcelでは、ソース範囲(B2:B10)全体を選択して数式を入力し、CtrlキーとShiftキーとEnterキーを同時に押して完了するという、旧式のCSE配列数式として動作します。

    メリット : Excel 2019、Excel 2016およびそれ以前のバージョンで、カスタムLAMBDA関数のまともな代替となるもの

    欠点 : ワークブックはマクロ対応の .xlsm ファイルとして保存する必要があります。

    VBAマクロによるExcelの一括置換

    マクロを使って一般的な作業を自動化するのがお好きなら、次のVBAコードを使って、範囲内の複数の値を検索して置換することができます。

    Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox("Source data:" , "Bulk Replace" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng Is Nothing Then Set ReplaceRng = Application.InputBox("Replace range:" , "Bulk Replace" , Type :=8) Err.Clear If Not ReplaceRng Is Nothing ThenApplication.ScreenUpdating = False For Each Rng In ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End Sub

    マクロをすぐに利用するために、コードを含むサンプルワークブックをダウンロードすることができます。 または、自分のワークブックにコードを挿入することができます。

    マクロの使用方法

    マクロを実行する前に、以下の画像のように、隣接する2つの列(C2:D4)に古い値と新しい値を入力します。

    そして、ソースデータを選択し、Alt + F8キーを押し、ピックします。 一括置換 マクロを実行し 実行 .

    として ソースレイジ があらかじめ選択されているので、リファレンスを確認し、OKをクリックするだけです。

    その後 レンジの置き換え をクリックし、[OK]をクリックします。

    完了!

    メリット 一度設定すれば、いつでも再利用可能

    欠点 : データを変更するたびにマクロを実行する必要があります。

    Substringツールを使ってExcelで複数の検索と置換を行う

    最初の例で、ネストされたSUBSTITUTEは、Excelで複数の値を置き換える最も簡単な方法であると述べました。 私は間違っていたことを認めます。 当社の究極のスイートは、さらに簡単です!それは、Excelで複数の値を置き換える最も簡単な方法です。

    ワークシートで一括置換を行うには、次のページに移動してください。 エイブルビットのデータ タブをクリックし サブストリングツール > サブストリングの置換 .

    があります。 サブストリングの置換 を定義するダイアログボックスが表示されます。 ソース の範囲と サブストリング の範囲である。

    2つの範囲を選択した状態で 交換 ボタンを押すと、元のデータの右側に挿入された新しい列に結果が表示されます。 そう、とても簡単です。

    ヒント:クリックする前に 交換 しかし、そのために重要なことが一つあります。 大文字・小文字を区別する この例では、大文字の文字列のみを置換し、他の単語内の "fr"、"uk"、"ak "などの部分文字列はそのまま残すため、このオプションにチェックを入れています。

    文字列の一括処理に興味がある方は、Ultimate Suiteに含まれる他のSubstring Toolsをご覧ください。 また、以下の評価版をダウンロードして試してみるのもよいでしょう。

    以上、エクセルで複数の単語や文字を一度に検索して置換する方法でした。 読んでいただきありがとうございました!また来週のブログでお会いできることを楽しみにしています。

    ダウンロード可能なもの

    Excel(.xlsmファイル)での複数検索と置換

    Ultimate Suite 14日間フル機能版(.exeファイル)

    Michael Brown は、ソフトウェア ツールを使用して複雑なプロセスを簡素化することに情熱を注ぐ熱心なテクノロジー愛好家です。テクノロジー業界で 10 年以上の経験があり、Microsoft Excel と Outlook、さらに Google Sheets と Docs のスキルを磨いてきました。 Michael のブログは、彼の知識と専門知識を他の人と共有することに特化しており、生産性と効率を向上させるためのわかりやすいヒントとチュートリアルを提供しています。経験豊富なプロフェッショナルであろうと初心者であろうと、Michael のブログでは、これらの重要なソフトウェア ツールを最大限に活用するための貴重な洞察と実践的なアドバイスを提供しています。