shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Power Query】ステップをまとめて減らす(Table.TransformColumnsの理解)

PowerQueryに少し慣れてくると、自動作成されたステップをまとめ、ステップを減らすことで、シンプルなステップにしたいと思うようになります。

特に、簡単な処理なのに自動作成されたステップが多くなると、他に簡略化できる方法がないのかと思ってしまいます。

今回は、Table.TransformColumnsを理解してステップをまとめる事例です。

ただし、より属人化する懸念があるため、他者と共有する場合は使用しない方が良いと思います

内容:

使用のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2405)です。

簡単な処理なのに、ステップ数が多くなるパターン

例えば、下図は元の列をゼロ埋めにするステップの事例です。

この処理では、

  1. ゼロ埋めをした列の追加(「変換用の列」を追加)
  2. 元の列の削除
  3. 追加した「変換用の列」の名前の変更

をしています。変換に3ステップ要しています。

これは、PowerQueryの変換メニューにこのような処理がないことと、同じ名前の列名を複数作成できないためです。

このようなとき、1回のステップで変換できるのがTable.TransformColumnsです。

元の列を変換したいめ、列の追加、削除、名前の変更というステップがある

簡単な処理でステップ数が多くなるパターン

Table.TransformColumnsでステップを減らす手順

アウトプットイメージ

上述の「簡単な処理でステップ数が多くなるパターン」を次のように1ステップで変換しています。

前述の「簡単な処理でステップ数が多くなるパターン」を1ステップで変換

Table.TransformColumnsの使用例

作成手順

できるだけコード記述の量を減らした方法で説明します。

変換前のデータ状態

まず、変換前のデータかは下図のとおりです。

Excelのテーブルを読み込んだ状態で、「変更された型」まで自動作成されています

変換前のデータ
「変換用の列」を一旦追加

PowerQueryの「列の追加」メニューより、「変換用の列」を一旦追加します。

事例のゼロ埋めをした列の追加の詳細は、下記のとおりです。

shikumika.org

その結果、次のようなステップが追加されます。

数式は、以下のとおりです。

= Table.AddColumn(変更された型, "カスタム", each Text.PadStart(Text.From([コード], "ja-JP"), 4, "0"), type text)

以降、この数式の赤字部分の式を利用します。

事例のゼロ埋めをした列が追加されている

「変換用の列」を一旦追加したイメージ
Table.TransformColumnsのステップ追加

前述の「適用したステップ」の最後のステップを右クリックし、「後にステップの挿入」をクリックします。

下図は「後にステップの挿入」をした後の状態です。

前ステップを参照したステップが作成されています

「後にステップの挿入」をした後の状態

このステップの「数式バー」で、式を下記のように修正します。

= Table.TransformColumns(変更された型, {"コード", each Text.PadStart(Text.From(_, "ja-JP"), 4, "0"), type text})

この数式の説明は次のとおりです。

  • Table.TransformColumnsは次の構文です。
     { 列名、変換、新しい列の型 } 

    Table.TransformColumns - PowerQuery M | Microsoft Learn

  • 変更された型"コード"は、前述の「変換前のデータ状態」のステップ名と列名です。
  • 赤字部分は、前述の「変換用の列」を一旦追加で自動作成された数式がベースです。
    1点注意があり、元の数式で対象の列を示す[コード]の部分は、”_”(アンダースコア)にします。

数式を変換し、余分なステップ(一旦追加した「変換用の列」)を削除した結果が冒頭のアウトプットイメージです。

補足説明と注意点

Table.TransformColumnsのステップ追加方法

前述手順で、「Table.TransformColumnsのステップ追加」は、PowerQueryの変換メニューで適当な変換処理(例えば、文字の抽出など)をして、修正する方法でもOKです。

変換メニューの式で、Table.TransformColumns関数が利用されていることが分かります。

アンダースコアの修正漏れに注意

Table.TransformColumnsのステップ追加時、アンダースコアの修正漏れがあると次のようなエラーメッセージが表示されます。

Expression.Error: フィールド アクセスを型 ●● に適用できません。

「Expression.Error: フィールド アクセスを型 Number に適用できません。」のエラー表示

アンダースコアの修正漏れ

以上、【Power Query】ステップをまとめて減らす方法でした。

なお、繰り返しになりますが、この方法はTable.TransformColumnsの理解には役立ちますが、他者と共有するPowerQueryの場合は属人化リスクを考慮すべきです

他者によるステップの修正時、処理の流れが理解できない可能性があり、メンテナンス性を考慮すると、あまりまとめない方が良いと思います。

shikumika.org