2010-12-08 4 views
3

Excelで(最適にはピボットテーブルを使用して)コンマ区切りの値を生成する方法はありますか?次のデータを考えてみましょう:(ピボットテーブルを使用して)E​​xcelでコンマ区切りの値を作成しますか?

Object Color 
foo Red 
foo Blue 
bar Red 
bar Blue 
bar Green 
baz Yellow

私は、次のようなテーブルを取得したいのですが:

Object Count of Color Colors 
foo  2    Red,Blue 
bar  3    Red,Blue,Green 
baz  1    Yellow

Excelで可能これですか?データはSQLクエリから来ているので、再帰CTEを使ってUDFを作成して計算することができますが、これは単一のアドホッククエリであり、素早く汚れた方法で非正規化データを取得したかったのです。結局、これを投稿するのはUDFを書くより時間がかかりますが...

+1

はるかに簡単な解決策: http://superuser.com/questions/249437/excel-pivot-values-in-one-cell-as-comma-ここで区切り値 – yioann

+1

Aはるかに簡単な解決策: http://superuser.com/questions/249437/excel-pivot-values-in-one-cell-as-comma-separated-value – yioann

+0

@yioannありがとう!これを回答として投稿すると、それを解決策としてマークします。 –

答えて

4

ここでそれを指摘して@yioannthis superuser answer(HTから適応はるかに単純な答えは、だと@F106dart):

と仮定すると、データが列にありますA(カテゴリ)とB(値):

  1. 新しい列(C)を作成し、「名前」という名前を付けます。セルC2から始まり、すべて下にコピーするこの式を使用します。=IF(A2=A1, C1&","&B2, B2)
  2. 2番目の新しい列(D)を作成し、「Count」という名前を付けます。セルD2から始まり、すべての方法でコピーするこの式を使用します。=IF(A2=A1, D1+1, 1)
  3. 3つ目の新しい列(E)を作成し、「最終行?」と名前を付けます。セルE2に始まる、このフォーミュラを使用して、ダウン道のすべてをコピー:=A2<>A3

あなたが今だけTRUE値の列B(バリュー)とフィルターカラムE(最後の行を?)非表示にすることができます。要約すると

A   B  C      D     E 
+--------- ----- ----------------------- ------------------- ---------- 
1| Category Value Values     Count    Last Line? 
2| foo  Red =IF(A2=A1,C1&","&B2,B2) =IF(A2=A1, D1+1, 1) =A2<>A3 
3| foo  Blue =IF(A3=A2,C2&","&B3,B3) =IF(A3=A2, D2+1, 1) =A3<>A2 
etc. 
0

はい、実行しているRDBMS(MS SQL、MySQLなど)のツールを使用する方がずっと良いでしょう。 )。

Excelでこのようなピボットテーブルは可能ですです。しかし、あなたが面倒なVBAモジュールを書く場合にのみ、私はそれを推奨しません。

ただし、MS Accessではタスクが簡単です(通常はExcelにバンドルされています)。マイクロソフトでは、AccessとExcelをリンクし、後者を使用して後者に対してクエリを実行するのは簡単です。
ので、述べたようにスプレッドシートのセルを与えられた:

  1. 最良の結果を得るために、Colorによって、その後Objectでテーブルをソートして。

  2. スプレッドシートが保存されていることを確認してください。

  3. MS Accessを開きます。

  4. 選択ファイル - >開くはCtrlO

  5. タイプのファイル下では、Microsoft Excelを選択し

  6. 移動して、あなたを選択してください既存のスプレッドシート。

  7. テーブルを含むワークシートまたは名前付き範囲を選択します。

  8. リンクテーブルには、MyPivotという名前を付けます。

  9. Visual Basic Editorを開きます。ツール - >マクロ - > Visual BasicエディターAltキーF11

  10. このUDFにモジュールを挿入して、貼り付けます。

    'Concat returns a comma-seperated list of items 
    Public Function Concat (CategoryCol As String, _ 
             ItemCol  As String) As String 
        Static LastCategory As String 
        Static ItemList  As String 
    
        If CategoryCol  = LastCategory Then 
         ItemList  = ItemList & ", " & ItemCol 
        Else 
         LastCategory = CategoryCol 
         ItemList  = ItemCol 
        End If 
        Concat = ItemList 
    End Function 
    


  11. 保存プロジェクトを開き、VBエディタを閉じます。

  12. クエリ、デザインビューで新しいクエリを作成します。

  13. SQLビューに切り替えます。このSQLで

  14. ペースト:

    SELECT 
        Object, 
        COUNT (Color)     AS [Count of Color], 
        LAST (Concat (Object, Color)) AS [List 'O Colors] 
    FROM 
        MyPivot 
    GROUP BY 
        Object 
    


  15. クエリを実行し(プレス赤い感嘆符またはちょうどデータシートビューを選択します)。

  16. ボイルラは、15の簡単なステップで行われました! ;)
    結果:オリジナルため

    Object Count of Color List 'O Colors 
    bar    3  Blue, Green, Red 
    baz    1  Yellow 
    foo    2  Blue, Red 
    
+0

うわー、それは激しかったです。私は自由時間を取れば、SQLで同じことをするためにUDFでOPを編集します。答えをありがとう! –

関連する問題