Power Query(パワークエリ)のカスタム関数の作成事例として、単票形式のExcelシートからセルの値を抽出する方法の備忘録。
カスタム関数が利用できると、データ抽出等の作業効率化も可能です。
単票形式で紙印刷のレイアウトはPower Queryでの抽出も手間となることが多いのでカスタム関数を使った手順の整理。
内容:
カスタム関数で実現すること、前提
単票形式のExcelシートをPower Queryで読み込み、テーブルからセルの値を取得したい。Excelシートは、次のように「日報」という名前のクエリで取得しているという事例。
参考にした情報
セルの値の取得の考え方等は以下を参考にさせていただきました。
以下、数式バーにカスタム関数を入力する場合の手順です。
手順
「空のクエリ」の作成
「ホーム」-「新しいソース」-「その他のソース」-「空のクエリ」をクリック
数式の入力
「空のクエリ」(事例では、クエリ1という名称)が作成されるので、数式に以下を入力、Enterで確定。
= (対象テーブル as table,行 as number, 列 as number) => Table.Column(対象テーブル, Table.ColumnNames(対象テーブル){列-1}){行-1}
「=>」の左側が変数部分、右側が関数本体となる。
関数に変換されるので、クエリの名前もわかりやすい名前に変更しておく
前述の数式の「 (対象テーブル as table,行 as number, 列 as number) => 」の部分が変数(パラメータ)として入力可能になる。
画面左側に表示されるクエリのアイコンもfxに変換されている。
以下の画面は、名前を「対象テーブルの値抽出」に変更した状態。
カスタム関数の動作確認で、空のクエリを再度追加
本手順の冒頭と同様に、「ホーム」-「新しいソース」-「その他のソース」-「空のクエリ」をクリックし、事例として次の式を入力、Enterで確定。
= 対象テーブルの値抽出(日報,4,2)
この事例では、前述の数式のとおり
(対象テーブル as table,行 as number, 列 as number) =>
で、変数は3つある。
「日報」という名前のクエリ(テーブル型)で、4行目、2列目にある値を取得という意味。なお、行数と列数はシートでセルに値が存在する上端、左端を1として数える。
値の抽出結果
次のように、指定したセルの値が抽出できている。
このカスタム関数を他の関数と同様に呼び出すことで、値抽出が可能。
補足説明
カスタム関数の考え方
カスタム関数を使用せず、Tableの値を一つずつ抽出する方法
今回はカスタム関数を活用した事例でした。値取得したいデータ数が少ない場合は、Tableの値を参照するカスタム列を一つずつ追加する方法も有効です。
カスタム関数を使用せず、「列のピボット解除」で抽出する方法
値取得のために一つずつの設定が手間な場合、列のピボット解除が有効な場面もあります。
その他の活用例など
Table.ColumnNamesの数式は、次のような活用もできます。
また、単票形式のExcelシートからセルの値抽出は、VBAを活用した方法もあります。
以上、Power Query(パワークエリ)のカスタム関数の作成事例として、単票形式のExcelシートからセルの値を抽出する方法の備忘録でした。
その他、Excelで複数ブックのデータ(単票)を一覧表にまとめる方法にはいくつかの選択肢があるので以下に対応例をまとめました。