Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как вывести результат пользоват.функции массива без #Н/Д ? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Как вывести результат пользоват.функции массива без #Н/Д ?
Snek Дата: Суббота, 25.01.2020, 23:42 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Сделал пользовательскую функцию, которая предполагается использоваться как функция массива (в столбец)
Суть функции в следующем:
Создается массив с текстовыми данными. Размерность массива заранее не известна.

Если функцию массива применить к ячейкам А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]
К сообщению приложен файл: 6143648.xlsm (14.3 Kb)
 
Ответить
СообщениеСделал пользовательскую функцию, которая предполагается использоваться как функция массива (в столбец)
Суть функции в следующем:
Создается массив с текстовыми данными. Размерность массива заранее не известна.

Если функцию массива применить к ячейкам А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]

Автор - Snek
Дата добавления - 25.01.2020 в 23:42
Pelena Дата: Воскресенье, 26.01.2020, 09:30 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19405
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
Может, так хотели?
[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)

End Function
[/vba]
К сообщению приложен файл: 8141631.xlsm (15.4 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеМожет, так хотели?
[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)

End Function
[/vba]

Автор - Pelena
Дата добавления - 26.01.2020 в 09:30
Snek Дата: Воскресенье, 26.01.2020, 16:30 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Может, так хотели?

примерно так, при создании функции отработает верно, а в случае изменения функции будет некорректный результат, ведь при изменении не обязательно выделять опять весь диапазон, а достаточно выделить верхнюю ячейку с функцией массива.
 
Ответить
Сообщение
Может, так хотели?

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

Автор - Snek
Дата добавления - 26.01.2020 в 16:30
bmv98rus Дата: Воскресенье, 26.01.2020, 16:50 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4115
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
Snek, Вы не передаёте функции сколько ей надо вернуть значений. Соответственно вернется столько, сколько получится а остальное заполняется не функцией. Например используйте для 6 ячеек
Код
=INDEX(A:A;{1;2;3;4;5})
6я будет #N/A.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеSnek, Вы не передаёте функции сколько ей надо вернуть значений. Соответственно вернется столько, сколько получится а остальное заполняется не функцией. Например используйте для 6 ячеек
Код
=INDEX(A:A;{1;2;3;4;5})
6я будет #N/A.

Автор - bmv98rus
Дата добавления - 26.01.2020 в 16:50
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!