VBA代码,用于查找和选择包含特定字符串的范围内的多个单元格

时间:2017-12-20 20:09:40

标签: excel vba excel-vba

我想在范围“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

图片供参考 Image for reference

PS:我对vba很新。我尝试在youtube和google上尝试的代码。我修改了一点,因为我最初发现的代码没有得到我预期的结果。

2 个答案:

答案 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"))