PowerQuery(パワークエリ)で文字列を抽出・切り出す方法を紹介します。抽出ボタンを用いた方法とM言語を利用した方法の2つを解説しています。LEFT関数やRIGHT関数などに相当する機能も紹介していますので参考にしてみてください。
2種の方法で文字列抽出を紹介しています!
・カスタム列+M言語
・「抽出」ボタン
「抽出」ボタンで文字列抽出
パワークエリの「抽出」機能を用いた文字列抽出の方法を紹介します。まずは抽出機能の種類についてです。
抽出の種類
パワークエリの文字列の抽出機能は以下の6種類です。
種類 | 抽出箇所 |
---|---|
最初の文字 | 先頭からの文字(left相当) |
最後の文字 | 末尾からの文字(right相当) |
範囲 | 文字列中間の文字(mid相当) |
区切り記号の前のテキスト | 指定の区切り記号の前 |
区切り記号の後のテキスト | 指定の区切り記号の後 |
区切り記号の間のテキスト | 指定の区切り記号の間 |
「長さ」といった機能もありますが、これは文字列の文字数を抽出する機能ため今回は除いています。
抽出の使い方
最初の文字(LEFT関数)
左からの文字数(長さ)で文字列を抽出する。
【設定項目】
・先頭からの文字数
最後の文字(RIGHT関数)
右からの文字数(長さ)で文字列を抽出する。
【設定項目】
・末尾からの文字数
範囲(MID関数)
テキストデータの中間にある文字列を抽出する機能です
【設定項目】
・抽出開始位置(先頭から)
・抽出する文字数
区切り記号の前のテキスト・区切り記号の後のテキスト
指定した区切り記号の前または後の文字列を抽出する。
【設定項目】
- 区切り記号
- 区切り記号のスキャン:先頭から か 末尾から
- スキップする区切り記号の数:無視する記号の数
区切り記号の間のテキスト
指定した区切り記号と区切り記号の間の文字列を抽出する。
【設定項目】
- 開始区切り記号
- 終了区切り記号
- 開始区切り記号のスキャン
- スキップする開始区切り記号の数
- 終了区切り記号のスキャン
- スキップする終了区切り記号の数
文字列抽出の手順
使用方法の例として、抽出の「最初の文字」を用いて下記の日付データから「年」を文字列として抽出します。
まず文字列抽出をする前に対象の列のデータ型を文字列型に変更します。元々、文字列型の場合は不要です。
- 対象の列のデータ型をクリックする。
- 変更するデータ型として「テキスト」を選択する。
文字列抽出する「抽出」機能を利用します。
- 対象の列をクリックする。
- 列の追加タブの「抽出」から「最初の文字」を選択する。※変換タブの「抽出」でもOK
「抽出」機能はパワークエリの変換タブと列の追加タブにあり、それぞれ下記のように使い分けて下さい。
- 元の列データ自体を変換したい:「変換タブ」の列の抽出を使用
- 新しく列データを追加したい:「列の追加タブ」の列の抽出を使用
「最初の文字」の抽出設定します。文字列データの左から何文字目までを抽出するか入力します。
ここでは日付データの中で「年」を表す最初の4文字を切り出します。
以上で、文字列の抽出は完了です。狙い通り「年」のみを抽出できています。
Sponsored link
カスタム列+M言語で文字列抽出
カスタム列とM言語の文字列関数を用いた文字列抽出の方法を紹介します。まずはM関数の種類についてです。
文字列関数の種類
文字列の抽出・切り出しでよく用いるM関数は以下の6種類です。
関数 | 抽出箇所 |
---|---|
Text.Start ( “文字列データ” , 抽出する文字数 ) | 先頭側の文字 |
Text.End ( “文字列データ” , 抽出する文字数 ) | 末尾側の文字 |
Text.Middle ( “文字列データ” , 開始位置 , 抽出する文字数) | 文字列の中の文字 |
Text.BeforeDelimiter ( “文字列データ” , “区切り記号“) | 指定の区切り記号の前 |
Text.AfterDelimiter ( “文字列データ” , “区切り記号“) | 指定の区切り記号の後 |
Text.BetweenDelimiters ( “文字列データ” , “開始区切り記号“, “終了区切り記号“) | 指定の区切り記号の間 |
関数内の “文字列データ” は [列名] に置き換えて使うことができます。
※利用する列のデータ型は「テキスト」である必要があります。
関数の使い方
Text.Start関数(LEFT関数に相当)
文字列データの先頭からテキストを抽出する関数です。設定項目は下記の通りです。
Text.Start ( “対象のテキストデータ” , 抽出する文字数)
使用例 | 出力 |
---|---|
Text.Start ( “2024年8月1日” , 4 ) | “2024” |
Text.End関数(RIGHT関数に相当)
文字列データの末尾からテキストを抽出する関数です。設定項目は下記の通りです。
Text.End ( “対象の文字列データ” , 抽出する文字数 )
使用例 | 出力 |
---|---|
Text.End ( “2024/04/01” , 2 ) | “01” |
Text.Middle関数(MID関数に相当)
文字列データの中間からテキストを抽出する関数です。設定項目は下記の通りです。
Text.Middle( “対象の文字列データ” , 抽出開始位置, 抽出する文字数 )
使用例 | 出力 |
---|---|
Text.Middle ( “2023/08/01” , 5 , 2 ) | “08” |
Text.BeforeDelimiter関数
文字列データの区切り文字の前にあるテキストを抽出できる関数です。スキップする記号の数は文字列の先頭から見つけた区切り記号をいくつ無視するかを入力します。※入力しなくてもOK
Text.BeforeDelimiter( “対象の文字列データ” , “区切り記号“, スキップする記号の数)
使用例 | 出力 |
---|---|
Text.BeforeDelimiter ( “2024/04/01″ , ” / ” ) | “2024” |
Text.BeforeDelimiter ( “2024/04/01″ , ” / ” , 1 ) | “2024/04” |
Text.AfterDelimiter関数
文字列データの区切り文字の後にあるテキストを抽出できる関数です。スキップする記号の数は文字列の先頭から見つけた区切り記号をいくつ無視するかを入力します。※入力しなくてもOK
Text.AfterDelimiter( “対象の文字列データ” , “区切り記号“, スキップする記号の数)
使用例 | 出力 |
---|---|
Text.AfterDelimiter ( “2024/04/01″ , ” / ” ) | “04/01” |
Text.AfterDelimiter ( “2024/04/01″ , ” / ” , 1 ) | “01” |
Text.BetweenDelimiters関数
文字列データの区切り文字の後にあるテキストを抽出できる関数です。スキップする記号の数は文字列の先頭から見つけた区切り記号をいくつ無視するかを入力します。※入力しなくてもOK
Text.BetweenDelimiters ( “文字列” , “開始記号“, “終了記号“, “スキップする開始記号数“, “スキップする終了記号数” )
使用例 | 出力 |
---|---|
Text.BetweenDelimiters ( “2024/04/01 (月) (9:00:00)” , ” ( ” , “)”) | “月” |
Text.BetweenDelimiters ( “2024/04/01 (月) (9:00:00)” , “(” , “)” , 1 , 0) | “9:00:00” |
文字列抽出の手順
使用方法の例として、Text.Start関数(LEFT関数に相当)を用いて下記のように「年」を文字列として抽出します。
列の追加タブにある「カスタム列」をクリックしてカスタム列を追加します。
下記の文字列データの先頭から4文字を抽出する式を入力して、OKをクリックします。
※文字列関数内で使用する列[日付]のデータ型は「テキスト」になっている必要があります。
Text.Start([日付],4)
以上で、文字列の抽出は完了です。狙い通り「年」のみを抽出できています。
Sponsored link
日付データからの年月日の抽出方法(使用例)
下記の日付データから以下の方法で文字列を抽出します。
- カスタム列+M言語で「年月」を抽出
- 抽出ボタンで「月」を抽出
カスタム列+M言語で「年月」を抽出
列の追加タブにある「カスタム列」をクリックしてカスタム列を追加します。
下記の文字列データの先頭から2つ目の区切り文字「/」までを抽出する式を入力して、OKをクリックします。
※文字列関数内で使用する列[日付]のデータ型は「テキスト」になっている必要があります。
Text.BeforeDelimiter([日付],"/",1)
以上で、「年月」の抽出は完了です。
区切り記号の間のテキストで「月」を抽出
文字列抽出する「抽出」機能を利用します。
- 対象の列をクリックする。
- 列の追加タブの「抽出」から「区切り記号の間のテキスト」を選択する。※変換タブの「抽出」でもOK
「区切り記号の間のテキスト」の抽出設定します。開始記号と終了記号に「/」を設定します。これで「/」の間の文字列が切り出されます。
以上で、「月」の抽出は完了です。
Sponsored link
パワークエリの学習本についてはコチラの記事でまとめてますので参考にしてみてください。
・初心者向けおすすめ学習本
・初中級者向けおすすめ学習本
コメント
コメント一覧 (2件)
「時系列に沿った自分より前の[カラム1]の最大値」を計算させるにはどうしたらいいの?
コメントありがとうございます。いつくかの処理が必要となりますが下記の手順で行えば計算可能です。
1. 時系列に沿って行を並び替え
2. インデックス列を追加(時系列に沿った自分を最大値参照に含める場合は1始まり、含めない場合は0始まり)
3. カスタム列の追加で「List.Max(List.FirstN(テーブル名[カラム1],[インデックス])))」の列を追加