文字列を定義するとは何か
Power Query(M言語)で「文字列を定義する」とは、テキスト情報に名前を付けて扱えるようにすることです。 例えば「ファイル名」「メッセージ」「区切り文字」「固定のコード値」などを、 その場その場でベタ書きするのではなく、変数として定義しておくことで再利用しやすく・安全に扱えるようになります。
M言語では、文字列は ダブルクォーテーション "..." で囲んだテキストとして表現します。
M言語での文字列の基本構文
“…” で囲めば文字列になる
最も基本的な文字列の定義は次のようになります。
let
Message = "Hello, Power Query!"
in
Message
Power Queryここでは、
Messageという変数に"Hello, Power Query!"という文字列を入れているin Messageなので、その文字列をそのまま返している
という構造になっています。
M言語では、ダブルクォーテーションで囲んだものが文字列(Text 型)になります。
実務でよく使う「文字列変数」の例
ファイル名やシート名を文字列として定義する
let
FileName = "売上_2024-01.xlsx",
SheetName = "売上",
Source =
Excel.Workbook(
File.Contents("C:\Data\" & FileName),
null,
true
)
in
Source
Power Queryここでは、
FileNameにファイル名の文字列SheetNameにシート名の文字列
を入れておき、後続の処理で再利用できるようにしています。
こうしておくと、ファイル名やシート名を変更したいときに、1か所だけ直せばよいので、保守性が大きく向上します。
文字列をステップバイステップで定義・利用する
ステップ1:意味のある名前を付けて文字列を定義する
悪い例:
Source = Excel.Workbook(File.Contents("C:\Data\売上_2024-01.xlsx"), null, true)
Power Query良い例:
FilePath = "C:\Data\売上_2024-01.xlsx",
Source = Excel.Workbook(File.Contents(FilePath), null, true)
Power Query文字列をその場でベタ書きするのではなく、 「何の文字列なのか」が分かる変数名を付けて定義することが重要です。
ステップ2:文字列を結合する(& 演算子)
M言語では、文字列の結合に & 演算子を使います。
let
FolderPath = "C:\Data\",
FileName = "売上_2024-01.xlsx",
FullPath = FolderPath & FileName
in
FullPath
Power Queryここでは、
FolderPathとFileNameを&で結合してFullPathに"C:\Data\売上_2024-01.xlsx"を入れています
このように、文字列を部品に分けて定義し、結合して使うことで、 フォルダだけ変える・ファイル名だけ変える、といった柔軟な変更がしやすくなります。
ステップ3:文字列をメッセージやログに使う
let
ProcessName = "売上クレンジング",
LogMessage = ProcessName & "を実行しました。"
in
LogMessage
Power Queryこのように、文字列変数を使ってメッセージを組み立てることもできます。 実務では「処理名」「対象ファイル名」「日付」などを文字列として持っておき、 ログテーブルに書き出すといった使い方がよくあります。
文字列定義で注意すべき重要ポイント
1. ダブルクォーテーションの扱いに注意する
M言語では、文字列を "..." で囲むため、 文字列の中にダブルクォーテーションを含めたい場合は エスケープが必要です。
例:He said "OK". を文字列として書きたい場合
TextValue = "He said ""OK""."
Power Queryダブルクォーテーションを2つ続けて書くことで、 文字列の中に " を含めることができます。
これを忘れると構文エラーになるので、ダブルクォーテーションを含む文字列は特に注意が必要です。
2. 文字列に機密情報を書かない
セキュリティの観点から、文字列変数に次のような情報を直接書くのは避けるべきです。
- パスワード
- 認証トークン
- 個人情報の具体的な値
例:これは危険です。
AdminPassword = "P@ssw0rd!"
Power QueryMコードは Power Query エディタを開ける人なら誰でも読めるため、 機密情報を文字列として埋め込むと、情報漏えいのリスクになります。
認証情報は必ず別の安全な仕組み(資格情報ストアなど)で管理し、 Mコード内には直接書かないようにすることが重要です。
3. 文字列の「型」を意識する
M言語では、文字列は Text 型として扱われます。 数値や日付と混同すると、意図しない動作やエラーの原因になります。
例:
TextValue = "100",
NumberValue = 100
Power QueryTextValue は文字列、NumberValue は数値です。
文字列を数値として扱いたい場合は、明示的に変換する必要があります。
NumberFromText = Number.From(TextValue)
Power Query型を意識せずに文字列を使うと、 「比較がうまくいかない」「ソート順がおかしい」といった問題につながります。
実務で使える「文字列定義テンプレート」
テンプレ1:フォルダ+ファイル名+シート名
let
FolderPath = "C:\Data\",
FileName = "売上_2024-01.xlsx",
SheetName = "売上",
FullPath = FolderPath & FileName,
Source =
Excel.Workbook(
File.Contents(FullPath),
null,
true
)
in
Source
Power Queryこのように、フォルダ・ファイル名・シート名を文字列変数として分けて定義しておくと、 変更があったときに一か所だけ直せばよくなり、保守性が高まります。
テンプレ2:区切り文字や固定コードを文字列として定義
let
Delimiter = ",",
DefaultCustomerCode = "UNKNOWN",
SplitResult =
Text.Split("A,B,C", Delimiter),
ReplacedCustomerCode =
if [顧客コード] = null then
DefaultCustomerCode
else
[顧客コード]
in
SplitResult
Power Queryここでは、
Delimiterに区切り文字DefaultCustomerCodeに「未設定時に使う顧客コード」
を文字列として定義しています。
業務ルールで決まっている「固定値」を文字列変数として持っておくと、 ルール変更にも柔軟に対応できます。
テンプレ3:ログ用の文字列を定義する
let
ProcessName = "売上クレンジング",
FileName = "売上_2024-01.xlsx",
LogMessage =
ProcessName & " - 対象ファイル: " & FileName & " の処理が完了しました。"
in
LogMessage
Power Queryこのように、処理名やファイル名を文字列として持っておき、 ログメッセージを組み立てることも実務ではよくあります。
まとめ:文字列を定義することは「意味のあるテキストに名前を付けること」
M言語で文字列を定義することは、単に "..." を書くだけではなく、 「意味のあるテキストに名前を付けて、安全に・再利用しやすく扱うこと」です。
これによって、
- ファイルパスやシート名の変更に強くなる
- 業務ルールの固定値を一か所で管理できる
- ログやメッセージを柔軟に組み立てられる
- セキュリティ・品質の観点からも安全に運用できる
というメリットが得られます。
文字列は地味ですが、実務の Power Query では頻出の要素ですので、 ぜひ「意味のある名前を付けて文字列を定義する」習慣を身につけていただきたいです。
