基本上,我有一个巨大的数据列表,其中包含多行唯一 ID(每个 ID 可以出现在多行中)。然后,我有多个变量,这些变量没有特定的顺序,与一个值相关联。我想将所有内容合并到一行中,每个唯一 ID 都有一列,每个变量都有一列,还有值的总和。
在此处查看虚拟数据集http://www.filedropper.com/help_1
最终格式应为
唯一 ID 变量_X 变量_Y 变量_Z
1
2
3
4
5
相关列中每个变量的总和
我尝试过几种方法,例如转置或尝试将变量连接到唯一 ID。手动使用过滤器可以轻松完成此操作,但我有 1000 个唯一 ID,我想加快此过程。虽然我正在学习 Python 和 VBA,但我还远不能解决这个问题!
非常感谢!!
答案1
我对一些闲置的旧代码进行了一些编辑。您可以尝试一下,看看是否有效:
Sub IDsort()
Dim list As Range, c As Range, nxt As Long
Set list = ActiveSheet.Range(Range("A2"), Range("A65000").End(xlUp))
For Each c In list
If Not ActiveSheet.Range("E" & Cells(Rows.Count, 5).End(xlUp).Row).Value = c.Value Then nxt = Cells(Rows.Count, 5).End(xlUp).Offset(1, 0).Row
Range("E" & nxt).Value = c
Select Case UCase(c.Offset(0, 1))
Case "X"
Range("F" & nxt).Value = Range("F" & nxt).Value + c.Offset(0, 2)
Case "Y"
Range("G" & nxt).Value = Range("G" & nxt).Value + c.Offset(0, 2)
Case "Z"
Range("H" & nxt).Value = Range("H" & nxt).Value + c.Offset(0, 2)
End Select
Next c
End Sub
这将遍历列表,并将每个变量的所有数字相加,然后将它们打印到列中E
。H
这
要求列表按 ID 排序,因为只需检查每行是否具有相同的 ID,而不是检查具体是哪个 ID。
怎么运行的:
因此,首先,我们将list
变量设置为第一行值到最后一行。
然后我们循环遍历所有单元格for each
。在这种情况下,变量c
将返回单元格的值。
然后If
检查列中的前一个条目是否E
与当前 ID 相同,如果不同,则nxt
指向下一个空行。
这应该FALSE
在第一次运行时返回(我假设是一个空列表),否则代码将失败,因为变量nxt
没有值。
我认为这不会成为问题,但可以通过nxt = 2
在循环之前声明来轻松修复。
然后它将 ID 放在 Column 中E
,并根据变量将列中的值添加C
到F
或G
中H
。
这是我在您的示例工作簿上运行它的结果: