我正在尝试创建一个函数 MonstersInLevel(),它根据第一列的值过滤我的“LevelMonsters”命名范围的第二列。范围的第一列表示游戏关卡 ID,第二列表示出现在该关卡中的怪物 ID。 Here's what my range looks like.
如果我调用 MonstersInLevel(2),我希望该函数返回一个由“2”、“3”和“4”组成的范围。
Function MonstersInLevel(level As Integer) As Range
MonstersInLevel = Application.WorksheetFunction.Filter(Range("LevelMonsters").Columns(2), Range("LevelMonsters").Columns(1) = level)
End Function
我得到:A value used in the formula is of the wrong data type
我将 FILTER 函数用作 Excel 公式。我假设 FILTER 标准的 Excel 和 VBA 语法存在一些差异。
最佳答案
我自己刚遇到这个问题,想发布我的解决方法。
我们需要返回 True
的数组/False
到工作表功能。为此,我创建了一个函数,该函数采用二维数组、想要的列和要比较的值。然后它返回必要的True
的二维单列数组。/False
.
Function myeval(arr() As Variant, clm As Long, vl As Variant) As Variant()
Dim temp() As Variant
ReDim temp(1 To UBound(arr, 1), 1 To 1)
Dim i As Long
For i = 1 To UBound(arr, 1)
temp(i, 1) = arr(i, clm) = vl
Next i
myeval = temp
End Function
所以在这种特殊情况下,它将被称为:Function MonstersInLevel(level As Integer) As Variant
MonstersInLevel = Application.WorksheetFunction.Filter(Range("LevelMonsters").Columns(2), myeval(Range("LevelMonsters").Value, 1, level),"""")
End Function
关于excel - WorksheetFunction.Filter 中的数据类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62206989/