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

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

数値を定義するとは何か

Power Query(M言語)で「数値を定義する」とは、計算に使う数字や、業務ルール上の固定値に“名前付きの箱”を用意することです。 例えば「消費税率」「閾値(しきい値)」「割引率」「上限値」などを、その場その場でベタ書きするのではなく、変数として定義しておくことで、再利用しやすく・安全に・変更に強いクエリになります。

M言語では、数値はそのまま 100.1 のように書き、let の中で変数に代入して使います。

M言語での数値の基本構文

「名前 = 数値」で数値変数を定義する

最も基本的な数値の定義は次のようになります。

let
    TaxRate = 0.1,
    Price = 1000,
    TaxAmount = Price * TaxRate
in
    TaxAmount
Power Query

ここでは、

  • TaxRate という変数に 0.1(10%)を入れている
  • Price1000 を入れている
  • TaxAmountPrice * TaxRate(100)を入れている
  • in TaxAmount なので、最終的な結果は 100

という構造になっています。

M言語では、数値リテラル(10, 0.1 など)をそのまま変数に代入することで数値を定義します。

実務でよく使う「数値変数」の例

消費税率や割引率を数値として定義する

let
    TaxRate = 0.1,          // 消費税率10%
    DiscountRate = 0.05,    // 割引率5%

    Price = 2000,

    DiscountAmount = Price * DiscountRate,
    TaxAmount = (Price - DiscountAmount) * TaxRate,
    FinalAmount = Price - DiscountAmount + TaxAmount
in
    FinalAmount
Power Query

ここでは、

  • TaxRateDiscountRate を数値変数として定義し
  • それを使って割引額・税額・最終金額を計算しています

こうしておくと、税率や割引率が変わったときに、変数の値だけ変更すればよいので、保守性が高くなります。

数値をステップバイステップで定義・利用する

ステップ1:業務ルール上の「固定値」を洗い出す

実務では、次のような数値がよく登場します。

  • 消費税率(例:0.1)
  • 割引率(例:0.05)
  • 閾値(例:金額が 1000 以上なら高額扱い)
  • 上限値・下限値(例:数量は 0〜100 の範囲)

これらをその場で 0.11000 と書くのではなく、意味のある名前を付けた数値変数として定義することが重要です。

ステップ2:意味のある名前で数値変数を定義する

悪い例:

FilteredHighAmount =
    Table.SelectRows(SalesTable, each [金額] > 1000)
Power Query

良い例:

HighAmountThreshold = 1000,

FilteredHighAmount =
    Table.SelectRows(SalesTable, each [金額] > HighAmountThreshold)
Power Query

1000 を直接書くのではなく、 HighAmountThreshold という名前を付けておくことで、

  • 「何の数字なのか」が一目で分かる
  • 閾値を変更したいときに一か所だけ直せばよい

というメリットが生まれます。

ステップ3:数値変数をテーブル計算に組み込む

let
    TaxRate = 0.1,

    SalesTable =
        Excel.CurrentWorkbook(){[Name="売上"]}[Content],

    AddedTaxAmount =
        Table.AddColumn(
            SalesTable,
            "消費税額",
            each [金額] * TaxRate,
            type number
        ),

    AddedTotalAmount =
        Table.AddColumn(
            AddedTaxAmount,
            "税込金額",
            each [金額] + [消費税額],
            type number
        )
in
    AddedTotalAmount
Power Query

ここでは、

  • TaxRate を数値変数として定義し
  • Table.AddColumn の中で each [金額] * TaxRate として利用しています

このように、テーブルの列計算に数値変数を組み込むのが実務での典型的な使い方です。

数値定義で注意すべき重要ポイント

1. 整数と小数の扱いに注意する

M言語では、数値には「整数」と「小数」があり、型によって扱いが変わります。

  • Int64.Type:整数
  • type number:一般的な数値(小数を含む)

例:

Price = 1000,              // 整数
TaxRate = 0.1,             // 小数
TaxAmount = Price * TaxRate
Power Query

列の型を変換するときは、小数を扱う列には type number を指定するのが基本です。

ChangedType =
    Table.TransformColumnTypes(
        SalesTable,
        {{"金額", type number}, {"消費税額", type number}}
    )
Power Query

整数型の列に小数を入れようとすると、 意図しない丸めやエラーの原因になるため注意が必要です。

2. 数値と文字列を混同しない

次の2つは見た目が似ていますが、型が違います。

TextValue = "1000",   // 文字列(Text)
NumberValue = 1000    // 数値(Number)
Power Query

文字列を数値として扱いたい場合は、明示的な変換が必要です。

NumberFromText = Number.From(TextValue)
Power Query

型を意識せずに比較や計算をすると、 「条件が効かない」「ソート順がおかしい」といった問題につながります。

3. 数値に業務ルールを埋め込むときはコメントもセットで書く

数値変数は「業務ルールの表現」であることが多いので、 なぜその値なのかをコメントで残しておくと安全です。

let
    // 高額判定の閾値(社内ルール:1000円以上を高額とみなす)
    HighAmountThreshold = 1000,

    FilteredHighAmount =
        Table.SelectRows(SalesTable, each [金額] > HighAmountThreshold)
in
    FilteredHighAmount
Power Query

こうしておくと、

  • 閾値の根拠が分かる
  • ルール変更時に見直すべき箇所が明確になる

というメリットがあります。

4. セキュリティの観点からの注意

数値変数自体は機密情報になりにくいですが、 「料金計算ロジック」「内部評価スコア」など、 ビジネス上の重要なアルゴリズムをそのままコードに書く場合は、

  • 誰が Power Query を開けるのか
  • そのロジックを公開して問題ないのか

を意識しておくことが大切です。

必要に応じて、ロジックの一部を外部システム側に寄せるなど、 設計レベルでのセキュリティ配慮も検討すべきです。

実務で使える「数値定義テンプレート」

テンプレ1:税率・割引率・閾値をまとめて定義

let
    // 業務ルールの固定値
    TaxRate = 0.1,              // 消費税率10%
    DiscountRate = 0.05,        // 割引率5%
    HighAmountThreshold = 1000, // 高額判定の閾値

    SalesTable =
        Excel.CurrentWorkbook(){[Name="売上"]}[Content],

    FilteredHighAmount =
        Table.SelectRows(SalesTable, each [金額] > HighAmountThreshold),

    AddedDiscountAmount =
        Table.AddColumn(
            FilteredHighAmount,
            "割引額",
            each [金額] * DiscountRate,
            type number
        ),

    AddedTaxAmount =
        Table.AddColumn(
            AddedDiscountAmount,
            "消費税額",
            each ([金額] - [割引額]) * TaxRate,
            type number
        )
in
    AddedTaxAmount
Power Query

テンプレ2:上限・下限チェックに数値変数を使う

let
    MinQuantity = 0,
    MaxQuantity = 100,

    SalesTable = ...,

    FlaggedOutOfRange =
        Table.AddColumn(
            SalesTable,
            "数量範囲NG",
            each ([数量] < MinQuantity or [数量] > MaxQuantity),
            type logical
        )
in
    FlaggedOutOfRange
Power Query

ここでは、

  • MinQuantityMaxQuantity を数値変数として定義し
  • それを使って「数量が範囲外かどうか」を判定しています

業務ルールの変更(例:上限を 200 に変更)にも、 変数の値を変えるだけで対応できます。

テンプレ3:集計用の数値変数

let
    SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content],

    TotalAmount =
        List.Sum(SalesTable[金額]),

    RowCount =
        Table.RowCount(SalesTable),

    AverageAmount =
        if RowCount = 0 then
            null
        else
            TotalAmount / RowCount
in
    [合計金額 = TotalAmount, 平均金額 = AverageAmount]
Power Query

ここでは、

  • TotalAmount:合計金額
  • RowCount:行数
  • AverageAmount:平均金額

を数値変数として定義し、 最後にレコードとしてまとめて返しています。

まとめ:数値を定義することは「業務ルールに名前を付けること」

M言語で数値を定義することは、単に 100.1 を書くだけではなく、 「業務ルール上の重要な数字に名前を付けて、意味のある単位として扱うこと」です。

これによって、

  • クエリが読みやすくなる
  • ルール変更に強くなる
  • バグを防ぎやすくなる
  • セキュリティ・品質の観点からも安心して運用できる

というメリットが得られます。

数値は地味ですが、実務の Power Query では頻繁に登場する要素ですので、 ぜひ「意味のある名前を付けて数値を定義する」習慣を身につけていただきたいです。

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