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

问题描述 投票:-3回答:2

我想在范围“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上尝试的代码。我修改了一点,因为我最初发现的代码没有得到我预期的结果。

excel vba excel-vba
2个回答
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"))

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
© www.soinside.com 2019 - 2024. All rights reserved.