我在不同的 Excel 表中有不同的表,并且所有表中都存在一个键值(员工 ID),我需要根据员工 ID 对不同表中的元素求和
Sheet 1 Sheet 2
A B A B
ID Value ID Value
1 100 1 500
我需要对 100+500 进行求和,因为它是同一个员工 ID 1
答案1
答案2
正如 pat2015 所说,在给出正确答案之前需要回答几个问题。
如果 ID 不重复,而您只想在单元格中显示总和,则可以vlookup
对每个表执行一个简单的操作。假设您将要查找的 ID 放在单元格 A1 中,然后在要显示总和的位置放置以下内容:
=SUM(VLOOKUP(A1,Table1,2,0),VLOOKUP(A1,Table2,2,0))
并为每张桌子配备齐全。
Sheet1!Table1
不必使用,因为 Excel 无论如何都会找到该表。但绝对引用需要它。
如果单个表中有多个相同 ID 的条目,它们将被遗漏。
如果您也想捕获它们,我建议改用 VBA。如果这对您有用的话。
编辑
如果您在单个表中有或可能有多个相同 ID 的条目,则建议的方法sumif
很有效。三个表的两个示例。
=SUM(SUMIF(Table1[ID],A1,Table1[Value]),SUMIF(Table2[ID],A1,Table2[Value]),SUMIF(Table3[ID],A1,Table3[Value]))
或者直接将 sumifs 相加
=SUMIF(Table1[ID],A1,Table1[Value])+SUMIF(Table2[ID],A1,Table2[Value])+SUMIF(Table3[ID],A1,Table3[Value])
您可以使用整个表作为范围,但最好指定要搜索的列。如果您有多个列,并且您要搜索的值也存在于其他列中,则可能会出现一些奇怪的结果。
与您的示例相结合的新解决方案。
我使用宏来收集所有 ID,然后在结果表中填充表格。代码如下所示:
Sub CollectIDs()
Dim i As Integer
Dim K As Long, ar
K = 1
For Each ar In Array("A", "G", "K")
For i = 1 To 10000
If Worksheets("Building-1").Cells(i, ar).Value <> "" Then
If IsNumeric(Worksheets("Building-1").Cells(i, ar).Value) Then
Worksheets("Result").Cells(K + 1, "A").Value = Worksheets("Building-1").Cells(i, ar).Value
K = K + 1
End If
End If
Next i
Next ar
For Each ar In Array("A", "I")
For i = 1 To 10000
If Worksheets("Building-2").Cells(i, ar).Value <> "" Then
If IsNumeric(Worksheets("Building-2").Cells(i, ar).Value) Then
Worksheets("Result").Cells(K + 1, "A").Value = Worksheets("Building-2").Cells(i, ar).Value
K = K + 1
End If
End If
Next i
Next ar
Worksheets("Result").Range("Table1").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End Sub
为了使代码更改适应文档,请编辑工作表名称以适应更改,并编辑数组以适合包含 ID 的列。
请不要在这些列中输入任何其他数字,因为代码会将它们作为 ID。
然后,在结果表中,值列包含代码:
=SUMIF(Table2[ID];A2;Table2[Value]) + SUMIF(Table3[ID];A2;Table3[Value]) + SUMIF(Table4[ID];A2;Table4[Value])+ SUMIF(Table5[ID];A2;Table5[Value]) + SUMIF(Table6[ID];A2;Table6[Value])
SUMIF
每张桌子 都有一个。确保它包含所有表的正确名称,或者如果您使用范围,那么当然包含正确的范围。
请注意!
我的语言设置强制我在函数中使用分号 (;) 而不是逗号 (,)。请更改此设置以适合您的设置。
这是我的例子,希望它适合您的需要。
https://drive.google.com/open?id=0B_8icTMsheWfcXpwc0NLOGJvdmc