Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 尝试定义任何类型的函数时未定义函数_Excel_Vba - Fatal编程技术网

Excel 尝试定义任何类型的函数时未定义函数

Excel 尝试定义任何类型的函数时未定义函数,excel,vba,Excel,Vba,我试图得到两个范围之间的绝对差,如果它们有相同数量的元素 尝试将重写作为私有和正常功能,但不起作用 Function absDiff(rng1 As Range, rng2 As Range) As Single Dim rng1Count As Long, rng2Count As Long rng1Count = rng1.Count rng2Count = rng2.Count If rng1Count = rng2Count Then absDiff = SumProduct

我试图得到两个范围之间的绝对差,如果它们有相同数量的元素

尝试将重写作为私有和正常功能,但不起作用

Function absDiff(rng1 As Range, rng2 As Range) As Single
Dim rng1Count As Long, rng2Count As Long

rng1Count = rng1.Count
rng2Count = rng2.Count

If rng1Count = rng2Count Then
    absDiff = SumProduct(Abs(rng1 - rng2))
Else
    MsgBox "Error, ranges are not the same size"
End If
End Function
我希望这个函数能够获得绝对的差异,但它甚至没有运行,它是在module1上定义的,我试图将它调用到同一个模块中的子模块

Sub calcAbsdiff()
Dim rng1 As Range, rng2 As Range

Set rng1 = Range("A1:A10")
Set rng2 = Range("B1:B10")

rng1 = WorksheetFunction.RandBetween(1, 100)
rng2 = WorksheetFunction.RandBetween(1, 100)

MsgBox "The sum of the absolute difference is " & absDiff(rng1, rng2)

End Sub

我理解的是,试试这个:

Public Function absDiff(rng1 As Range, rng2 As Range) As Single
Dim rng1Count As Long, rng2Count As Long, i As Long

rng1Count = rng1.Count
rng2Count = rng2.Count
absDiff = 0

If rng1Count = rng2Count Then
    For i = 1 To rng1Count
        absDiff = Abs(rng1(i).Value2 * rng2(i).Value2) + absDiff
    Next i
Else
    MsgBox "Error, ranges are not the same size"
    absDiff = "Error"
End If
End Function
似乎他的问题是,您直接对范围进行的计算不起作用,所以只需循环sum乘积即可。你会得到一个#值!如果范围不匹配,则会导致错误。(如果不是,则为0)

检查一个是否足以完成该功能


希望有帮助

您是否在调试模式下单步执行了代码?会发生什么?执行
calcAbsdiff
中的哪些语句?调用
absDiff
时(在调试模式下)出现任何错误消息?您希望rng.count返回什么?总计还是您正在尝试计数单元格?当我尝试在调试模式下执行时,它会立即显示上面提到的错误消息我正在尝试计数单元格以设置if语句@JvdVIn您的公式
Abs(rng1-rng2)
因为
rng1
rng2
是范围(因此没有数值…)将不起作用。你想干什么?