Power Query(M言語)入門
セル値でパス・ブック・シート名を指定

Power Query(パワークエリ)とM言語を練習問題を通して学んでいきます
公開日:2023-02-07 最終更新日:2023-02-08

セル値でパス・ブック・シート名を指定


「パワク2本目」
Power Query(M言語)の問題と解答・解説


本シリーズは、ツイッターと連動企画になります。
ツイッターで問題を出して、それに解答と解説をしていく形でPower QueryとM言語の理解を深めていきます。

パワク2本目

Excel エクセル  Power Query M言語

#パワク2本目
別ブックの特定シートをパワクで取り込んでください。
テーブル"tbl設定"に、パス・ブック名・シート名が入っています。
この"tbl設定"の情報を元に取り込んでください。
※"tbl設定"の名前は随意で。
※設定値は正しく入力されているものとします。
#パワク #PowerQuery


解答コード

Excel エクセル  Power Query M言語
let
    設定 = Excel.CurrentWorkbook(){[Name="tbl設定"]}[Content][設定],
    パス名 = 設定{0}, ブック名 = 設定{1}, シート名 =  設定{2},
    ソース = Excel.Workbook(File.Contents(パス名 & "\" & ブック名), true, true),
    シート = ソース{[Item=シート名,Kind="Sheet"]}[Data]
in
    シート
パス名、ブック名、シート名
これらを一旦変数に入れてから使っていますが、もちろん直接使っても構いません。
let
    設定 = Excel.CurrentWorkbook(){[Name="tbl設定"]}[Content][設定],
    ソース = Excel.Workbook(File.Contents(設定{0} & "\" & 設定{1}), true, true),
    シート = ソース{[Item=設定{2},Kind="Sheet"]}[Data]
in
    シート
面倒なら変数を減らしてしまって、
inでまとめて処理しても構いません。
let
    設定 = Excel.CurrentWorkbook(){[Name="tbl設定"]}[Content][設定]
in
    Excel.Workbook(File.Contents(設定{0} & "\" & 設定{1}), true, true){[Item=設定{2},Kind="Sheet"]}[Data]
この辺りは見やすさ書きやすさの問題なので、自身で分かり易いと思う書き方で良いと思います。
普通は、分かりやすい名前の変数に入れて使うようにした方が良いと思います。


Excel.CurrentWorkbook

いきなり、Excel.CurrentWorkbookがでてくるので、ちょっと戸惑うかもしれません。

構文
Excel.CurrentWorkbook() as table
現在の Excel ブックの内容を返します。
テーブル、名前付き範囲、動的配列を返します。
Excel.Workbook とは異なり、シートは返しません。

簡単に言えば、
テーブルを含む名前定義の一覧が、tableとして返されるという事です。

空のクエリを作成して確認してみましょう。

Excel エクセル  Power Query M言語

数式バーに、
= Excel.CurrentWorkbook()
これだけ入れると、

Excel エクセル  Power Query M言語


Excel.CurrentWorkbook(){[Name="tbl設定"]}[Content][設定]
Excel.CurrentWorkbook()で取得したtableの中から、
Nameが"tbl設定"を抽出し、[Content]列、[設定]列を取得してます。
画面で、
「Content」列の1行目の「Table」の部分をクリックすると、下部に中身が表示されます。

Excel エクセル  Power Query M言語

{[Name="tbl設定"]}
これは、1行目のデータなので、
Excel.CurrentWorkbook(){[Name="tbl設定"]}
Excel.CurrentWorkbook(){0}
どちらでも同じになります。

リストは配列のようなものと考えて良いでしょう。
特定の要素を取得するには、インデックス(0から始まる)を波括弧{}の中に指定します。

レコードとリストの違いに注意してください。
= Excel.CurrentWorkbook(){[Name="tbl設定"]}
これはレコードです。
行番号がありませんので、これに続けてインデックス{}の指定はできません。
Excel エクセル  Power Query M言語

[Content]を指定することでリストになります。
= Excel.CurrentWorkbook(){[Name="tbl設定"]}[Content]

Excel エクセル  Power Query M言語

これは「Content」のリストになるので、インデックスを指定できます。
= Excel.CurrentWorkbook(){[Name="tbl設定"]}[Content]{0}

Excel エクセル  Power Query M言語

[Content]のインデックスを指定する前に[設定]列を指定しても良いです。

Excel エクセル  Power Query M言語

つまり、パス名を取得するには、
= Excel.CurrentWorkbook(){[Name="tbl設定"]}[Content]{0}[設定]
= Excel.CurrentWorkbook(){[Name="tbl設定"]}[Content][設定]{0}
どちらでもパス名にたどりつくことができます。

解答のクエリでは、後で使いやすいように、
設定 = Excel.CurrentWorkbook(){[Name="tbl設定"]}[Content][設定]
パス名 = 設定{0}
ブック名 = 設定{1}
シート名 = 設定{2}
このように使用しています。


Power Query M言語仕様

Microsoft Learn
詳細は上記を参照してください。
ここまでに使われた記号の意味と、コメントについて簡単に説明しておきます。

位置指定インデックス演算子

{} 波括弧
数値インデックスを使用してリスト内の項目にアクセスします。
0から始まるリストの先頭からのインデックスです。

参照演算子

[] 角括弧
レコードのフィールドに名前でアクセスできます。

コメント

単一行コメントは、// 文字で始まり、ソース行の末尾までです。
区切られたコメントは、/* 文字で始まり、*/ 文字で終わります。




同じテーマ「PowerQuery(M言語)入門」の記事

別ブックのシートを列可変で取り込む
セル値でパス・ブック・シート名を指定
別ブックの最終シートの取り込み
列数不定のCSVの取り込み
CSVのA列が日付の行だけを取り込む
A列のヘッダー名を変更する
「売上」が数値の行のみ取り込む
2つのテーブルのマージ
グルーブ内の最小・最大
有効な最新単価の取得
新旧マスタの差異比較


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ