VBA UDF Variant/Integer и Variant/String массивы печатают только первое значение в выходные ячейки

Следующее прекрасно работает (благодаря доброй помощи этого сообщества!)

    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 содержит значения Variant/Integer 1,10100 в местах strippedArray(1)/(2)/(3) соответственно. Проблема в том, что диапазон, в который я ввожу массив в Excel, насколько я могу судить, содержит только strippedArray (1).

Спасибо!

1 ответ

Решение

Ваш strippedArray массив, должен быть двухмерным, если вы выводите обратно в лист / диапазон Excel (я сделал предположение, что вы запускаете это как формулу массива). Сделайте следующие изменения:

ReDim strippedArray(1 To inputHeight, 1 To 1)
...
strippedArray(i, 1) = currentInputAsInt
Другие вопросы по тегам