web-dev-qa-db-ja.com

ラベルのグループ化とテキスト値の連結(ピボットテーブルなど)

次のようなデータを含むスプレッドシートがあります。

製品|属性
 ---------- + ---------- 
製品A |シアン
製品B |シアン
製品C |シアン
製品A |マゼンタ
製品C |マゼンタ
製品B |イエロー
製品C |イエロー
製品A |ブラック
製品B |ブラック

列Aですべてをグループ化し、列Bを、列Aを共有する値のコンマ区切りのリストにしたいので、次のようにします。

製品|属性
 ---------- + -------------------------- 
製品A |シアン、マゼンタ、ブラック
製品B |シアン、イエロー、ブラック
製品C |シアン、マゼンタ、イエロー、ブラック

残念ながら、ピボットテーブルは数値の操作方法しか認識していないため、ピボットテーブルでは、列Aが発生した回数をカウントしています。

データをMySQLデータベースにインポートし、MySQLのGROUP_CONCAT(Attribute)関数をGROUP BY Product句を含むクエリで使用することで、これを最終的に取り除くことができましたが、試行中に頭を繰り返し叩いた後Excelソリューションを理解する。

将来の参考のために、これはマクロなしのExcelで可能ですか?それがそうであるかどうかに関係なく、これをどのように引き離すでしょうか?

23
p0lar_bear
   |     A     |     B
---+-----------+-----------
 1 |  PRODUCT  | ATTRIBUTE
 2 | Product A | Cyan
 3 | Product B | Cyan
 4 | Product C | Cyan
 5 | Product A | Magenta
 6 | Product C | Magenta
 7 | Product B | Yellow
 8 | Product C | Yellow
 9 | Product A | Black
10 | Product B | Black

行1:1がヘッダー行であると想定します。

  1. Sort A列で製品別にグループ化

  2. C列にカンマ区切り形式でデータを準備する C2に次の式を入力し、C3:C10にコピーします。

    =IF(A2<>A1, B2, C1 & "," & B2)
    
  3. 有用な行を特定 D2に入力して=A2<>A3をD3:D10にコピーします。

  4. 列C:Dをコピーし、次に特殊貼り付けを値として(AltE-S-V-Enter)。あなたは今得ます:

    Product A    Cyan       Cyan                   FALSE
    Product A    Magenta    Cyan,Magenta           FALSE
    Product A    Black      Cyan,Magenta,Black     TRUE
    Product B    Cyan       Cyan                   FALSE
    Product B    Yellow     Cyan,Yellow            FALSE
    Product B    Black      Cyan,Yellow,Black      TRUE
    Product C    Cyan       Cyan                   FALSE
    Product C    Magenta    Cyan,Magenta           FALSE
    Product C    Yellow     Cyan,Magenta,Yellow    TRUE
    
  5. 不要な行を削除列DのFALSEをオートフィルターでフィルタリングして、それらの行を削除します。

  6. 終了。列AとCが必要です。

31
wilson

古い投稿だと知っていますが、今日この課題に直面しました。 Microsoftの PowerQuery アドインを使用しました(注:デフォルトでExcel 2016に組み込まれています)。

  1. テーブルを選択してください
  2. [POWER QUERY]タブ(または2016年のDATA)で、[テーブルから]を選択します
  3. 「製品」列をクリックしてください
  4. [変換]タブで[グループ化]を選択します
  5. [表示]タブで、[数式バー]がオンになっていることを確認します
  6. 数式を変更する

    から:

    = Table.Group(#"Changed Type", {"Product"}, {{"Count", each Table.RowCount(_), type number}})
    

    に:

    = Table.Group(#"Changed Type", {"Product"}, {{"Attributes", each Text.Combine([Attribute], ", "), type text}})
    

    Click here for picture depicting steps from above

ステップ6は、Power Query(M)式を活用して、UIで提供される基本的な操作では公開されないデータ操作を実行します。 Microsoftは、Power Queryで利用できるすべての高度な機能についてオンラインで利用できる完全なリファレンスを持っています。

13
Matt Poland

ここでは、「非マクロ」のアプローチをいくつか紹介します...

  1. 小さなデータセットを使用して、最初に製品別に並べ替えた後(GROUP BY製品と同様)、まず「製品」列をコピーし、他の場所に貼り付けてから、重複を削除します。次に、各製品の「属性」をコピーし、各製品の横に「特殊貼り付け、TRANSPOSE」をコピーします。次に、最終的な結果列で、転置した各属性とコンマを連結します。確かに、この「コピー/貼り付け/転置」は、製品のリストが長い場合、すぐに古くなります。

  2. 大量のデータがある場合は、いくつかの数式を使用して、以下に示すように、最終的な結果を得ることができます。 F2、G2、H2、I2、N2の数式は、青い矢印で示されています。必要に応じて、それらを下の行にコピーしてください。 J2:L2はI2と同じ式を使用することに注意してください。また、F2数式は、範囲A:Aに及ぶ名前付き範囲「製品」を参照します。

enter image description here

3
F106dart