shikumika’s diary

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

【Power Query】動的な列名に対応するため、列を数値で指定する方法

Power Queryで、元データの列名が変わるなど動的な列名に対応するため、列番号を示す数字で列を指定したい場合があります。そのようなときは、Table.ColumnNames関数を利用すると、列名ではなく数値で列指定が可能です。

これにより、クエリ更新時に列名が変わる場合でも、柔軟に対応できるクエリ設定が可能です。

内容:

なお、使用のExcelは「Microsoft® Excel® for Microsoft 365 MSO」です。

列を数値で指定したい背景

Power Queryの数式に列名が含まれる場合、列名変更があると再設定が必要になります。

例えば、元データの列名に表記ゆれ等がある場合も同様で、動的な列名に対応できるように、列番号を示す数値で列を指定できると保守性が向上します。

具体的には、次のように列名を「顧客ID」から「CustomID」に変更するステップがある場合、元データの列名が「顧客NO」といった表記になるとエラーになります。

この場合、2列目にある列は、すべて「CustomID」という名称にできるとエラーを回避できます。

数式に列名が含まれるため、列名変更があると再設定が必要

列を数値で指定したい背景
列を数値で指定する方法(Table.ColumnNames関数)

Table.ColumnNames関数を活用すると、列名を数値で表現できます。Table.ColumnNames関数は、テーブルの列名をリスト形式にする関数で、リストにしたn番目の列名というようなデータ取得が可能になります。

learn.microsoft.com

 

前述のエラー回避したい事例で説明すると、次のとおり数式を修正します。

Table.ColumnNames関数の利用

式の変更内容

補足すると、この事例の場合、列名の”顧客ID”は次のように表現できます。

Table.ColumnNames(ソース){1}

ここで、ソースはテーブル形式のデータを指定します。事例のような処理をする場合、前のステップの段階は、テーブル形式の状態と思われるので、多くのケースは「前のステップ名称」になる見込です。

数値の{1}は「0から始まる列番号」で、2番目にある列は、1を指定するという仕様です。

もし、この事例で”日付”の列名を表現したい場合、1番目の列に該当するので、Table.ColumnNames(ソース){0}とします。

よって、この事例では次のとおり修正します。

= Table.RenameColumns(ソース,{{Table.ColumnNames(ソース){1}, "CustomID"}})

エラーが表示されず、数値で列指定ができている

修正後の数式イメージ
参考情報

Table.ColumnNames()において、括弧内はテーブル形式のデータです。今回の事例では「前のステップ名称」が該当しましたが、列名を取得したいテーブルが別の場合、そのテーブル名称を指定します。

このようにTable.ColumnNames関数を使用すると、保守性を考慮したクエリを構築できます。

shikumika.org

以上、Power Queryで動的な列名に対応するため、列を数値で指定する方法の備忘録でした。

その他、日々の事務作業での悩みを解決するための工夫や自動化の方法などの特徴を整理・比較した記事などを以下に掲載しています。 

shikumika’s diary おすすめ記事 - shikumika’s diary