Сделал пользовательскую функцию, которая предполагается использоваться как функция массива (в столбец) Суть функции в следующем: Создается массив с текстовыми данными. Размерность массива заранее не известна.
Если функцию массива применить к ячейкам А1:А15, а результат функции будет представлять массив из 5 элементов, то в ячейках А6-А15 будет #Н/Д.
1) Как сделать так, что бы вместо #Н/Д ячейки заполнялись, например, прочерком "-". 2) Можно ли сделать проверку к какому диапазону применена функция массива и если этот диапазон меньше, чем массив, которой должна выдать функция, то в последней ячейке диапазона написать "... результат не помещается в заданный диапазон".
[vba]
Код
Public Function excerpt2(X As String)
'функция массива
Dim i, iout As Integer iout = 4
Dim ArrOUT() As Variant ReDim Preserve ArrOUT(iout)
p = "Значение" For i = 1 To iout ArrOUT(i) = p Next i
excerpt2 = Application.Transpose(ArrOUT)
End Function
[/vba]
Сделал пользовательскую функцию, которая предполагается использоваться как функция массива (в столбец) Суть функции в следующем: Создается массив с текстовыми данными. Размерность массива заранее не известна.
Если функцию массива применить к ячейкам А1:А15, а результат функции будет представлять массив из 5 элементов, то в ячейках А6-А15 будет #Н/Д.
1) Как сделать так, что бы вместо #Н/Д ячейки заполнялись, например, прочерком "-". 2) Можно ли сделать проверку к какому диапазону применена функция массива и если этот диапазон меньше, чем массив, которой должна выдать функция, то в последней ячейке диапазона написать "... результат не помещается в заданный диапазон".
[vba]
Код
Public Function excerpt2(X As String)
'функция массива
Dim i, iout As Integer iout = 4
Dim ArrOUT() As Variant ReDim Preserve ArrOUT(iout)
p = "Значение" For i = 1 To iout ArrOUT(i) = p Next i
Dim ArrOUT() As Variant ReDim Preserve ArrOUT(1 To iout) 'задаем нужную размерность массиву p = "Значение" For i = 1 To iout ArrOUT(i) = p Next i If Selection.Rows.Count < iout Then ArrOUT(iout - 1) = "...не помещается" If Selection.Rows.Count > iout Then ReDim Preserve ArrOUT(1 To Selection.Rows.Count) For i = iout + 1 To Selection.Rows.Count ArrOUT(i) = "-" Next i End If excerpt2 = Application.Transpose(ArrOUT)
End Function
[/vba]
Может, так хотели? [vba]
Код
Public Function excerpt2(X As String)
'функция массива
Dim i, iout As Integer iout = 4
Dim ArrOUT() As Variant ReDim Preserve ArrOUT(1 To iout) 'задаем нужную размерность массиву p = "Значение" For i = 1 To iout ArrOUT(i) = p Next i If Selection.Rows.Count < iout Then ArrOUT(iout - 1) = "...не помещается" If Selection.Rows.Count > iout Then ReDim Preserve ArrOUT(1 To Selection.Rows.Count) For i = iout + 1 To Selection.Rows.Count ArrOUT(i) = "-" Next i End If excerpt2 = Application.Transpose(ArrOUT)
примерно так, при создании функции отработает верно, а в случае изменения функции будет некорректный результат, ведь при изменении не обязательно выделять опять весь диапазон, а достаточно выделить верхнюю ячейку с функцией массива.
примерно так, при создании функции отработает верно, а в случае изменения функции будет некорректный результат, ведь при изменении не обязательно выделять опять весь диапазон, а достаточно выделить верхнюю ячейку с функцией массива.Snek
Snek, Вы не передаёте функции сколько ей надо вернуть значений. Соответственно вернется столько, сколько получится а остальное заполняется не функцией. Например используйте для 6 ячеек
Код
=INDEX(A:A;{1;2;3;4;5})
6я будет #N/A.
Snek, Вы не передаёте функции сколько ей надо вернуть значений. Соответственно вернется столько, сколько получится а остальное заполняется не функцией. Например используйте для 6 ячеек