Excel Sumproduct VBA返回类型不匹配错误

Excel Sumproduct VBA返回类型不匹配错误,excel,vba,sumproduct,Excel,Vba,Sumproduct,我对VBA非常陌生,所以我确信我所缺少的是非常简单的东西,一些经验丰富的人不会忽视 我的代码如下: Sub test_match() Sheets("Course Cascade").Select Dim i As Long Dim r As Long Dim c As Long Dim rfirst As Long Dim cfirst As Long Dim rlast As Long Dim colnum As Long Dim rownum As Long Dim csum As Lon

我对VBA非常陌生,所以我确信我所缺少的是非常简单的东西,一些经验丰富的人不会忽视

我的代码如下:

Sub test_match()
Sheets("Course Cascade").Select
Dim i As Long
Dim r As Long
Dim c As Long
Dim rfirst As Long
Dim cfirst As Long
Dim rlast As Long
Dim colnum As Long
Dim rownum As Long
Dim csum As Long
Dim rowTerm As Long
Dim k As Integer
Dim rabove As Long
Dim ccount As Long
Dim clkup As Long

r = 107: c = 7: rowTerm = 106: ccount = 3: cfirst = 7: csum = c - 1: k = WorksheetFunction.CountIf(Range("e107:e1661"), ">0"): clkup = 5

If Cells(r, ccount) <= WorksheetFunction.SumProduct((Range(Cells(47, c), Cells(74, c))), (--Range("CourseCascadeRow").Value = Cells(r, clkup))) Then
                Cells(r, c) = WorksheetFunction.IfError(WorksheetFunction.Index("CourseCascadeCt", WorksheetFunction.Match(Range(Cells(r, 5)), Range("CourseCascadeCtRow"), 0), _
                WorksheetFunction.Match(Range(Cells(106, c)), Range("CourseCascadeCol"), 0) / WorksheetFunction.Index("CourseCascadeCt", WorksheetFunction.Match(Range(Cells(r, 5)), Range("CourseCascadeCtRow"), 0), _
                WorksheetFunction.Match(Range(Cells(106, c)), Range("CourseCascadeCol"), 0))), 0)
子测试匹配()
工作表(“课程级联”)。选择
我想我会坚持多久
变暗,变长
尺寸c与长度相同
一开始就很长
暗淡的C第一个一样长
迟迟不见
淡色秋千一样长
Dim rownum尽可能长
暗csum与长csum相同
长期的
将k变为整数
暗淡的拉博夫一样长
长帐
暗clkup尽可能长
r=107:c=7:rowTerm=106:ccount=3:cfirst=7:csum=c-1:k=WorksheetFunction.CountIf(范围(“e107:e1661”),“>0”):clkup=5
如果单元格(r,ccount)顺便说一句,将其拆分并限制工作表函数的数量:

Sub kjlkjlkj()

    Dim CCR As Variant
    CCR = Range("CourseCascadeRow")

    Dim vl As Double
    vl = 0#



    Dim i As Long
    For i = 1 To UBound(CCR, 1)
        Dim j As Long
        For j = 1 To UBound(CCR, 2)
            vl = vl + (Cells(47, c) * .Cells(74, c) * (-1 * CBool(CCR(i, j) = Cells(r, clkup))))
        Next j
    Next i


    If .Cells(r, ccount) <= vl Then
        Dim rw As Variant
        rw = Application.Match(Range(Cells(r, 5)), Range("CourseCascadeCtRow"), 0)

        Dim clm As Variant
        clm = Application.Match(Range(Cells(106, c)), Range("CourseCascadeCol"), 0)

        Cells(r, c.value = 0

        If Not (IsError(rw) Or IsError(clm)) Then
            Cells(r, c).Value = Range("CourseCascadeCt").Cells(rw, c).Value / Range("CourseCascadeCt").Cells(rw, c).Value
        End If
    End If

End Sub
Sub-kjlkj()
Dim CCR作为变体
CCR=范围(“CourseCascadeRow”)
双倍调暗vl
vl=0#
我想我会坚持多久
对于i=1至UBound(CCR,1)
Dim j尽可能长
对于j=1至UBound(CCR,2)
vl=vl+(细胞(47,c)*.细胞(74,c)*(-1*CBool(CCR(i,j)=细胞(r,clkup)))
下一个j
接下来我

如果.Cells(r,ccount)vba不喜欢
--
。您需要执行其他操作才能获得
1,0
的数组。您可以循环该范围并创建一个变量数组,然后在sumproduct中使用该数组。您可以尝试:
ActiveSheet.Evaluate(“=INDEX(-”&range(“CourseCascadeRow”)。Address(1,1,xlA1,1)&“=”&Cells(r,clkup)&“,”)在它的位置。您可以考虑将其拆分,以便它是可调试的……它也显示您的分子和分母是相同的,这将导致<代码> 1 <代码>或如果它出错>代码> 0 < /代码> @ @ SktChaner----如果您不介意的话,可以快速提问。“活动表”部分。这在一个模块中,当用户单击另一个工作表上的命令按钮时将运行。Activesheet.Evaluate仍然有效吗?另外,你能解释一下地址部分吗?非常感谢你!嗨,斯科特,我想这已经很接近了,但我还是不太清楚。所以我的问题是……我有7门课程,最初会在不同的时间点提供,但之后会每月提供(或每学期4次)。因此,如果第一门课程在2020年夏季开始提供,这将是第一次提供,并且课程1和2020年夏季的组合应仅返回1,并计算1。但是,这会在每次课程1出现时返回一个值,而不仅仅是计数1。如果你愿意,我可以上传我的整个文件。