shikumika’s diary

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

【Power Query】カスタム関数の作成事例:単票形式のExcelシートからセルの値を抽出

Power Query(パワークエリ)のカスタム関数の作成事例として、単票形式のExcelシートからセルの値を抽出する方法の備忘録。

カスタム関数が利用できると、データ抽出等の作業効率化も可能です。

単票形式で紙印刷のレイアウトはPower Queryでの抽出も手間となることが多いのでカスタム関数を使った手順の整理。

内容:

 

カスタム関数で実現すること、前提

単票形式のExcelシートをPower Queryで読み込み、テーブルからセルの値を取得したい。Excelシートは、次のように「日報」という名前のクエリで取得しているという事例。

テーブルからセルの値を取得する関数を作成したい

元データの状態

参考にした情報

セルの値の取得の考え方等は以下を参考にさせていただきました。

 modernexcel7.hatenablog.com

 

以下、数式バーにカスタム関数を入力する場合の手順です。

手順

「空のクエリ」の作成

「ホーム」-「新しいソース」-「その他のソース」-「空のクエリ」をクリック

「空のクエリ」をクリック

空のクエリの作成
数式の入力

「空のクエリ」(事例では、クエリ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として数える。

空のクエリを追加しただけの画面

空のクエリを再度追加
値の抽出結果

次のように、指定したセルの値が抽出できている。

このカスタム関数を他の関数と同様に呼び出すことで、値抽出が可能。

クエリ名「日報」の4行目、2列の値を取得できている

値の抽出結果

補足説明

カスタム関数の考え方

support.microsoft.com

カスタム関数を使用せず、Tableの値を一つずつ抽出する方法

今回はカスタム関数を活用した事例でした。値取得したいデータ数が少ない場合は、Tableの値を参照するカスタム列を一つずつ追加する方法も有効です。

shikumika.org

カスタム関数を使用せず、「列のピボット解除」で抽出する方法

値取得のために一つずつの設定が手間な場合、列のピボット解除が有効な場面もあります。

shikumika.org

その他の活用例など

Table.ColumnNamesの数式は、次のような活用もできます。

shikumika.org

 

また、単票形式のExcelシートからセルの値抽出は、VBAを活用した方法もあります。

shikumika.org

 

以上、Power Query(パワークエリ)のカスタム関数の作成事例として、単票形式のExcelシートからセルの値を抽出する方法の備忘録でした。

その他、Excelで複数ブックのデータ(単票)を一覧表にまとめる方法にはいくつかの選択肢があるので以下に対応例をまとめました。

shikumika.org