我想在范围“B17:B29”中查找字符串“GAS CYLINDERS”,如果单元格包含给定的字符串,请转到该单元格的同一行的“H”列(来自“B”)然后包含字符串,选择它。我希望它循环到第29行并继续选择符合条件的单元格并获取所有选定单元格的值的总和... 最后,将总数粘贴到另一个单元格(“M22”)
中我试过的代码:
ROW_NUMBER = 16
ROW_NUMBER = ROW_NUMBER + 1
PARTICULARS = Sheets("Invoice").Range("B" & ROW_NUMBER)
XXX = InStr(PARTICULARS, "GAS CYLINDER")
For Each XXX In Range("B17: B29")
If MYRNG = Empty And InStr(PARTICULARS, "GAS CYLINDER") > 1 Then
MYRNG = XXX.Address
ElseIf InStr(PARTICULARS, "GAS CYLINDER") > 1 Then
MYRNG = MYRNG & "," & XXX.Address
End If
Next XXX
Range(MYRNG).Select
Selection.Offset(0, 6).Select
图片供参考
PS:我对vba很新。我尝试在youtube和google上尝试的代码。我修改了一点,因为我最初发现的代码没有得到我预期的结果。
答案 0 :(得分:2)
为什么使用代码而不是公式?
在单元格M22中:
=SUMIF(B17:B21, "*Gas Cylinder*", H17:H21)
比较并显示错误消息
=IF(SUMIF(B17:B21, "*Gas Cylinder*", H17:H21)<>N22, "ERROR: ...", "")
或者在VBA保存代码中在M22中测试为true:
=SUMIF(B17:B21, "*Gas Cylinder*", H17:H21)<>N22
答案 1 :(得分:1)
首先,VBA中很少需要Select
件事。
您想要计算一个数字并将其放入单元格中,因此请简化您的代码:
Dim XXX As Range
Dim myTotal As Long
For Each XXX In Range("B17: B29")
If InStr(XXX.Value, "GAS CYLINDER") > 0 Then
myTotal = myTotal + XXX.Offset(0, 6).Value
End If
Next XXX
Range("M22").Value = myTotal
或者您可以使用Excel的SumIf
功能:
Range("M22").Value = Application.SumIf(Range("B17:B29", "*GAS CYLINDER*", Range("H17:H29"))