LoginSignup
13
16

More than 1 year has passed since last update.

「複数の語句をまとめて置換する」を実務で使おう|Power Query

Last updated at Posted at 2021-11-06

大変お世話になってる狸(@tanuki_phoenix )さんのこの置換記事の中身を
初心者向けに使い方を解説する内容になります

使いたいコード

置換
= List.Accumulate(
  Table.ToRows(t_指示テーブル), //リストの各項目を用いた繰り返し処理。
    サンプルテキスト,        //初項。最初のxはこれになる。
   (x,y)=>Text.Replace(x,y{0},y{1}) //{0},{1}はリストの項目の取り出し方の記法。
 )

これをコード関連の知識なしで流用するのは難しいと思うので簡単に使っていく方法を説明します

今回の変換対象

image.png
ありがちな、区切り全角(黄色)、入力がカタカナ(緑)、旧漢字を使用(オレンジ)みたいな
この辺りを置換を使って処理する流れをシンプルにお届けします

置換に使う変換テーブル

image.png
置換前に置換するためのテーブルをこのように作っておきます
・次の処理でこのテーブルの左から~番目の列という指定法になるため、列名は置換に影響を与えないので好きに付けて良いです
・2列を前提としてないのでC列に備考列を作っても動作します
これをテーブルからで、「名前置換テーブル」という名前で取り込んでおきます
image.png
注) 図中のy{0}とy{1}はあとで出てくる指定している列位置です

ここで重要なのは置換テーブル側にデータの入れてない列(nullが入る所)があるとエラーが出るので、
・元のテーブルで入れないように管理する
・この取り込みのクエリ内でフィルタなどの削除処理をする
等で消しておきましょう

変換対象を読み込んだあとの処理

カスタム列を選択し、下記内容をコピペしてそのまま処理します

カスタム列で使用
List.Accumulate(Table.ToRows(名前置換テーブル),[名前],(x,y)=>Text.Replace(x,y{0},y{1}))

ここでは「社員名簿」というクエリ内で、
「名前置換テーブル」の結果を呼び出し、その中のデータを使って
[名前]列の各行を置換する処理をしています

「クエリのマージ」や「クエリの追加」で別のクエリのデータを使用しているのと同じ処理になります

image.png

変換結果

見やすいように変換後の位置を変えて出力した物がこちらになります
目的の行の置換に成功していることが分かります
image.png
ここまでできたら
あとは変換テーブルを問題があったときに増やしていけば
コード側をいじらず処理していくことができます

今回の変換テーブルはブック内に置いておく必要は無いので
別ファイルで管理して取り込むなど、
使い方の幅も広いのでいろいろ使ってみてください

備考

スペースだと見えにくいのでアスタリスクで表示しますが
「*」「*」「*」「」という感じに全角半角+複数が混じっている場合は
image.png
上から順に処理されていくのを使って5行で全角→半角を行った後、6行目で
個数の調整をすれば「
」に統一することができます

13
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
16