在Excel中创build逗号分隔的值(使用数据透视表)?
有没有办法在Excel中生成逗号分隔值(最佳使用数据透视表)? 考虑以下数据:
对象颜色 foo红 foo蓝色 酒吧红色 酒吧蓝色 酒吧绿色 巴兹黄色
我想要得到如下表格:
颜色对象数 foo 2红色,蓝色 酒吧3红色,蓝色,绿色 巴兹1黄色
这可能在Excel中吗? 数据来自SQL查询,所以我可以用recursionCTE编写一个UDF来计算,但是这是针对一个特定查询的,我想要一个快速又脏的方法来获取非规格化的数据。 最后,这可能需要更长的时间才能写UDF,但是…
这是一个更简单的答案,从这个超级用户的答案 (HT指向@yioann指出来和@ F106dart为原件):
假设数据在列A(类别)和B(值)中:
- 创build一个新的列(C),并将其命名为“值”。 使用此公式,从单元格C2开始,一直向下复制:
=IF(A2=A1, C1&","&B2, B2)
- 创build第二个新列(D),并将其命名为“计数”。 使用此公式,从单元格D2开始,一直向下复制:
=IF(A2=A1, D1+1, 1)
- 创build第三个新列(E),并将其命名为“Last Line?”。 使用这个公式,从单元格E2开始,一直向下复制:
=A2<>A3
您现在只能隐藏B列(值)和过滤列E(最后一行?)为TRUE
值。
综上所述:
ABCDE +--------- ----- ----------------------- ------------------- ---------- 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.
是的,使用所运行的任何RDBMS工具(MS SQL,MySQL等)会更好。
在Excel中可以使用这种数据透视表。 但是,只有当你写一个笨重的VBA模块 – 我不build议。
但是,MS Access中的任务更简单 – 通常与Excel捆绑在一起。 微软使得连接Access和Excel的“容易”,并使用前者在后者上运行查询。
所以,给出的电子表格单元格如下所述:
-
为了获得最佳效果,请按
Object
对Color
sorting。 -
确保电子表格已保存。
-
打开MS Access。
-
select文件 – >打开 ( Ctrl O )
-
在“ 文件types”下 ,select“ Microsoft Excel”
-
导航到并select您现有的电子表格。
-
select包含您的表的工作表或命名范围。
-
为链接表命名
MyPivot
。 -
打开Visual Basic编辑器… 工具 – >macros – > 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
-
保存该项目并closuresVB编辑器
-
在查询下 ,在devise视图中创build一个新的查询。
-
切换到SQL视图 。
-
粘贴在这个SQL中:
SELECT Object, COUNT (Color) AS [Count of Color], LAST (Concat (Object, Color)) AS [List 'O Colors] FROM MyPivot GROUP BY Object
-
运行查询(按红色感叹号或只select数据表视图 )。
-
Voilà,在15个简单的步骤完成! ;)
结果:Object Count of Color List 'O Colors bar 3 Blue, Green, Red baz 1 Yellow foo 2 Blue, Red