なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

Power Query:置換リストを使って文字列の一括置き換え

置換リストを使ってデータを置き換えする場合、方法としては色々考えらえるけどリストから変換するのがいいかと思う。

画像のようなテーブルがある場合、ひとまず「氏名テーブル」と「置換テーブル」は読み込み済みとして

List.Generateを使った場合
    置換リスト = List.Buffer(Table.ToRows(置換テーブル)),
    値の置換 = Table.AddColumn(
        氏名テーブル, "変換後", each
        List.Reverse(List.Generate(
            ()=> [i=0, name=[氏名]],
            each [i] <= List.Count(置換リスト),
            each [
                i = [i]+1,
                リスト = 置換リスト{[i]},
                前 = リスト{0},
                後 = リスト{1},
                name = Text.Replace([name], 前, 後)
            ],
            each [name]
        )){0}, type text
    )
List.Accumulateを使った場合
    置換リスト = List.Buffer(Table.ToRows(置換テーブル)),
    置換後列の追加 = Table.AddColumn(
        氏名テーブル, "置換後", each
        List.Accumulate(
            置換リスト, [氏名],
            (state, current)=>
                Text.Replace(state, current{0}, current{1})
        ), type text
    )

速さは特に変わらないっぽい。わざわざ書いたけど、List.Accumulateでやるのが基本かなとは思う。