在 Excel 中创建逗号分隔值(使用数据透视表)?
有没有办法在 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 来计算,但这是针对单个即席查询的,我想要一种快速而简单的方法来获取非规范化数据。最后,发布此内容可能比编写 UDF 花费的时间更长,但是......
Is there a way to generate comma-delimited values in Excel (optimally using a PivotTable)? Consider the following data:
Object Color foo Red foo Blue bar Red bar Blue bar Green baz Yellow
I'd like to get a table like the following:
Object Count of Color Colors foo 2 Red,Blue bar 3 Red,Blue,Green baz 1 Yellow
Is this possible in Excel? The data is coming from a SQL query, so I could write a UDF with a recursive CTE to calculate, but this was for a single ad-hoc query, and I wanted a quick-and-dirty way to get the denormalized data. In the end, it's probably taken longer to post this than to write the UDF, but...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是一个更简单的答案,改编自这个超级用户答案(HT到@yioann 指出了这一点,@F106dart 表示原始内容):
假设数据位于 A 列(类别)和 B(值)列中:
=IF(A2=A1, C1&","&B2, B2)
=IF(A2=A1, D1+1, 1)
=A2<>A3
您现在可以隐藏 B 列(值)和筛选 E 列(最后一行?)
TRUE
值。总之:
Here's a much simpler answer, adapted from this superuser answer (HT to @yioann for pointing it out and @F106dart for the original):
Assuming the data is in columns A (Category) and B (Value):
=IF(A2=A1, C1&","&B2, B2)
=IF(A2=A1, D1+1, 1)
=A2<>A3
You can now hide column B (Value) and filter column E (Last Line?) for only the
TRUE
values.In summary:
是的,使用您正在运行的任何 RDBMS 的工具(MS SQL、MySQL 等)会更好。
这样的数据透视表在 Excel 中是可能的。但是,只有当您编写繁琐的 VBA 模块时——我不推荐这样做。
然而,在 MS Access 中,这个任务更简单——它通常与 Excel 捆绑在一起。 Microsoft 使链接 Access 和 Excel 以及使用前者对后者运行查询变得“容易”。
因此,给定电子表格单元格如下:
为了获得最佳结果,请按
对象
对表格进行排序,然后按颜色
确保电子表格已保存。
打开 MS Access。
选择文件 -->打开 (CtrlO)
在文件类型下,选择Microsoft Excel
导航到并选择您现有的电子表格。
选择包含您的表格的工作表或命名区域。
将链接表命名为
MyPivot
。打开 Visual Basic 编辑器...工具 -->宏--> Visual Basic 编辑器 (AltF11)
插入模块并粘贴到此 UDF 中:
保存项目并关闭 VB 编辑器
在 < em>查询,在设计视图中创建新查询。
切换到SQL 视图。
粘贴此 SQL:
<前><代码>选择
目的,
COUNT(颜色)AS [颜色计数],
LAST(Concat(对象,颜色))AS [列出 'O 颜色]
从
我的数据透视表
分组依据
目的
运行查询(按红色感叹号或仅选择数据表视图)。
瞧,只需 15 个简单步骤即可完成! ;)
结果:
Yes, you would be much better off using the tools of whatever RDBMS you're running (MS SQL, MySQL, etc.).
Such a pivot table is possible in Excel. But, only if you write a cumbersome VBA module -- which I don't recommend.
However, the task is simpler in MS Access -- which usually comes bundled with Excel. Microsoft makes it "easy" to link Access and Excel and to use the former to run queries on the latter.
So, given the spreadsheet cells as stated:
For best results, sort the table by
Object
and then byColor
.Make sure the spreadsheet is saved.
Open up MS Access.
Select File --> Open (CtrlO)
Under Files of type, select Microsoft Excel
Navigate to and choose your existing spreadsheet.
Choose the worksheet or named range that contains your table.
Give the linked table the name
MyPivot
.Open the Visual Basic Editor... Tools --> Macro --> Visual Basic Editor (AltF11)
Insert a module and paste in this UDF:
Save the project and close the VB editor
Under Queries, Create a new query in design view.
Switch to the SQL View.
Paste in this SQL:
Run the query (Press the red exclamation mark or just select the Datasheet View).
Voilà, done in 15 easy steps! ;)
Results:
一种更简单的方法是在创建数据透视表时将数据添加到数据模型,然后使用“度量”(称为“颜色”),如下所示:
然后将“颜色”字段添加到数据透视表的值部分。
An even easier way is to add the data to the data model when you create the pivot table and then use a "measure" (called "Colours") as follows:
Then add the "Colours" field to the values portion of the pivot.