Excel VBA中带有多个IF和FOR语句的SUMPRODUCT-错误

Excel VBA中带有多个IF和FOR语句的SUMPRODUCT-错误,excel,vba,excel-formula,sumproduct,Excel,Vba,Excel Formula,Sumproduct,我试图在VBA中使用以下SUMPRODUCT公式: =SUMPRODUCT(--('Sheet 1'!$C$2:$C$10="OK"),(MONTH(Sheet1!$A$2:$A$10)=MONTH($B3))*(YEAR(Sheet1!$A$2:$A$10)=YEAR($B3))*(MONTH(Sheet1!$B$2:$B$10)=MONTH(C$2))*(YEAR(Sheet1!$B$2:$B$10)=YEAR(C$2))) 我的工作手册与航班预订有关,它由两张纸组成,第一张和第二张。具体

我试图在VBA中使用以下
SUMPRODUCT
公式:

=SUMPRODUCT(--('Sheet 1'!$C$2:$C$10="OK"),(MONTH(Sheet1!$A$2:$A$10)=MONTH($B3))*(YEAR(Sheet1!$A$2:$A$10)=YEAR($B3))*(MONTH(Sheet1!$B$2:$B$10)=MONTH(C$2))*(YEAR(Sheet1!$B$2:$B$10)=YEAR(C$2)))
我的工作手册与航班预订有关,它由两张纸组成,第一张和第二张。具体而言:

表1包括样本数据:

| Booking date | Check-in date | Status |
|--------------|---------------|--------|
| 25-Sep-18    | 18-May-19     | OK     |
| 26-Sep-18    | 05-Jul-19     | OK     |
| 26-Sep-18    | 18-Jun-19     | OK     |
| 01-Oct-18    | 19-Jun-19     | OK     |
| 01-Oct-18    | 18-May-19     | OK     |
| 02-Oct-18    | 19-Apr-19     | OK     |
| 03-Oct-18    | 18-May-19     | CL     |
| 06-Oct-18    | 14-May-19     | CL     |
| 07-Oct-18    | 17-Jun-19     | OK     |
而表2包括与
SUMPRODUCT
公式相关的分析输出:

| Booking/Check-in | Apr-19 | May-19 | Jun-19 | Jul-19 |
|------------------|--------|--------|--------|--------|
| Sep-18           |        | 1      | 1      | 1      |
| Oct-18           | 1      | 1      | 2      |        |
我通过遵循@Rosetta和@Foxfire以及Burns和Burns的建议修复了错误“13”-类型不匹配。我还按照@JvdV的建议添加了其他内容。现在代码如下所示:

    Dim bk As Worksheet
    Set bk = Worksheets("Sheet 1")

    For Z = 2 To 3
        For j = 2 To 5
            For i = 2 To 10
        If bk.Cells(i, 3).Value = "OK" Then
        If Month(bk.Cells(i, 1)) = Month(Cells(Z, 1)) Then
        If Year(bk.Cells(i, 1)) = Year(Cells(Z, 1)) Then
        If Month(bk.Cells(i, 2)) = Month(Cells(1, j)) Then
        If Year(bk.Cells(i, 2)) = Year(Cells(1, j)) Then

        Range(Cells(j, Z)).Value = Range(Cells(j, Z)).Value + 1

Else Next i
        End If
        End If
        End If
        End If
        End If

    Next j
    Next Z

    End Sub

现在我得到了下一个不带For的
编译错误。有什么想法吗?

您也可以使用
.Evaluate
SUMPRODUCT
公式中获得结果,因为您希望将公式集成到VBA中。我已经重写了你的一些代码,使它更具动态性。这样,您可以在sheet1上拥有动态数量的行,在sheet2上拥有动态数量的行和列。请参阅下面的代码:

Sub Test()

Dim rng1 As Range, rng2 As Range, rng3 As Range
Dim lr1 As Long, lr2 As Long, lc As Long, x As Long, y As Long

With ThisWorkbook.Sheets("Sheet1")
    lr1 = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set rng1 = .Range("A2:A" & lr1)
    Set rng2 = .Range("B2:B" & lr1)
    Set rng3 = .Range("C2:C" & lr1)
End With

With ThisWorkbook.Sheets("Sheet2")
    lr2 = .Cells(.Rows.Count, "A").End(xlUp).Row
    lc = .Cells(1, .Columns.Count).End(xlToLeft).Column
    For x = 2 To lc
        For y = 2 To lr2
            .Cells(y, x).Value = .Evaluate("=SUMPRODUCT(--(Sheet1!" & rng3.Address & "=""OK""),((MONTH(Sheet1!" & rng1.Address & ")=" & Month(.Cells(y, 1)) & ")*(YEAR(Sheet1!" & rng1.Address & ")=" & Year(.Cells(y, 1)) & "))*((MONTH(Sheet1!" & rng2.Address & ")=" & Month(.Cells(1, x)) & ")*(YEAR(Sheet1!" & rng2.Address & ")=" & Year(.Cells(1, x)) & ")))")
        Next y
    Next x
End With

End Sub
这将删除所有这些
,用于。。。下一步
通过sheet2上的所有行和列循环动态循环


我希望你明白发生了什么事。如果您有问题,请随时提问。确保相应地调整图纸名称

欢迎来到SO。我不断得到运行时错误“13”-类型不匹配。哪里哪一行?第1行:将bk标注为工作表,。。。否“s”您已将
bk
定义为
工作表
,一个集合,而不是单个对象。稍后您将设置bk=工作表(“工作表1”)
因此
bk
应定义为
工作表
谢谢!虽然Excel没有响应,但代码已开始运行。在您看来,代码的其余部分似乎还可以?您还没有声明第二个工作表。如果此行上有错误的工作表,会发生什么情况
如果月份(bk.Cells(i,1))=月份(Cells(Z,1)),则
?非常感谢!工作起来很有魅力。让我再加上一些参数。