我有一张大致如下的表格:
col1 col2 col3 table1
---------------
01| 1 A value1A
02| 1 B value1B
03| 1 Z value1Z
04| 2 Z value2Z
05| 3 A value3A
06| 3 B value3B
07| 3 Z value3Z
08| 4 A value4A
09| 4 B value4B
10| 4 Z value4Z
11| 5 Z value5Z
我想获得这样的东西:
A B Z table2
-------------------------
1| value1A value1B value1Z
2| value2Z
3| value3A value3B value3Z
4| value4A value4B value4Z
5| value5Z
表 2 中单元格 A1 中的公式通过表 1 中单元格 A1 和 B1 中的值计算值 A1,而表 1 中的第二列有时仅填充一个值(在这种情况下始终为 Z)。如果不填充一个值,则始终为 3 个值(A、B 和 Z)。
到目前为止我还没有发现任何方便的东西。
编辑:正如下面的评论中提到的,您还应该知道 value1Z 实际上是 value1A 和 value1B 的总和。
EDIT2:我宁愿不使用数据透视表。就我的情况而言,这不太合适。
答案1
尝试这个简短的宏:
Sub MAIN2()
Dim r As Range, v, numb, letr
Dim i As Long, j As Long
Columns(1).SpecialCells(2).Copy Cells(2, 4)
Columns(4).RemoveDuplicates Columns:=1, Header:=xlNo
Columns(2).SpecialCells(2).Copy Cells(2, 5)
Columns(5).RemoveDuplicates Columns:=1, Header:=xlNo
Set r = Columns(5).SpecialCells(2)
r.Copy
Cells(1, 5).PasteSpecial Transpose:=True
r.Clear
For Each r In Columns(3).SpecialCells(2)
v = r.Value
numb = r.Offset(0, -2).Value
lett = r.Offset(0, -1).Value
For i = 2 To Rows.Count
If Cells(i, 4) = numb Then Exit For
Next i
For j = 5 To Columns.Count
If Cells(1, j) = lett Then Exit For
Next j
Cells(i, j) = v
Next r
End Sub
宏的安装和使用非常容易:
- ALT-F11 打开 VBE 窗口
- ALT-I ALT-M 打开新模块
- 粘贴内容并关闭 VBE 窗口
如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除宏:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要使用 Excel 中的宏:
- ALT-F8
- 选择宏
- 触摸运行
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
必须启用宏才能使其工作!
答案2
您可以只使用数据透视表。
编辑:这是一个可行的示例。不确定为什么这不符合您的要求?https://excel.solutions/wp-content/uploads/2017/11/Guillaume.xlsx
您可以通过手动调整或使用自定义列表轻松更改数据透视表中的列顺序。