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番目の列名というようなデータ取得が可能になる。
事例で説明すると、次のとおり数式を修正する。
補足すると、事例の場合、列名の”顧客ID”は次で表現できる。
Table.ColumnNames(ソース){1}
ここで、ソースはテーブル形式のデータを指定する。とりあえずは「前のステップ名称」で良い見込(事例のような処理をする場合、前のステップの段階は、テーブル形式の状態と思われるので)。
数値の{1}は「0から始まる列番号」で、2番目にある列のため、1となる。
もし、この事例で”日付”の列名を表現したい場合、1番目の列に該当するので、Table.ColumnNames(ソース){0}となる。
よって、次のとおりとなる。
= Table.RenameColumns(ソース,{{Table.ColumnNames(ソース){1}, "CustomID"}})
参考情報
Table.ColumnNames()において、括弧内はテーブル形式のデータを指定する。今回の事例では「前のステップ名称」であるソースとしたが、列名を取得したいテーブルが別の場合、そのテーブル名称を指定する。
以上、Power Queryで動的な列名に対応するため、列を数値で指定する方法の備忘録でした。