基于单元格中部分信息的求和(Microsoft Excel)
凯西(Kathy)有一个工作表,其中包含仓库中所有零件的信息。在此工作表中,零件号在A列中使用格式12345 XXX显示,其中XXX表示位置代码。这意味着她可以在工作表上有多个相同零件号的条目,但是每个条目代表该零件的不同位置。凯西(Kathy)需要一个公式,求和与每个零件号关联的值,而不管其位置代码如何。因此,她需要一种求和与零件12345 ABC,12345 DEF,12345 GHI等有关的数量列的方法。
她需要一种方法来做到这一点,而又不会将位置代码拆分到其他列中。
获得所需答案的方法不只一种。对于本技巧中的示例,假设部件号在A列中(如Kathy所指示),并且每个部件的数量均在B列中。仅基于一个列A中每个单元格的一部分。此外,您可以在单元格D2中放入所需的部件号(减去位置代码)。
第一种可能的解决方案是以这种方式使用SUMPRODUCT函数:
=SUMPRODUCT(--(VALUE(LEFT(A2:A49,FIND(" ",A2:A49)))=D2),B2:B49)
此公式检查范围A2:A49中的值。您应该确保该范围反映了您实际数据的范围。如果您对公式进行一般化以使其查看A和B的所有列(如在A:A和B:B中一样),则会收到#VALUE错误,因为它试图将公式应用于列中的空单元格。
通过使用如下数组公式,您可以获得类似的结果:
=SUM(B:B*(LEFT(A2:A49,5)=TEXT(D2,"@")))
再次记住,这是一个数组公式,因此您需要通过按Shift + Ctrl + Enter进行输入。还要注意,此公式将D2中的值转换为文本以进行比较。在上一个公式中未执行此操作,因为在那里使用VALUE函数将从A列中选取的子字符串转换为数字值。
您还可以使用DSUM函数构造一个工作公式。假设部件号(A列)在单元格A1中具有列标题。
将此列标题(例如“ Part Num”)复制到工作表中的另一个单元格,例如单元格D1。在单元格D2中,输入零件编号(不带其位置代码),然后输入星号。例如,您可以在单元格D2中输入“ 12345 *”(不带引号)。建立该规范后,您可以使用以下公式:
=DSUM($A$1:$B$49,$B$1,D1:D2)
此公式使用单元格D2中的规范(字符12345后跟任何字符)作为键,应将B列中的值相加。
最后,如果在单元格D2中具有与DSUM方法相同的规范,则可以通过这种方式使用非常简单的SUMIF函数:
=SUMIF(A:A,D2,B:B)
请注意,这种方法允许您在公式中使用完整的列范围(A:A和B:B)。
如果零件编号(在A列中)的格式不一致,那么最好创建一个用户定义的函数来查找数量。例如,如果零件编号的长度不总是相同,或者零件编号可以同时包含数字和字母或破折号,那么使用UDF是可行的方法。以下示例效果很好;它要求值中至少存在一个空格。 (Kathy表示空格将零件号与位置代码分隔开。)
Function AddPrtQty(ByVal Parts As Range, PartsQty As Range, _ FindPart As Variant) As Long Dim Pos As Integer Dim Pos2 As Integer Dim i As Long Dim tmp As String Dim tmpSum As Long Dim PC As Long PC = Parts.Count If PartsQty.Count <> PC Then MsgBox "Parts and PartsQty must be the same length", vbCritical Exit Function End If For i = 1 To PC Pos = InStr(1, Parts(i), " ") Pos2 = InStr(Pos + 1, Parts(i), " ") If Pos2 > Pos And Len(Parts(i)) > Pos + 1 Then tmp = CStr(Trim(Left(Parts(i), Pos2 - 1))) ElseIf Pos > 0 And Len(Parts(i)) > 0 Then tmp = CStr(Trim(Left(Parts(i), Pos - 1))) End If If CStr(Trim(tmp)) = CStr(Trim(FindPart)) Then tmpSum = tmpSum + PartStock(i) End If Next i AddPrtQty = tmpSum End Function
要使用该功能,请在工作表中使用两个范围和所需的部件号进行调用:
=AddPrtQty(A2:A49,B2:B49,"GB7-QWY2")
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(11469)适用于Microsoft Excel 2007、2010、2013和2016。您可以在此处为Excel的较旧菜单界面找到此技巧的版本:
链接:/ excel-Summing_Based_on_Part_of_the_Information_in_a_Cell [基于单元格中部分信息的求和]。