具有多个字符串条件的VBA中的SUMIFS [英] SUMIFS in VBA With Multiple String Criteria

查看:583
本文介绍了具有多个字符串条件的VBA中的SUMIFS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个我写的Sub,其中包含一个SUMIFS语句。当yearRange匹配gEvent值和yearRange.Offset(0,2)匹配gEvent.Offset(0,2)值时,我想要求和总和一个列(yearRange.Offset(0,i + 3))。我已经尝试谷歌搜索问题,并检查了MSDN网站(这不是很描述性),不能使该功能工作。我唯一可能的想法是我使用的标准是字符串而不是整数。所以gEvent.Value可能是ABCD,而gEvent.Offset(0,2)可能是DEFG。



当我尝试运行代码时,它正在破解:

  itemPY = Application.WorksheetFunction.SumIfs(yearRange.Offset(0,i + 3),yearRange.Value,=& gEvent.Value&,yearRange.Offset(0,2),= & gEvent.Offset(0,2).Value&)

而且错误我收到的是:
运行时错误'424':
需要对象



这是完整形式的子代:

  Sub CombineData()

Dim eventSheet As Worksheet
Dim yearSheet As Worksheet
Dim yearRange As Range
Dim eventRange As Range
Dim gYear As Range
Dim gEvent As Range
Dim i As Integer
Dim itemCount As Integer
Dim itemPY As整数

设置eventSheet = ThisWorkbook.Sheets(previousEvent)
设置yearSheet = ThisWorkbook.Sheets(previous12)
设置eventRange = eventSheet.Range(A3 eventSheet.Range(A3)。End(xlDown))
设置yearRange = yearSh eet.Range(A4,yearSheet.Range(A4)。End(xlDown))


对于每个gEvent在eventRange

i = 0

gEvent.Offset(0,16).Value = gEvent.Value
gEvent.Offset(0,17).Value = gEvent.Offset(0,1).Value
gEvent.Offset(0,18).Value = gEvent.Offset(0,2).Value


itemCount = Application.WorksheetFunction.CountIf(yearRange,gEvent.Value)

对于i = 0到11

itemPY = Application.WorksheetFunction.SumIfs(yearRange.Offset(0,i + 3),yearRange.Value,=& gEvent.Value& 0,0,0,0 i).Value = itemPY / Item

下一个i

下一个gEvent


End Sub

我可以得到的任何帮助都会很棒。

解决方案

不需要所有的引用:

  itemPY = Application.WorksheetFunction.SumIfs(yearRange.Offset(0, i + 3),_ 
yearRange,gEvent.Value,_
yearRange.Offset(0,2),gEvent.Offset(0,2).Value)


I have a Sub I am writing that has a SUMIFS statement included in it. I am wanting the sum if to sum a certain column (yearRange.Offset(0,i+3)) when yearRange matches gEvent Value and yearRange.Offset(0, 2) matches gEvent.Offset(0,2) Value. I have tried googling the issue, and checked the MSDN website (which was not very descriptive) and cannot get the function to work. The only possible idea I have is that criteria I am using are Strings rather than Integers. So gEvent.Value may be "ABCD" and gEvent.Offset(0,2) may be "DEFG".

When I try to run the code it is breaking here:

itemPY = Application.WorksheetFunction.SumIfs(yearRange.Offset(0, i + 3), yearRange.Value, "=" & gEvent.Value & """, yearRange.Offset(0, 2), " = " &  gEvent.Offset(0, 2).Value & """)

And the error I am receiving is: Run-time error '424': Object required

Here is the sub in it's complete form:

Sub CombineData()

Dim eventSheet As Worksheet
Dim yearSheet As Worksheet
Dim yearRange As Range
Dim eventRange As Range
Dim gYear As Range
Dim gEvent As Range
Dim i As Integer
Dim itemCount As Integer
Dim itemPY As Integer

Set eventSheet = ThisWorkbook.Sheets("previousEvent")
Set yearSheet = ThisWorkbook.Sheets("previous12")
Set eventRange = eventSheet.Range("A3", eventSheet.Range("A3").End(xlDown))
Set yearRange = yearSheet.Range("A4", yearSheet.Range("A4").End(xlDown))


    For Each gEvent In eventRange

        i = 0

        gEvent.Offset(0, 16).Value = gEvent.Value
        gEvent.Offset(0, 17).Value = gEvent.Offset(0, 1).Value
        gEvent.Offset(0, 18).Value = gEvent.Offset(0, 2).Value


        itemCount = Application.WorksheetFunction.CountIf(yearRange, gEvent.Value)

        For i = 0 To 11

            itemPY = Application.WorksheetFunction.SumIfs(yearRange.Offset(0, i + 3), yearRange.Value, "=" & gEvent.Value & """, yearRange.Offset(0, 2), " = " &  gEvent.Offset(0, 2).Value & """)

            gEvent.Offset(0, 19 + i).Value = itemPY / Item

         Next i

    Next gEvent


End Sub

Any help I could get would be great.

解决方案

No need for all that quoting:

itemPY = Application.WorksheetFunction.SumIfs(yearRange.Offset(0, i + 3), _
                   yearRange,  gEvent.Value, _
                   yearRange.Offset(0, 2), gEvent.Offset(0, 2).Value)

这篇关于具有多个字符串条件的VBA中的SUMIFS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆