PowerQueryでお題があったの、でできる限りボタンポチポチで変換してみました。
(もっとあっさりできるかもしれません。)
1枚目の表を、2枚目の表のように整形してください。
— はけた@Excel最高の学び方発売中 (@excelspeedup) 2019年5月17日
関数以外でも、エクセルの機能はなんでも使ってOKです。#エクセルクイズ pic.twitter.com/m1SKH9SeJS
Power Queryで、あっさりと結合する方法があったら、教えてほしいです。そういう方法が、ありそうな気がするんですよね・・・。
— はけた@Excel最高の学び方発売中 (@excelspeedup) 2019年5月17日
特に「データが何列になっても」データを整形する方法があるのなら、知りたいです。マウス操作限定で、できればなお良しです。
以下の表をデータに変換します。
この表は横や縦に拡張される可能性があるので、それを考慮した変形になります。
PowerQueryに取り込みます
↓
転置します
インデックス列を追加します
[列の追加]-[インデックス列]-[0から]でインデックスを追加します。
ピボット解除します
インデックス列を選択して[変換]-[列のピボット解除]-[そのほかの列のピボット解除]でピボット解除します。
ここまでくるとなんとなくゴールが見えてきますね。
インデックス+1の列を追加します
[列の追加]-[カスタム列]で[インデックス]+1
を指定します。
自分自身をマージします
[ホーム]-[クエリのマージ]でカスタム列とインデックス列と属性をキーに左外部結合します。
テーブルを展開し値を抽出します
インデックスが偶数の行だけに絞ります
マウス操作で偶数のみ抽出する方法が見当たらなかったので、一旦適当にフィルタします。0にしときます。
数式バーにて、[インデックス]=0
をNumber.IsEven([インデックス])
に書き換えます。
不要な列を削除し見出しを整えて完成です
let
ソース = Excel.CurrentWorkbook(){[Name="テーブル"]}[Content],
変更された型 = Table.TransformColumnTypes(ソース,{{"製品番号", type text}, {"数量", Int64.Type}, {"製品番号2", type text}, {"数量3", Int64.Type}, {"製品番号4", type text}, {"数量5", Int64.Type}, {"数量6", type text}, {"数量7", Int64.Type}}),
転置されたテーブル = Table.Transpose(変更された型),
追加されたインデックス = Table.AddIndexColumn(転置されたテーブル, "インデックス", 0, 1),
ピボット解除された他の列 = Table.UnpivotOtherColumns(追加されたインデックス, {"インデックス"}, "属性", "値"),
追加されたカスタム = Table.AddColumn(ピボット解除された他の列, "カスタム", each [インデックス]+1),
マージされたクエリ数 = Table.NestedJoin(追加されたカスタム, {"カスタム", "属性"}, 追加されたカスタム, {"インデックス", "属性"}, "追加されたカスタム", JoinKind.LeftOuter),
#"展開された 追加されたカスタム1" = Table.ExpandTableColumn(マージされたクエリ数, "追加されたカスタム", {"値"}, {"追加されたカスタム.値"}),
フィルターされた行 = Table.SelectRows(#"展開された 追加されたカスタム1", each (Number.IsEven([インデックス]))),
削除された列 = Table.RemoveColumns(フィルターされた行,{"インデックス", "属性", "カスタム"}),
#"名前が変更された列 " = Table.RenameColumns(削除された列,{{"値", "製造番号"}, {"追加されたカスタム.値", "数値"}})
in
#"名前が変更された列 "
もっとあっさりできるようなできないような。
M言語をマスターすればもっとすっきりするんでしょうね!