実務で使えるPower Query小技・テクニック | 文字列を定義する

Excel VBA Power Query M Formula Language
スポンサーリンク
スポンサーリンク

文字列を定義するとは何か

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

ここでは、

  • FolderPathFileName& で結合して
  • 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 Query

Mコードは Power Query エディタを開ける人なら誰でも読めるため、 機密情報を文字列として埋め込むと、情報漏えいのリスクになります。

認証情報は必ず別の安全な仕組み(資格情報ストアなど)で管理し、 Mコード内には直接書かないようにすることが重要です。

3. 文字列の「型」を意識する

M言語では、文字列は Text 型として扱われます。 数値や日付と混同すると、意図しない動作やエラーの原因になります。

例:

TextValue = "100",
NumberValue = 100
Power Query

TextValue は文字列、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 では頻出の要素ですので、 ぜひ「意味のある名前を付けて文字列を定義する」習慣を身につけていただきたいです。

タイトルとURLをコピーしました