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