VBA UDF Variant/Integer 和 Variant/String Arrays 仅打印第一个值以输出单元格

Posted

技术标签:

【中文标题】VBA UDF Variant/Integer 和 Variant/String Arrays 仅打印第一个值以输出单元格【英文标题】:VBA UDF Variant/Integer and Variant/String Arrays are printing only the first value to output cells 【发布时间】:2012-06-28 14:27:58 【问题描述】:

以下效果很好(感谢这个社区的慷慨帮助!)

    Function RangeToArrayToRange(inputRange as Range) As Variant
            Dim inputArray As Variant
            inputArray = inputRange
            RangeToArrayToRange = inputArray
    End Function

此函数将完美地将输入范围复制到输出。但是,当我对 inputArray 进行一些操作时,数组看起来很完美,但在 Excel 中,只有数组的第一个值会打印到所有单元格。在这个例子中,我从一些输入字符串中解析出一个数字。

输入范围:

ABC=1X:2Y 
ABCD=10X:20Y
ABCDE=100X:200Y

代码:

    Function RangeToArrayToRange(inputRange As Range) As Variant

        Dim inputHeight As Integer
        inputHeight = inputRange.Count

        Dim inputArray As Variant
        inputArray = inputRange

        Dim strippedArray() As Variant
        ReDim strippedArray(1 To inputHeight)

        Dim currentInput As String
        Dim currentInputAsInt As Integer
        Dim i As Integer

        For i = 1 To inputHeight

            currentInput = inputArray(i, 1)
            currentInput = Right(currentInput, (Len(currentInput) - Application.WorksheetFunction.Find("=", currentInput))) 
            'splits out everything left of the "="
            currentInput = Right(currentInput, (Len(currentInput) - Application.WorksheetFunction.Find(":", currentInput)))
            'splits out everything to the right of the ":"
            currentInput = Left(currentInput, Len(currentInput) - 1) 
            'split out the letter to allow int casting
            currentInputAsInt = CInt(currentInput)
            'cast to int
            strippedArray(i) = currentInputAsInt
            'saved

        Next i

        RangeToArrayToRange = strippedArray
    End Function

预期输出:

1
10
100

实际输出:

1
1
1

通过调试器运行,strippedArray 分别在 strippedArray(1)/(2)/(3) 位置包含 Variant/Integer 值 1,10,100。问题是,据我所知,我在 Excel 中输入的数组范围仅包含 strippedArray(1)。

谢谢!

【问题讨论】:

所以您是说数组已正确填写,但只有第一个值打印到所有单元格?但是您打印的代码在哪里?我只看到一个返回数组的函数... 【参考方案1】:

如果您要输出回 Excel 工作表/范围,您的 strippedArray 数组需要是二维的(我假设您将其作为数组公式运行)。进行以下更改:

ReDim strippedArray(1 To inputHeight, 1 To 1)
...
strippedArray(i, 1) = currentInputAsInt

【讨论】:

以上是关于VBA UDF Variant/Integer 和 Variant/String Arrays 仅打印第一个值以输出单元格的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA UDF 自动完成参数

VBA - 优化 UDF(单元颜色计数器)

VBA从添加到工作簿中导入udf模块

自动计算与单元格属性相关的 Excel VBA UDF

如何在 VBA 中使用另一个宏/函数(UDF)调用对象/宏/用户窗体?

VBA UDF 多个数组参数