【问题标题】:Using wildcard in SUMIF function in VBA在 VBA 的 SUMIF 函数中使用通配符
【发布时间】:2014-10-31 19:32:32
【问题描述】:

我有两个工作表 Sheet1 和 Sheet2。在 Sheet1 上,我有一个 ItemNumber 列表,我需要用库存水平(东列)填充该列表。我必须从 Sheet2 的 East 列中提取信息。如果 sheet2 上的 ItemNumber 列包含来自 sheet1 的 ItemNumber 字符串的值,则将 Sheet1 上 East 的所有数量相加。我尝试在带有通配符的 VBA 代码中使用 SumIf 函数,但我的所有值在 Sheet1 上都返回为 0。有人可以建议如何纠正这个问题吗?非常感谢

在 Sheet1 上:

Item Number East
WidgetA 
WidgetB 
WidgetC 
WidgetD 

Sheet2 数据:

Item Number East
WidgetA-1         1
WidgetA-2         2
WidgetA-3         3
WidgetB           2
WidgetB-1         4
WidgetC           1
WidgetD-1     1 
WidgetD-2         1

我的代码:

Dim i as Integer
Dim ItemNumber, East As Double

Do While Sheet1.Cells(i, 1).Value <> ""

ItemNumber = Sheet1.Cells(i, 1).Value
East = Application.WorksheetFunction.SumIf(Sheet2.Range("B:B"), """*" & ItemNumber & "*""", Sheet2.Range("Q:Q"))
Sheet1.Cells(i, 4).Value = East


i = i + 1


Loop

【问题讨论】:

    标签: vba excel wildcard


    【解决方案1】:

    不确定您为什么要在您所在的范围内进行搜索,因为这些范围与您提供的示例不匹配。我更改了范围,将 ItemNumber 声明为 String 而不是 Double,并将“i”的起始值设为 2 以说明列标题。您似乎在通配符之前还有额外的引号。希望这会有所帮助。

    Dim i As Integer
    Dim ItemNumber As String
    Dim East As Double
        i = 2
        Do While Sheet1.Cells(i, 1).Value <> ""
            ItemNumber = Sheet1.Cells(i, 1).Value
            East = Application.WorksheetFunction.SumIf(Sheet2.Range("A:A"), "*" & _
                 ItemNumber & "*", Sheet2.Range("B:B"))
            Sheet1.Cells(i, 2).Value = East
            i = i + 1
        Loop
    

    【讨论】:

    • 只需几秒钟!唷,那是一个接近的。我想说我们都在做某事,因为我们给出的答案几乎是相同的。
    • 我只保留了原始范围(尽管给出了示例,但我认为这是他的详细信息所在)
    • 老实说,我也这么认为。但为了教导未来偶然发现这一点的谷歌搜索者,消除歧义将使大众受益。
    • 鉴于 OP 的列与提供的答案不同,是否会有任何混淆?
    • 我的回答中的第一句话应该避免任何混淆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    相关资源
    最近更新 更多