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()において、括弧内はテーブル形式のデータを指定する。今回の事例では「前のステップ名称」であるソースとしたが、列名を取得したいテーブルが別の場合、そのテーブル名称を指定する。

 

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