テキスト列を整形する ― 書式・置換・トリム・抽出・分割・マージ
このページのゴール
Power Queryの「変換」タブと「列の追加」タブにあるテキスト操作機能を網羅的に理解し、「Excel関数でいうとどれに対応するか」を把握した上で、GUIだけで目的の加工ができるようになることです。
大前提:「変換」タブ vs 「列の追加」タブ
テキスト操作のボタン(書式、抽出、分割など)は「変換」タブと「列の追加」タブの両方にあります。前ページでも触れましたが、この違いはテキスト操作で特に重要です。
| タブ | 動作 | 使いどころ |
|---|---|---|
| 変換 | 元の列のデータが書き換わる(上書き) | 元データが不要で、変換後のデータだけ残したいとき |
| 列の追加 | 元の列はそのまま残り、新しい列が右端に追加される | 元データを参照として残しておきたいとき、確認しながら作業したいとき |
迷ったら「列の追加」タブで操作して、確認できたら元の列を削除するのが安全です。
トリムとクリーン ― 見えないゴミを取り除く
Excelの TRIM関数・CLEAN関数 に対応する機能です。データベースやWebから取り込んだデータには、目に見えない余計な空白や制御文字(改行コードなど)が含まれていることが非常に多く、これを放置すると VLOOKUP に相当するマージ操作で一致しない原因になります。
トリミング ― 先頭と末尾の空白を除去
操作手順
1. 対象の列のヘッダーをクリックして選択します。
2. 変換 タブ → 書式 → トリミング をクリックします。
3. 先頭と末尾の半角スペース・全角スペースが除去されます。
Before
| 氏名 |
|---|
| 田中 太郎 |
| 佐藤 花子 |
| 鈴木 一郎 |
After(トリミング後)
| 氏名 |
|---|
| 田中 太郎 |
| 佐藤 花子 |
| 鈴木 一郎 |
Excelの TRIM関数 は「単語間の連続スペースを1つにする」機能もありますが、Power Queryのトリミングは先頭と末尾の空白のみを除去します。文字列の途中にある連続スペースを整理するには、「値の置換」で「 」(スペース2個)を「 」(スペース1個)に繰り返し置換する方法を使います。
クリーン ― 印刷できない制御文字を除去
操作手順
1. 対象の列のヘッダーをクリックして選択します。
2. 変換 タブ → 書式 → クリーニング をクリックします。
3. 改行コード(CR/LF)やタブ文字など、ASCIIコード0〜31の制御文字が除去されます。
テキスト列に対して「クリーニング → トリミング」の順で適用するのを定番にすると、ほとんどの「見えないゴミ」を一掃できます。取り込み直後のルーティンに加えてもよいくらい、使用頻度の高い操作です。
書式変換 ― 大文字・小文字・その他
アルファベットの大文字・小文字を揃えたり、プレフィックス/サフィックスを追加したりする操作です。
| GUI操作 | Excel関数の対応 | 動作 | 例:入力 → 出力 |
|---|---|---|---|
| 変換 → 書式 → 小文字 | LOWER | すべてを小文字に | TOKYO → tokyo |
| 変換 → 書式 → 大文字 | UPPER | すべてを大文字に | tokyo → TOKYO |
| 変換 → 書式 → 各単語の先頭文字を大文字にする | PROPER | 各単語の先頭だけ大文字 | john smith → John Smith |
| 変換 → 書式 → プレフィックスの追加 | "固定文字"&A1 | 先頭に固定文字列を追加 | 001 → ID-001 |
| 変換 → 書式 → サフィックスの追加 | A1&"固定文字" | 末尾に固定文字列を追加 | report → report.pdf |
操作手順(例:プレフィックスの追加)
1. 対象の列のヘッダーをクリックして選択します。
2. 変換 タブ → 書式 → プレフィックスの追加 をクリックします。
3. ダイアログに追加したい文字列(例:「ID-」)を入力して「OK」。
4. すべての行の先頭に「ID-」が追加されます。
値の置換 ― 文字列の検索と置き換え
ExcelのSUBSTITUTE関数に対応する機能です。ExcelのSUBSTITUTEと同様に、セル全体ではなく文字列の一部を置き換えます。
操作手順
1. 対象の列のヘッダーをクリックして選択します。
2. ホーム タブ → 値の置換(または右クリック →「値の置換」)をクリックします。
3. 「検索する値」に元の文字列、「置換後」に新しい文字列を入力して「OK」。
置換の実用パターン
| 目的 | 検索する値 | 置換後 | 備考 |
|---|---|---|---|
| ハイフンを除去 | - | (空欄) | 電話番号「03-1234-5678」→「0312345678」 |
| 表記の統一 | (株) | 株式会社 | 部分一致で置換される |
| 全角スペースを半角に | (全角スペース) | (半角スペース) | 見た目では区別しにくいので注意 |
| nullを特定の値に | null | (任意の値) | 「詳細オプション」で「セル全体を照合する」にチェック |
Power Queryの値の置換は部分一致で動作します。たとえば「東」を「西」に置換すると、「東京」が「西京」になります。セル全体が完全に一致する場合だけ置換したいときは、ダイアログの左下にある「詳細オプション」→「セル全体の内容を照合する」にチェックを入れてください。
抽出 ― 文字列の一部を取り出す
ExcelのLEFT・RIGHT・MID関数に相当する操作です。「変換」タブの「抽出」で実行すると元の列が書き換わり、「列の追加」タブの「テキストから抽出」で実行すると新しい列ができます。
| メニュー | Excel関数の対応 | パラメータ | 例 |
|---|---|---|---|
| 最初の文字 | LEFT | 取り出す文字数 | 「東京都新宿区」から3文字 →「東京都」 |
| 最後の文字 | RIGHT | 取り出す文字数 | 「ABC-001」から3文字 →「001」 |
| 範囲 | MID | 開始インデックスと文字数 | 「ABC-001-XY」のインデックス4から3文字 →「001」 |
| 区切り記号の前のテキスト | LEFT + FIND の組合せ | 区切り記号 | 「田中-太郎」の「-」より前 →「田中」 |
| 区切り記号の後のテキスト | MID + FIND の組合せ | 区切り記号 | 「田中-太郎」の「-」より後 →「太郎」 |
| 区切り記号の間のテキスト | 複雑な関数の組合せ | 開始と終了の区切り記号 | 「【重要】お知らせ」の「【」と「】」の間 →「重要」 |
| 長さ | LEN | なし | 「Hello」→ 5 |
操作手順(例:「範囲」で中間を取り出す)
1. 対象の列のヘッダーをクリックして選択します。
2. 変換 タブ → 抽出 → 範囲 をクリックします。
3. 「開始インデックス」と「文字数」を入力して「OK」。
ExcelのMID関数は1文字目を「1」と数えますが、Power Queryの「範囲」は0から数えます。「ABC-001」の「0」を取り出したい場合、Excelなら =MID(A1, 5, 1) ですが、Power Queryでは開始インデックス「4」です。最初は混乱しますが、必ず覚えてください。
「抽出」と「分割」の使い分け
どちらも文字列の一部を取り出す操作ですが、目的が違います。「抽出」は1つの値だけを取り出す操作で、結果は1列です。「分割」は1つの列を複数の列に分ける操作です。「氏名」列から姓と名を別々の列にしたい場合は「分割」、商品コードの先頭3文字だけ欲しい場合は「抽出」を使います。
列の分割 ― 1つの列を複数に分ける
ExcelではLEFT + MID + FIND の複雑な組み合わせで行っていた「列の分割」が、Power QueryではGUIだけで完了します。
区切り文字で分割する
操作手順
1. 対象の列のヘッダーをクリックして選択します。
2. ホーム タブ → 列の分割 → 区切り記号による分割(または変換タブからも可)をクリックします。
3. 区切り記号を選択または入力します(カンマ、スペース、ハイフン、タブ、カスタムなど)。
4. 「分割位置」を選択します:
| 選択肢 | 動作 | 例:「A-B-C」をハイフンで分割 |
|---|---|---|
| 左端の区切り記号 | 最初に見つかった区切り文字で2列に分割 | 「A」「B-C」 |
| 右端の区切り記号 | 最後に見つかった区切り文字で2列に分割 | 「A-B」「C」 |
| 出現する各区切り記号 | すべての区切り文字で分割 | 「A」「B」「C」 |
5. 「OK」をクリックすると、元の列が分割後の列に置き換わります。
文字数で分割する
操作手順
1. 対象の列のヘッダーをクリックして選択します。
2. ホーム タブ → 列の分割 → 文字数による分割 をクリックします。
3. 文字数を入力します(例:「3」)。
4. 分割方法を選択します:
| 選択肢 | 動作 | 例:「ABCDEF」を3文字で分割 |
|---|---|---|
| 左端から1回 | 左から指定文字数の位置で1回だけ分割 | 「ABC」「DEF」 |
| 右端から1回 | 右から指定文字数の位置で1回だけ分割 | 「ABC」「DEF」 |
| 繰り返し | 指定文字数ごとに繰り返し分割 | 「ABC」「DEF」(6文字÷3=2列) |
5. 「OK」をクリックします。
固定長データ(銀行の振込データやCOBOLシステムの出力など)は「文字数で分割」→「繰り返し」が便利です。たとえば「銀行コード(4桁) + 支店コード(3桁) + 口座番号(7桁)」のような固定長は、4, 3, 7 で順に分割できます(ただし1回の操作では均一な文字数でしか分割できないため、不均一な場合は複数回に分けるか、「範囲」で抽出する方法を使います)。
分割すると自動的に「列名.1」「列名.2」のような列名が付きます。また、分割後の列のデータ型はすべて「テキスト」になります。数値として扱いたい列は型変更を忘れずに行ってください。
詳しくは → 列の分割 専用ページ
列のマージ ― 複数の列を1つに結合する
Excel の CONCATENATE関数 や & 演算子 に対応する操作です。姓と名を1列にまとめたり、年・月・日の列を結合して日付文字列にしたりする場面で使います。
操作手順
1. 結合したい列をCtrl+クリックで複数選択します(選択した順番に結合されます)。
2. 変換 タブ → 列のマージ(または列の追加タブの「列のマージ」)をクリックします。
3. 区切り記号を選択します(スペース、カンマ、なし、カスタムなど)。
4. 新しい列名を入力します(例:「氏名」)。
5. 「OK」をクリックします。
Before
| 姓 | 名 |
|---|---|
| 田中 | 太郎 |
| 佐藤 | 花子 |
After(区切り記号:スペース)
| 氏名 |
|---|
| 田中 太郎 |
| 佐藤 花子 |
「変換」タブの「列のマージ」を実行すると、選択した複数の列が1つの列に置き換わります(元の列は消えます)。元の列を残したい場合は「列の追加」タブの「列のマージ」を使ってください。
マージ対象に数値型やBool型の列が含まれると、マージに失敗したりnullが出たりすることがあります。あらかじめ対象列のデータ型をテキスト型に変更してからマージしてください。
Excel関数との対応まとめ
ここまでの内容を、Excel関数との対応表にまとめます。ブックマークしておくと便利です。
| Excel関数 | Power Query GUI操作 | M言語(参考) | 注意点 |
|---|---|---|---|
| TRIM | 変換 → 書式 → トリミング | Text.Trim([列]) | 先頭末尾のみ。途中の連続空白は置換で |
| CLEAN | 変換 → 書式 → クリーニング | Text.Clean([列]) | ASCII 0〜31の制御文字を除去 |
| UPPER | 変換 → 書式 → 大文字 | Text.Upper([列]) | ― |
| LOWER | 変換 → 書式 → 小文字 | Text.Lower([列]) | ― |
| PROPER | 変換 → 書式 → 各単語の先頭… | Text.Proper([列]) | ― |
| SUBSTITUTE | ホーム → 値の置換 | Text.Replace([列],"旧","新") | 部分一致がデフォルト |
| LEFT | 変換 → 抽出 → 最初の文字 | Text.Start([列], n) | ― |
| RIGHT | 変換 → 抽出 → 最後の文字 | Text.End([列], n) | ― |
| MID | 変換 → 抽出 → 範囲 | Text.Middle([列], start, n) | 0始まり |
| LEN | 変換 → 抽出 → 長さ | Text.Length([列]) | ― |
| CONCATENATE / & | 変換 → 列のマージ | Text.Combine({[列1],[列2]}, "区切") | 数値列は先にテキスト型に変換 |
実践例 ― CSV住所録のクリーニング
あるCSVから取り込んだ住所録データを、テキスト操作だけで綺麗に整えてみましょう。
Before(取り込んだ生データ)
| 氏名 | 電話番号 | 商品コード |
|---|---|---|
| たなか たろう | 03-1234-5678 | ABC-001-XY |
| さとう はなこ | 090-9876-5432 | DEF-002-ZZ |
やりたいこと
氏名の前後の空白を除去し、各単語の先頭を大文字にしたい(今回はカタカナのためスキップ)。電話番号のハイフンを除去して数字だけにしたい。商品コードからカテゴリ部分(先頭3文字)と番号部分(中間3文字)を別列に取り出したい。
手順
Step 1:氏名をトリミング
「氏名」列を選択 → 変換 → 書式 → トリミング
Step 2:電話番号のハイフンを除去
「電話番号」列を選択 → ホーム → 値の置換 → 検索「-」、置換後「」(空欄)
Step 3:商品コードからカテゴリを抽出
「商品コード」列を選択 → 列の追加 → テキストから抽出 → 最初の文字 → 文字数「3」 → 列名を「カテゴリ」に変更
Step 4:商品コードから番号を抽出
「商品コード」列を選択 → 列の追加 → テキストから抽出 → 範囲 → 開始インデックス「4」、文字数「3」 → 列名を「番号」に変更
After(処理完了後)
| 氏名 | 電話番号 | 商品コード | カテゴリ | 番号 |
|---|---|---|---|---|
| たなか たろう | 0312345678 | ABC-001-XY | ABC | 001 |
| さとう はなこ | 09098765432 | DEF-002-ZZ | DEF | 002 |
適用したステップは4つだけ。このクエリを保存しておけば、次回以降は同じ形式のCSVを差し替えて「更新」するだけで同じ処理が自動適用されます。これがPower Queryの真価です。
まとめ
テキスト操作はPower Queryで最も使用頻度が高い変換カテゴリです。このページで紹介した操作を整理すると、大きく4つのグループに分けられます。
クリーニング系(トリミング・クリーニング)は、データを取り込んだ直後に必ず行う「衛生管理」。書式変換系(大文字・小文字・プレフィックス/サフィックス)は、表記の統一に使う。抽出・分割系(最初/最後/範囲の文字、区切り文字で分割、文字数で分割)は、1つの列から必要な情報を取り出す。結合系(列のマージ・値の置換)は、データを組み替えて使いやすい形にする。
最も注意すべきは「範囲」の開始インデックスが0始まりという点と、「値の置換」は部分一致がデフォルトという点です。この2つさえ覚えておけば、テキスト操作で困ることはほとんどありません。