Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Range.SpecialCells(xlCellTypeVisible) работает в процедурах с Selection, но не работает в функциях
 
Добрый день.
Столкнулся с необходимостью иметь функцию, которая позволяет работать только с отфильтрованным диапазоном. Но такая пользовательская функция не работает:
Код
Function vsb_range(target_range As Range) As Range

    Debug.Print target_range.Count
    Debug.Print target_range.SpecialCells(xlCellTypeVisible).Count 'выдает то же значение что и для исходного диапазона
    
    Set vsb_range = target_range.SpecialCells(xlCellTypeVisible) 'возвращает не видимый диапазон, а исходный
 
End Function
Хотя вроде бы аналогичная процедура правильно изменяет выделенную область на видимую часть выделенного:
Код
Sub vsb_range_select()
    Debug.Print Selection.Count
    Debug.Print Selection.SpecialCells(xlCellTypeVisible).Count 'выдает правильное значение для видимого диапазона

    Selection.SpecialCells(xlCellTypeVisible).Select 'выделяет только видимую часть
    
End Sub
Помогите разобраться плз.
VBA. Как получить разность диапазонов?
 
Довольно часто у меня стоит такая задача, что макрос должен сработать с выделенныи диапазоном за исключением некторых строк или столбцов. Например, исключить из выделенной области первые 2 строки, если они попали в выделение. Я пользуюсь конструкцией:
Код
Set result_rng = Intersect(Selection, [3:1048576])
И работаю уже с result_rng. Но такая конструкция мне не нравится, в *.xls файлах 64000 строк а не 1000000 как в более новых форматах, да и количество столбцов там меньше. Да и при исключении диапазона в середине книги (допустим макрос должен сработать на всем выделенном диапазоне кроме B2:C4) выражение для дополнения B2:C4 до полного диапазона листа и задание нужного превращается в:
Код
 Set result_rng = Intersect(Selection, Union([1:1], [5:1048576], [A:A], [D:XFD]))
Что делает нечитабельным код, и не совсем очевидно, какой же диапазон исключается. А если исключаемый диапазон динамически определяет сам макрос, то такой метод прямого указания вообще не подходит.
Подскажите, знает ли кто-нибудь более правильный способ лишенный всех вышеперечисленных недостатков?
Пользовательская функция, которая сможет работать с диапазоном как формула массива.
 
В общем, проблема такая, нужна функция которая возвращает цвет указанной ячейки. Получилось что-то вроде:
Код
Function Get_Cell_Fill(TRG_CELL As Range)
Get_Cell_Fill = TRG_CELL.Interior.Color
End Function

Но эта функция не может работать как функция массива. И формула
Код
{=SUM(1*(Get_Cell_Fill(D1:D17)<>16777215))}
не перебирает все ячейки в D1:D7 и не выдает количество ячеек с заливкой.
Пробовал объявлять TRG_CELL как вариант, не помогает. Как ячейку объявить не получается. Help.  
Изменено: ino - 08.04.2021 09:01:22
Слишком большой Usedrange, После очистки форматов, формул, удаления строк - используемая область книги все равно слишком большая
 
Итак, повторюсь, после очистки форматов (как очисткой форматов так и удаление условного форматирования), формул, удаления строк, и даже очистки мусорных стилей - используемая область книги все равно слишком большая. В общем, сделал все, что советуется в статье по уменьшению размера файла, но не получилось.
Конечно же можно перенести данные в другую книгу, но хотелось бы разобраться в чем проблема.
Файл приложить не могу, без архива это 2,5метра, а в архиве все равно больше 100кб...
Условное форматирование по данным с другого листа.
 
Существует 2 списка на разных листах. Один отображает данные за период (продажи количественно, по себестоимости, на сумму или как-либо еще, в зависимости от настроения того, кто с ней работает), другая таблица коэффициентов какого либо показателя за этот период (реально это маржинальность, или затраты на продвижение, или оборачиваемость, или еще что-нибудь другое в зависимости от настроения того, кто работает с первой таблицей). Надо ячейкам, содержащим данные сделать заливку, цвет которой определяется коэффициентом в таблице коэффициентов. Что бы стало хоть немного понятнее - для Brand 1 я сделал заливку вручную.
Используя имена я создал corr_coeff - которое с помощью ВПР-а ищет соответствующее значение коэффициента для данных на первом листе. Для примера вместо данных таблица заполнена соответствующим за период коэффициентом. Но никак не получается привязать ко всему этому условное форматирование.
Условное форматирование при использовании данных с другого листа и имени с формулой., Не работает условное форматирование. Коэффициент, для форматирования, находит правильное значение.
 
Суть задачи в том, что на одном листе находится таблица коэффициентов (coeff_table), и граничные условия форматирования (k_1 ~ k_6). На другом листе - таблица отображения форматов. В диспетчере имён создал имя (corr_coeff), которое показывает значение соответствующего коэффициента для данной ячейки (в таблице данных видно, что коэффициент находит правильное значение), но условное форматирование с использованием этого имени не работает.
Страницы: 1
Наверх