Ох. Еще один вопрос. Функция перестает работать как только я в качестве аргумента table использую диапазон с другого листа. Выдает нули.(На листе 2 работает, на листе 3 уже нет). Это можно как-нибудь исправить? Аргумент table может быть на любом листе...
Код
Function MYRANGE(table As Range, znachenie, nomer1&, nomer2&) As Range
Dim cl As Range, I&
For Each cl In table.Columns(nomer1).Cells
If cl.Value = znachenie Then
If Not MYRANGE Is Nothing Then
Set MYRANGE = Union(MYRANGE, Cells(cl.Row, table.Columns(nomer2).Column))
Else
Set MYRANGE = Cells(cl.Row, table.Columns(nomer2).Column)
End If
End If
Next
End Function
Спасибо большое. Я половину выходного просидел и не смог сделать. В список записать функцию не получилось(пишет указанный диапазон не найден), а в функцию получилось, чего я и добивался.
Не совсем то. Функция diapason должна выдавать диапазон с ячейками из второго столбца. Это нужно чтобы дальше возможно было эту функцию использовать в качестве аргумента для другой функции. Тут просто перечисление значений через запятую. Вопрос собственно в том, как вернуть диапазон ячеек. К примеру: я могу в список написать =ИНДЕКС(ДВССЫЛ(Именнованнаятаблица);0;1) и в списке будет диапазон ячеек на выбор, состоящий из первого столбца именованной таблицы.
Добрый день, уважаемые форумчане! Пробую создать функцию на vba, которая будет неким аналогом ВПР, но выдавать сразу диапазон значений. Саму функцию не планирую использовать отдельно, только как аргумент для другой функции или в списке.
Как я себе представляю работу функции: Diapason(table as range; znachenie as variant; nomer1 as byte; nomer2 as byte) as Range Функция берет таблицу, в столбце1(nomer1) ищет искомое значение, если совпадает, то выдает адрес на ячейку из столбца2. Столбец1 отфильтрован. Хочу, чтобы вставив в список следующую формулу, мне выдавало 5-10, 11-15, 16-20 Diapason(именованнаятаблица; "яблоко"; 1; 2)
У меня получилось считать количество повторений значений, а также найти первое значение. Но что делать дальше я не понимаю.
Код
Option Base 1
Function diapason(table As Range, znachenie As String, nomer1 As Byte, nomer2 As Byte) As Range
Dim a As Byte
a = table.Rows.Count
Dim b As Byte, d As Byte
b = 0: d = 0
Dim i As Byte
For i = 1 To a
If table(i, nomer1) = znachenie And b = 0 Then b = i
If table(i, nomer1) = znachenie Then d = d + 1
If table(i, nomer1) <> znachenie And d > 0 Then Exit For
Next i
diapason = ???
End Function
Добрый день! Искал на форумах, но к сожалению не нашел ответа на свой вопрос. Есть к примеру именованный диапазон ячеек. Если диапазон линейный(т.е. состоит из одного столбца/строки), то я могу сделать из него выпадающий список, прям задав имя диапазона в -данные-проверка данных - список. Проблема заключается в том, что у меня не получается сделать аналогичную штуку для двумерного диапазона. Нет ли в excel такой возможности, чтобы я задал выпадающем списке имя диапазона + номер стоблца/строки этого диапазона, и в выпадающем списке появился этот столбец/строка? Что-то вроде имя_диапазона(1,0) - и в выпадающем списке отображается первая строка.
Upd. Занятно что если сделать список из линейного именованного диапазона, а затем этот диапазон превратить в двумерный, то список будет работать - и на выбор можно сделать любое значение из диапазона. К сожалению это не то, что требуется.