2019/4/22追記
List.Split関数ありますね。
確認したところ、Excel2010のアドイン版ですら使えました。
お騒がせしました。
公式リファレンス:List.Split()
https://docs.microsoft.com/en-gb/powerquery-m/list-split
リスト関数群には,この問題を直接に解決する関数が見当たりませんでした.ついにTable.Partition()の出番です.
やりたいこと
下記のような具合で分割したい.
直接変換できる関数は・・・見当たりました(冒頭文参照)
- List.Alternate():リストを所々スキップできるだけで,リストのリストにはならない.
- List.Generate():数珠つなぎしても,2階層のリストのリストにはならない.つまり,
{{リスト1個目,リスト2個目},リスト3個目}
という具合に階層が深くなって行ってしまう.
- List.Range():1グループごと書けば実現できるけれど,分割数が多いと面倒くさい.
- List.Zip():期待したが,駄目.存在理由自体が不明.
コード
let
//適当なリスト.中身は何でもよいです.
ソース = List.Generate(()=>0,each _<205,each _+2),
//任意.
分割する1単位 =15,
テーブルに変換 = Table.FromList(ソース, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
インデックス列を追加 = Table.AddIndexColumn(テーブルに変換, "インデックス", 0, 1),
テーブルのリストに変換 = Table.Partition(インデックス列を追加,"インデックス",
Number.IntegerDivide(Table.RowCount(インデックス列を追加),分割する1単位)+1,
each Number.IntegerDivide(_,分割する1単位)
),
各要素をリストに変換 = List.Transform(テーブルのリストに変換,each _[Column1])
in
各要素をリストに変換
多少の解説
テーブルに変換後,分割基準としてインデックス列を入れ,それを基準にTable.Partition()でテーブルのリストにします.
で,そのリストの各要素(つまり分割された各テーブル)に対しList.Transform()で,当初の列(Column1)を抜きます.
※リストをテーブル化すると,その列名はデフォルトで「Column1」になります.
リンクなど
公式リファレンス:Table.Partition()
https://docs.microsoft.com/en-us/powerquery-m/table-partition
公式リファレンス:List.Transform()
https://docs.microsoft.com/en-us/powerquery-m/list-transform