0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

リストを一定間隔で分割し,リストのリストにする

Last updated at Posted at 2019-04-21

2019/4/22追記
List.Split関数ありますね。
確認したところ、Excel2010のアドイン版ですら使えました。
お騒がせしました。:sweat_smile:

公式リファレンス:List.Split()
https://docs.microsoft.com/en-gb/powerquery-m/list-split

リスト関数群には,この問題を直接に解決する関数が見当たりませんでした.ついにTable.Partition()の出番です.

やりたいこと

下記のような具合で分割したい.

元のリスト(規則的は不要)
ソースのリスト.JPG

分割後のリスト
結果のリスト.JPG

直接変換できる関数は・・・見当たりました(冒頭文参照)

  • 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

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?