3

Excel でカンマ区切りの値を生成する方法はありますか (最適にはピボットテーブルを使用します)。次のデータを検討してください。

オブジェクトの色
フーレッド
フーブルー
バーレッド
バー ブルー
バー グリーン
バズイエロー

次のようなテーブルを取得したいと思います。

色のオブジェクト数
foo 2 赤、青
バー 3 赤、青、緑
baz 1 イエロー

これはExcelで可能ですか?データは SQL クエリから取得されるため、再帰的な CTE を使用して UDF を記述して計算することもできましたが、これは 1 つのアドホック クエリ用であり、非正規化されたデータを取得するための簡単な方法が必要でした。結局、UDF を書くよりも、これを投稿する方が時間がかかるかもしれませんが...

4

3 に答える 3

0

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

このようなピボット テーブルは、Excelで可能です。ただし、面倒な VBA モジュールを作成する場合に限ります。これはお勧めしません。

ただし、通常は Excel にバンドルされている MS Access の方が作業は簡単です。Microsoft は、Access と Excel をリンクし、前者を使用して後者でクエリを実行することを「簡単に」行っています。
したがって、次のようにスプレッドシートのセルが与えられます。

  1. 最良の結果を得るには、表を で並べ替え、Object次にで並べ替えますColor

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

  3. MS Access を開きます。

  4. ファイルを選択--> 開く   ( CtrlO)

  5. [ファイルの種類]で、[ Microsoft Excel]を選択します。

  6. 既存のスプレッドシートに移動して選択します。

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

  8. リンク テーブルに名前を付けMyPivotます。

  9. Visual Basic Editor を開きます...ツール --> マクロ --> Visual Basic Editor ( AltF11)

  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 ビューに切り替えます。

  14. 次の SQL を貼り付けます。

    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
    
于 2011-02-13T15:25:28.333 に答える