なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

Power Query:グループごとに連番を振る

指定列でグループ分けして番号を振りたい時。

Excelの数式だったら「=COUNTIF(A$2:A2,A2)」を下にコピーする形でグループ連番列を作るだろうと思う。クエリでは「行のグループ化」と「インデックス列の追加」を使えば同じことができる。

事前に画像のような「エリア」列と「都道府県名」列を持つテーブルを「テーブル1」として読み込んでいるものとする。


「エリア」列の見出しを右クリックして「グループ化」

新しい列名「テーブル」・操作「すべての行」・列は空欄のままで[OK]

すると数式バーに下のような記述が表示されるはず。

= Table.Group(テーブル1, {"エリア"}, {{"テーブル", each _, type table [エリア=nullable text, 都道府県名=nullable text]}})

数式の中の「_」を「Table.AddIndexColumn(_, "連番", 1, 1)」とすれば、いちいち列を追加しなくても「インデックス列の追加」もグループ化に組み込むことができる。

= Table.Group(テーブル1, {"エリア"}, {{"テーブル", each Table.AddIndexColumn(_, "連番", 1, 1), type table [エリア=nullable text, 都道府県名=nullable text, 連番=Int64.Type]}})

ついでに列のデータ型も指定し直しておいた。

後は「テーブル」列から「都道府県名」と「連番」列を展開するだけ。


「表示させたい列」と「連番列」にだけチェックを入れる。 [元の列名をプレフィックスとして使用します]のチェックは外す。 →[OK]

これで完了。読み込めばおしまい。

もっとも慣れている人は「行のグループ化→インデックス列の追加→列の展開」でやったほうが楽だと思う。

ないと思うけど、もし「そうじゃなくて、こうしたいんだよね」という場合は、普通にグループ化して連番列を追加してから展開すればいい。

    行のグループ化 = Table.Group(テーブル, {"エリア"}, {
        "テーブル", each _,
        type table [エリア=Text.Type, 都道府県名=Text.Type]
    }),
    連番列の追加 = Table.AddIndexColumn(
        行のグループ化, "連番", 1, 1, Int64.Type
    ),
    テーブル列の展開 = Table.ExpandTableColumn(
        連番列の追加, "テーブル", {"都道府県名"}
    )