Power Query の M言語を組み立てるクラス(案)

2019/06/17更新 MRecord/MListを追加。Csv.Document や Table.PromoteHeadersの引数を Record の記法に準拠。

Power Query で UTF8 の CSV ファイルを読み込むVBAを作成しているのだが、
ファイルを固定にせず、VBAから渡せるようにしたい。
いろいろやってみると、M言語(Power Queryのやつ)を組み立てて、CSVファイルを受け渡してやればいい様子。

だいたい、VBAの文字列で他の言語を組み立てるって超めんどい。そのままM言語書けないものか。。。
というわけで、ちょっとそれっぽいクラスを作ってみた。
ちなみに、自分の必要な関数だけを追加しただけなので、本当にCSVの取り込みぐらいしかできません。
ただ、これから関数を増やしていければいいなぁ~と思っている。

以下、クラスが M言語の関数に対応する。そのままのクラス名は使えないので M + クラス名にしたら一か所に集まるし
いい感じになるかな。

MCsv ・・・ Csv の関数の入るクラス。
MFile ・・・ File の関数の入るクラス。
MTable ・・・ Table の関数の入るクラス。
MRecord ・・・ Record の組み立てクラス(Dictionaryラッパークラス)。
MList ・・・ List の組み立てクラス(Collectionラッパークラス)。
MCommand ・・・ 各クラスからM言語を作り出すクラス

以下、Github にソースをアップ済みです。
https://github.com/RelaxTools/MLangBuilder

使い方は以下を参照してたただくとわかると思うが、まんまM言語イメージで書けるのが売りです。

テーブルを作成し、MCommand に追加していき、最後に .ToString メソッドでM言語の文字列を作成します。
文法上、VBAではできないようなものも出てきそうですが、全部のメソッドをサポートする気はないので、
使える部分でコツコツ追加していこうかと思います。

ABOUTこの記事をかいた人

はてなブックマークで驚愕の1600越えを記録した伝説が今明らかに! エクセル方眼紙 四天王の1人(ほぼ最弱)窓の杜大賞2014 大賞受賞! Excelを便利にする250以上の機能を体系化したアドインはこちらです。