3

有没有办法在 Excel 中生成逗号分隔的值(最好使用数据透视表)?考虑以下数据:

对象颜色
富红
富蓝
酒吧红
酒吧蓝色
酒吧绿色
巴兹黄色

我想要一张如下表:

颜色颜色的对象计数
foo 2 红蓝
栏 3 红、蓝、绿
baz 1 黄色

这在 Excel 中可行吗?数据来自 SQL 查询,因此我可以编写一个带有递归 CTE 的 UDF 来计算,但这是针对单个 ad-hoc 查询的,我想要一种快速而简单的方法来获取非规范化数据。最后,发布这个可能比编写 UDF 花费更长的时间,但是......

4

3 回答 3

4

这是一个更简单的答案,改编自这个超级用户的答案(HT 到@yioann用于指出它,@F106dart用于原始):

假设数据在 A(类别)和 B(值)列中:

  1. 创建一个新列 (C),并将其命名为“值”。使用此公式,从单元格 C2 开始并一直向下复制:=IF(A2=A1, C1&","&B2, B2)
  2. 创建第二个新列 (D),并将其命名为“计数”。使用这个公式,从单元格 D2 开始,一直向下复制:=IF(A2=A1, D1+1, 1)
  3. 创建第三个新列 (E),并将其命名为“最后一行?”。使用这个公式,从单元格 E2 开始,一直向下复制:=A2<>A3

您现在可以隐藏 B 列(值)并过滤 E 列(最后一行?)仅用于TRUE值。

总之:

   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.
于 2013-05-30T17:35:09.000 回答
0

是的,使用您正在运行的任何 RDBMS 的工具(MS SQL、MySQL 等)会更好。

这样的数据透视表在 Excel中是可能的。但是,只有当你编写一个繁琐的 VBA 模块时——我不推荐。

但是,MS Access 中的任务更简单——它通常与 Excel 捆绑在一起。Microsoft 使链接 Access 和 Excel 并使用前者在后者上运行查询变得“容易”。
因此,给定电子表格单元格:

  1. 为获得最佳结果,请按 对表格进行排序Object,然后按Color

  2. 确保电子表格已保存。

  3. 打开 MS Access。

  4. 选择文件 --> 打开   ( CtrlO)

  5. 文件类型下,选择Microsoft Excel

  6. 导航并选择您现有的电子表格。

  7. 选择包含您的表格的工作表或命名范围。

  8. 为链接表命名MyPivot

  9. 打开 Visual Basic 编辑器...工具 --> 宏 --> Visual Basic 编辑器 ( 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. 运行查询(按红色感叹号或仅选择Datasheet View)。

  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 回答
0

更简单的方法是在创建数据透视表时将数据添加到数据模型,然后使用“度量”(称为“颜色”),如下所示:

=CONCATENATEX(Table1,[Color],", ")

然后将“颜色”字段添加到枢轴的值部分。

于 2021-09-16T16:42:32.687 回答