在 Excel 中,如何合并、折叠、压缩或修剪行和列中具有重复标题的数组中的空单元格?
+-----------+---------+------+---------+-------+---------+
| | 1998 | 2001 | 2004 | 2004 | 2010 |
+-----------+---------+------+---------+-------+---------+
| Porcupine | 123,000 | | | | |
| Porcupine | | | 125,000 | | |
| Porcupine | | | | | 197,000 |
| Quark | 3,750 | | | | |
| Quark | | | 3,750 | | |
| Sloth | | | | 1,400 | |
| Sloth | | | | | 1,500 |
+-----------+---------+------+---------+-------+---------+
期望结果:
+-----------+---------+---------+---------+
| | 1998 | 2004 | 2010 |
+-----------+---------+---------+---------+
| Porcupine | 123,000 | 125,000 | 197,000 |
| Quark | 3,750 | 3,750 | |
| Sloth | | 1,400 | 1,500 |
+-----------+---------+---------+---------+
答案1
@Jon 的答案是一个不错的 VBA 解决方案。但是……
请看一下 Jon Walkenbach 关于我所说的“去枢轴化”的文章: http://spreadsheetpage.com/index.php/tip/creating_a_database_table_from_a_summary_table/
您可以使用 Walkenbach 的技术首先将数据“去透视”为规范化的表格布局。然后,如 @Jon 上面所指出的,您可以重新透视以获得所需的布局。
这是该论坛上的另一篇帖子,其中的问题与您的问题非常相似: 我有一张有 2 个列的表格;其中一个是姓名,另一个有一个或多个电子邮件,以逗号分隔
(我已经记不清用过 Walkenbach 的“去枢轴”技术多少次了。只需很少的练习,您就可以成为这项技术的专家。)
答案2
我能想到的唯一方法是使用 VBA – 但我认为小计的效果不会很好。
假设您的数据在 Sheet1 上,并且其标题位于第 1 行和 A 列,没有总行数或类似内容。同时假设 Sheet2 为空白(因为这是我将推送数据的地方)
Sub get_sparse_data()
xrow = 2
For irow = 2 to Sheet1.UsedRange.Rows.count
For icol = 2 to Sheet1.UsedRange.columns.count
If Len(Sheet1.cells(irow, icol).value)=0 Then
Else
Sheet2.cells(xrow, 1).formula = Sheet1.cells(irow, 1).value 'this is the row title
Sheet2.cells(xrow, 2).formula = Sheet1.cells(1, icol).value 'this is the column title
Sheet2.cells(xrow, 3).formula = Sheet1.cells(irow, icol).value 'this is the value from the table
xrow = xrow + 1
End if
Next icol
Next irow
end Sub
然后,您可以透视 Sheet2 上的结果数据(但首先确保第 1 行中有列名,否则它将不起作用)。
请注意,您可以将 Sheet1.UsedRange.rows.count 和 Sheet1.UsedRange.Columns.Count 更改为您想要循环的行数/列数。