なんでもエクセル(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(
        連番列の追加, "テーブル", {"都道府県名"}
    )