如何将 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。还要在Smalllarge前面加上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 用户定义函数中的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从对象传递到javascript中的新数组?

如何将数组数据从 vuejs 传递到 laravel api 控制器

Firestore:如何从数组中检索数据并将其传递到表中?

如何将数据从父刀片传递到包含的模式?

如何将数据从闪亮的应用程序写入exce / csv文件?恰好我想将股票价格值的值写入excel / csv文件

如何使用 axios 将数组从 javascript 传递到 laravel 控制器