如何将 A1:A500 等数组数据传递到 Excel 用户定义函数中
Posted
技术标签:
【中文标题】如何将 A1:A500 等数组数据传递到 Excel 用户定义函数中【英文标题】:How to pass array data such as A1:A500 into a Excel user defined function 【发布时间】:2017-09-15 20:56:00 【问题描述】:我正在尝试将变量数组传递给 Excel 用户定义函数。我的 Excel VBA 附在下面,我希望我可以将 A1: A100 等范围传递到当前变量 Data 中,然后像普通的 excel 公式一样对其进行操作。任何帮助将不胜感激。
Function LowerB_4n_2(inputrange As Range) As Double
Dim myArray As Variant
Data = inputrange.Value
LowerB_4n_2 = Small(Data, (Round((((0.4 * (Count(Data))) - 2)), 0)))
End Function
Function UpperB_4n_2(inputrange As Range) As Double
Dim myArray As Variant
Data = inputrange.Value
UpperB_4n_2 = Large(Data, (Round((((0.4 * Count(Data)) - 2)), 0)))
End Function
Function Width4n_2(inputrange As Range) As Double
Dim myArray As Variant
Data = inputrange.Value
Width4n_2 = (Large(Data, (Round((((0.4 * Count(Data)) - 2)), 0))) -
(Small(Data, (Round((((0.4 * Count(Data)) - 2)), 0)))))
End Function
【问题讨论】:
删除Dim myArray as Variant
(无论如何你永远不会使用它)。和Data = inputrange.value
。并在您的公式中将Data
替换为inputrange
。还要在Small
和large
前面加上Application.WorksheetFunction
【参考方案1】:
Large、Small 和 Count 都是 Application.WorksheetFunction
的属性,因此它们需要将其设置为其父级。
只是你的第一个:
Function LowerB_4n_2(inputrange As Range) As Double
Dim data() As Variant
data = inputrange.Value
LowerB_4n_2 = Application.WorksheetFunction.Small(data, (Round((((0.4 * (Application.WorksheetFunction.Count(data))) - 2)), 0)))
End Function
根据 cmets,
由于 Large 和 Small 已经精简,没有理由将范围值传递到数组中。我们可以只引用公式中的范围对象:
Function LowerB_4n_2(inputrange As Range) As Double
LowerB_4n_2 = Application.WorksheetFunction.Small(inputrange, (Round((((0.4 * (Application.WorksheetFunction.Count(inputrange))) - 2)), 0)))
End Function
Function UpperB_4n_2(inputrange As Range) As Double
UpperB_4n_2 = Application.WorksheetFunction.Large(inputrange, (Round((((0.4 * (Application.WorksheetFunction.Count(inputrange))) - 2)), 0)))
End Function
Function Width4n_2(inputrange As Range) As Double
With Application.WorksheetFunction
Width4n_2 = .Large(inputrange, (Round((((0.4 * .Count(inputrange)) - 2)), 0)) - .Small(inputrange, (Round((((0.4 * .Count(inputrange)) - 2)), 0))))
End With
【讨论】:
看起来它可以工作,但我肯定会废弃变体数组,正如问题 cmets 中所建议的那样。除其他外,Application.WorksheetFunction.Count(data)
变为 inputRange.Count
@CallumDA 除了Application.WorksheetFunction.Count(data)
只计算数值,Range.Count
计算单元格
好点。我怀疑 OP 只有数值,但仍然同意最好保持原样。以上是关于如何将 A1:A500 等数组数据传递到 Excel 用户定义函数中的主要内容,如果未能解决你的问题,请参考以下文章
如何将数组数据从 vuejs 传递到 laravel api 控制器