[[20220319081949]] 『パワークエリで同じ項目のデータを横並びにしたい』(panda) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『パワークエリで同じ項目のデータを横並びにしたい』(panda)

半年ほど前にこちらでパワークエリの存在を教えていただき、
3月から本やネットで勉強中です。。。
が、サンプルファイルを使用して本の通りにやっているレベルで
応用が全くきかず、またこちらで質問させてください。

下のようなExcelファイルがあり
システム登録用のcsvファイルを作成したいです。

  A     B       C      D
 職種    所属      役職   メールアドレス


 1 事務 総務部       部長   123@***.***.jp
 2 事務 総務部       課長   234@***.***.jp
 3 営業 マーケティング部  部長   345@***.***.jp
 4 事務 マーケティング部  部長   456@***.***.jp
 5 開発 マーケティング部  課長   567@***.***.jp 
 6 開発 マーケティング部  専門課長 678@***.***.jp
 7 設計 技術部       部長   789@***.***.jp
 8 設計 技術部       課長   891@***.***.jp

基本的には上記の並びのままなのですが
5行目、6行目の課長と専門課長は
『課長』というくくりで一行にし、
メールアドレスも列で

  A     B      C      D        E
開発 マーケティング部  課長   567@***.***.jp 678@***.***.jp

という形にしたいです。

専門課長を『課長』という表示にする作業は
クエリ上でのやり方はわかると思います。

メールアドレスを横並びにする部分が知りたいです。
列のピボットやピボットの解除あたりかなー?と
繰り返してやっていて全く進みません。

PowerQueryの知識を身に着けていきたいと考えており
どうぞよろしくお願いいたします。

< 使用 Excel:Office365、使用 OS:Windows10 >


 職種,所属,役職の3列を選択してグループ化
 グループ化の新しい列名は適当(デフォルトはカウント)に、操作は、[すべての行]
 カスタム列の追加で、カスタム列の式は、Text.Combine([カウント][メールアドレス],","))
 以上で、カスタム列に ,区切りでメールアドレスが入ります。
 これを列に分割したければ、
   [変換]タブ→[テキストの列]グループ→[列の分割]→[区切り記号による分割]
 で、カンマ区切りで分割してください。

 let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    変更された型 = Table.TransformColumnTypes(ソース,{{"職種", type text}, {"所属", type text}, {"役職", type text}, {"メールアドレス", type text}}),
    グループ化された行 = Table.Group(変更された型, {"職種", "所属", "役職"}, {{"カウント", each _, type table [職種=nullable text, 所属=nullable text, 役職=nullable text, メールアドレス=nullable text]}}),
    追加されたカスタム = Table.AddColumn(グループ化された行, "カスタム", each Text.Combine([カウント][メールアドレス],",")),
    区切り記号による列の分割 = Table.SplitColumn(追加されたカスタム, "カスタム", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"カスタム.1", "カスタム.2"}),
    変更された型1 = Table.TransformColumnTypes(区切り記号による列の分割,{{"カスタム.1", type text}, {"カスタム.2", type text}})
 in
    変更された型1 
 
 列の分割数は、クエリ作成時の数になってしまいますが、
 どんな数でも自動的に対応できるようにしようとすると
 またちょっと面倒なことになります
(´・ω・`) 2022/03/19(土) 10:16

>列のピボットやピボットの解除あたりかなー?

こんな感じで、ピボット用の列を作成する方法もあります。

 ・グループ化したTableに、Table.AddColumnで、各グループ毎に連番作成
 ・[連番]列でピボット

 let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    変更された型 = Table.TransformColumnTypes(ソース,{{"職種", type text}, {"所属", type text}, {"役職", type text}, {"メールアドレス", type text}}),
    置き換えられた値 = Table.ReplaceValue(変更された型,"専門","",Replacer.ReplaceText,{"役職"}),
    グループ化された行 = Table.Group(置き換えられた値, {"職種", "所属", "役職"}, {{"カウント", each _, type table [職種=nullable text, 所属=nullable text, 役職=nullable text, メールアドレス=nullable text]}}),
    追加されたカスタム = Table.AddColumn(グループ化された行, "カスタム", each Table.AddIndexColumn([カウント],"連番",1)),
    削除された他の列 = Table.SelectColumns(追加されたカスタム,{"カスタム"}),
    #"展開された カスタム" = Table.ExpandTableColumn(削除された他の列, "カスタム", {"職種", "所属", "役職", "メールアドレス", "連番"}, {"職種", "所属", "役職", "メールアドレス", "連番"}),
    ピボットされた列 = Table.Pivot(Table.TransformColumnTypes(#"展開された カスタム", {{"連番", type text}}, "ja-JP"), List.Distinct(Table.TransformColumnTypes(#"展開された カスタム", {{"連番", type text}}, "ja-JP")[連番]), "連番", "メールアドレス")
 in
    ピボットされた列

(マナ) 2022/03/19(土) 13:38


(´・ω・`)さま
(マナ)さま

回答をありがとうございます。
実際のデータが手元にないので会社で試してみます!

読んだだけでは
「おぉー!なるほどー」と理解出来るレベルではないので
実行してみてまた改めてお礼に参ります。

みなさんはどうやってそんなに詳しくなれたのでしょうか。
うらやましいです!
頑張ります♪
(panda) 2022/03/19(土) 16:24


(´・ω・`)さま
(マナ)さま

教えて頂いた通りにやったのですが
思うような結果になりませんでした。

なんとなーく、そういうことなのかなー?という感じはあるので
教えて頂いたことを自分の中で理解出来るように色々と試してみます。

お忙しい中ありがとうございました。
また何かありました際には宜しくお願いいたします^^
(panda) 2022/03/23(水) 20:21


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.