Преобразовать диапазон и вернуть его из пользовательской функции

Я пытаюсь написать очень простую UDF, которая будет принимать входной диапазон и возвращать другой диапазон. Каждая ячейка выходного диапазона должна быть равна ячейке входного диапазона плюс 1. Вот что у меня есть

Public Function Addone(rng As Range) As Range

    Dim i As Integer, N As Integer
    N = rng.Count

    For i = 1 To N
        Addone.cells(1,i) = rng.cells(1,i) + 1
    Next i

End Function

Предположим, что диапазон «A1:C1» содержит числа 1,2,3. Затем я перехожу на рабочий лист, выбираю диапазон ячеек (выходной диапазон «A2: C2»), затем ввожу Addone(A1:C1) и нажимаю Ctrl + Shift + Enter. Однако выходные ячейки заполнены #VALUE.

Я проверил другие ответы здесь и здесь, но не смог заставить его работать в моем случае. Любая помощь приветствуется.


person linuxfever    schedule 26.05.2017    source источник


Ответы (1)


Вы не можете определить вывод как диапазон и оценить его в ячейке, чтобы изменить тип вывода на двойной массив. Внутри функции определяют временный массив, переопределяют его размер на основе N и затем присваивают возвращаемому массиву. Следующее должно сделать. Дайте мне знать, если это решит.

Public Function Addone2(rng As Range) As Double()

    Dim temp() As Double
    Dim i As Integer, N As Integer
    N = rng.Count
    ReDim temp(1 To N) As Double
    For i = 1 To N
        temp(i) = rng.Cells(1, i) + 1
    Next i
    Addone2 = temp
End Function
person MrC    schedule 26.05.2017