ラベルをグループ化し、そのテキスト値を連結する(ピボットテーブルなど)


22

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

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

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

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

残念ながら、ピボットテーブルは数値の操作方法のみを知っており、これに向かって最も進んでいるのは、列Aが発生する回数をカウントすることです。

データをMySQLデータベースにインポートGROUP_CONCAT(Attribute)し、GROUP BY Product句を含むクエリでMySQLの機能を使用することで最終的にこれを実現できましたが、Excelソリューションを見つけようとしながら机の上で頭を何度も叩いた後。

将来の参照のために、これはマクロなしのExcelで可能ですか?それがそうであるかどうかにかかわらず、これをどのようにやってのけるでしょうか?

回答:


31
   |     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. 列Aで並べ替えて製品別にグループ化します

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

    =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. FALSEAutoFilterを使用して列Dをフィルタリングすることにより、不要な行を削除し、それらの行を削除します。

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


1
それはあなたの想像力を使っています!おめでとうございます!
jorgebg

これは機能しますが、2012年以降は時間が変更されています。PowerQueryアドイン(Excel 2016に組み込まれている)を使用する新しい回答については、以下をご覧ください。簡単なことではありません。まあ、多分コンピュータに話しかけ、「データをグループ化する」ように頼むかもしれません。あと6年くらいでしょうか。
ripvlan

11

私はそれが古い投稿であることを知っていますが、今日この挑戦を受けました。MicrosoftのPowerQueryアドインを使用しました(注:デフォルトでExcel 2016に組み込まれています)。

  1. テーブルを選択してください
  2. [POWER QUERY]タブ(または2016年のDATA)で、[From Table]を選択します
  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}})
    

    上からの手順を描いた写真はここをクリック

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


非常にエレガントなソリューション、おそらくすべてのベスト。
asdmin

@matt poland、この非常に素晴らしいトリックを使用して行に沿って重複する値を削除する方法を知っているのだろうか?
ラナB

ステップ1(テーブルを選択した後)で、リボンの[データ]タブに移動し、[重複の削除]をクリックできるはずです。
マットポーランド

元のテーブルを変更したくない場合は、Power Query内に別のオプションがあります。手順2の後、Ctrlキーを押しながら両方の列をクリックすると、両方の列が選択されます。次に、いずれかの列を右クリックして、「重複の削除」を選択します。次に、STEP 3へ進む
マット・ポーランド

ありがとうございました!これが最良の答えです。Excel 2016を使用している場合は、PowerQueryが組み込まれています。[データ]タブを押し、[データの取得と変換]セクションの[テーブル/範囲から]を押すだけです。Power Query Editorが開き、[表示]タブを押して、数式バーを有効にします。残りの指示はそのまま機能します。
ripvlan

3

ここにいくつかのアプローチがあります。両方とも「非マクロ」...

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

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

ここに画像の説明を入力してください


あなたが言うように、データセットが小さい場合にのみ、これらは良い解決策です。ありがとう!
p0lar_bear
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.