有没有办法在Excel中生成逗号分隔的值(最佳使用数据透视表)?请考虑以下数据:
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来计算,但这是针对单个ad-hoc查询,我想要一种快速而简单的方法来获取非规范化数据。最后,发布此文件可能比编写UDF要花费更长时间,但是......
答案 0 :(得分:4)
这是一个更简单的答案,改编自this superuser answer(HT到@yioann用来指出它,@F106dart用于原作:
假设数据在列A(类别)和B(值)中:
=IF(A2=A1, C1&","&B2, B2)
=IF(A2=A1, D1+1, 1)
=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.
答案 1 :(得分:0)
是的,使用你正在运行的任何RDBMS(MS SQL,MySQL等)的工具会好得多。
这样的数据透视表在Excel中可能可能。但是,只有你编写一个繁琐的VBA模块 - 我不建议这样做。
但是,MS Access中的任务更简单 - 通常与Excel捆绑在一起。微软可以“轻松”链接Access和Excel,并使用前者对后者运行查询 因此,给出电子表格单元格如下所述:
为获得最佳效果,请按Object
然后按Color
对表格进行排序。
确保电子表格已保存。
打开MS Access。
选择文件 - &gt;打开( Ctrl O )
在文件类型下,选择 Microsoft Excel
导航并选择现有的电子表格。
选择包含表格的工作表或命名范围。
为链接表提供名称MyPivot
。
打开Visual Basic编辑器... 工具 - &gt;宏 - &gt; Visual Basic编辑器( Alt F11 )
插入模块并粘贴到此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
保存项目并关闭VB编辑器
在查询下,在设计视图中创建一个新查询。
切换到 SQL视图 。
粘贴此SQL:
SELECT
Object,
COUNT (Color) AS [Count of Color],
LAST (Concat (Object, Color)) AS [List 'O Colors]
FROM
MyPivot
GROUP BY
Object
运行查询(按红色感叹号或只选择数据表视图)。
Voilà,完成15个简单的步骤! ;)
结果:
Object Count of Color List 'O Colors
bar 3 Blue, Green, Red
baz 1 Yellow
foo 2 Blue, Red