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

以下工作很好(感谢这个社区的亲切协助!)

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

这个function将复制一个input范围到一个完美的输出。 但是,当我对inputArray执行一些操作时,数组看起来很完美,但是在Excel中,只有数组的第一个值会打印到所有单元格。 在这个例子中,我从一些inputstring中parsing出一个数字。

input范围:

 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 

通过debugging器运行,strippedArray分别在位置strippedArray(1)/(2)/(3)中包含Variant / Integer值1,10,100。 问题是我在Excel中input的范围只包含strippedArray(1),据我所知。

谢谢!

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

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