arrays - 接受范围作为数组参数

标签 arrays vba excel

我有一个函数,它接受一个数组并输出另一个数组。它的内部结构比下面的玩具示例更复杂。

Public Function divide_by_2_5(ByRef coeffs() As Double) As Double()
    Dim Columns As Integer
    Columns = UBound(coeffs, 2) - LBound(coeffs, 2) + 1
    Dim output() As Double
    ReDim output(1 To 1, 1 To Columns)
    Dim i As Integer
    For i = 1 To Columns
        output(1, i) = coeffs(1, i) / 2.5
    Next i
    divide_by_2_5 = output
End Function

这是我看到的:

enter image description here

我希望第二行包含函数的输出。在这种情况下,这将是 0.4, 0.4, 0.4, 0.4 .

不幸的是,我收到了 #VALUE!错误,我不知道如何调试。

一些澄清:显然可以让相同的函数返回一个数组或将其写入电子表格(使用 Ctrl - Shift - Enter )。以类似的方式,输入是否可能来自范围或数组?

最佳答案

Public Function divide_by_2_5(coeffs As Variant) As Double()
    Dim v() As Variant
    If TypeName(coeffs) = "Range" Then
        v = coeffs.Value
    Else
        v = coeffs
    End If
    Dim output() As Double
    ReDim output(LBound(v, 1) To UBound(v, 1), LBound(v, 2) To UBound(v, 2))
    Dim r As Long
    Dim c As Long
    For r = LBound(v, 1) To UBound(v, 1)
        For c = LBound(v, 2) To UBound(v, 2)
            output(r, c) = v(r, c) / 2.5
        Next
    Next
    divide_by_2_5 = output
End Function

将其称为 UDF 的示例如下:
{=divide_by_2_5(C2:F2)}

使用 Range 从 VBA 调用它的示例可能是:
Dim v As Variant
v = divide_by_2_5(Worksheets("Sheet1").Range("C2:F2"))

使用数组从 VBA 调用它的示例可能是:
Sub test()
   Dim x(1, 4) As Variant
   Dim v As Variant
   x(1, 1) = 6
   x(1, 2) = 7
   x(1, 3) = 8
   x(1, 4) = 9
   v = divide_by_2_5(x)
   MsgBox v(1, 3)
End Sub

关于arrays - 接受范围作为数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39439890/

相关文章:

excel - 从用户表单更新多个工作表

excel - 如何插入新行 - xlwings

javascript - 如何使用 axios 将数组从 javascript 传递到 Laravel Controller

vba - 将已读项目从文件夹移回收件箱

vba - 根据 Excel 单元格中的值设置 RGB 颜色

javascript - RegEx 在 VBA 和 JavaScript 中的处理方式有何不同?

Java-查找二维数组中的最大数字

c - 需要理解二维数组的输出

java - Java中字符串操作的数组

excel - 从同一文本字符串中提取引号中的多个值