我需要写一个Function,实现这样的功能,
Function Func1( rng As Object ) As Variant
输入是在单元格上选定的多个整数,例如12个,通过计算会得到四个Double,
选定B1:B4,键入公式={Func1(A1:A12)},在B1到B4得到四个Double的值,该如何实现,谢谢。
Function Func1( rng As Object ) As Variant
输入是在单元格上选定的多个整数,例如12个,通过计算会得到四个Double,
选定B1:B4,键入公式={Func1(A1:A12)},在B1到B4得到四个Double的值,该如何实现,谢谢。
应该按你的实际情况选择合适的类型,你这儿就应该选为 Double类型。
Function Func1(rng As Range) As Double
' 我不知道你的具体算法是什么,
' 就简单的做了个“数值求和”示例
Dim v As Double
Dim i As Long v = 0#
For i = 1 To rng.Rows.Count
v = v + rng.Cells(i, 1).Value
Next
Func1 = v
End Function一个函数只能返回一个值(返回“数组”时除外,但单元格内不可能显示“数组结果”),
你的B1:B4 也不可能一次就把公式输入了;至少你得先在B1输入公式,然后把公式复制到下面3个单元格。
看样子,实际是你的这“一组数据”,经计算有“4个结果数据,分别显示在4个单元格中”,
那么,其实你就应该给函数增加一个参数,指定它“返回第几个参数”。
这样,你的函数就应该定义为:
Function Func2(rng As Range, w As Long) As String
' 开始一系列的计算…………
' …………
' …………
' …………
' 按 w 值,返回相应的结果
Select Case w
Case 1: Func2 = "第⑴个结果"
Case 2: Func2 = "第⑵个结果"
Case 3: Func2 = "第⑶个结果"
Case 4: Func2 = "第⑷个结果"
Case Else: Func2 = "参数错误"
End Select
End Function
然后,在B1输入公式: =Func2($A$1:$A$12,ROW())
再选定B1单元格,鼠标拖动复制公式到下面几个单元格就行了。
(注意: Func2() 的代码,你自己参照这个改一下)
Excel表格本来就是这个屌样。
如果要想提高效率,那么你就不要用公式。
在表格中画一个按钮,编写对应的事件代码。
如果数据源的位置和区域、输出数据位置都是固定的,那么直接调用事件过程。
简单的说,就是直接在过程中,从A1到A12读取数据,调用DLL进行计算,然后把结果填到B1到B4中。
如果数据源不固定,那么在按钮事件过程中,用输入框询问数据源区域、输出位置。
比如询问数据源,你输入 A1:A12,那么过程中就从A1到A12读取数据;
询问输出位置,你输入B1,那么计算结果从B1开始,连续的4个单元格中输出这4个数据。
其余类推。