Excel VBA, возврат диапазона пользовательской функции, не работающей со смещением в формуле

Я работаю с диапазонами данных переменной длины. Поэтому, чтобы получить весь диапазон, я сделал короткую функцию Excel:

Function UntilBlank(StartCell As Range)
Dim lastCell As Range
Dim currentCell As Range

Set lastCell = StartCell.Cells(1, 1)
Set currentCell = StartCell.Offset(1, 0)

While Not (IsEmpty(currentCell.Cells(1, 1)))
    Set lastCell = lastCell.Offset(1, 0)
    Set currentCell = lastCell.Offset(1, 0)
Wend

UntilBlank = Range(StartCell.Cells(1, 1), lastCell)

End Function

Это отлично работает в большинстве случаев. Однако когда я пытаюсь использовать эту функцию в OFFSET в качестве первого параметра, OFFSET просто возвращает одну ячейку #VALUE.

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


56
2

Ответы:

Решено

Еще три буквы решат вашу проблему

Set UntilBlank = Range(StartCell.Cells(1, 1), lastCell)

Теперь функция возвращает диапазон вместо массива значений.


Не могли бы вы заменить всю функцию чем-то вроде этого?

Function UntilBlank(StartCell As Range) As Range
    Set UntilBlank = Range(StartCell.Cells(1, 1), StartCell.End(xlDown))
End Function