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

Страницы: 1
Range.SpecialCells(xlCellTypeVisible) работает в процедурах с Selection, но не работает в функциях
 
Да, с листа. Она на листе и нужна, для =TEXTJOIN()-а и подобных функций.  
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
Помогите разобраться плз.
Вывести общий остаток по складу
 
Если оффис не 365-й а более ранний, то без дополнительного столбца на листе "Приход Расход", который будет считать, какое это по счету это уникальное сочетание кат.номера и наименования, не обойтись. Но как по мне так легче обойтись сводной таблицей... Оба варианта в файле:
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]))
Что делает нечитабельным код, и не совсем очевидно, какой же диапазон исключается. А если исключаемый диапазон динамически определяет сам макрос, то такой метод прямого указания вообще не подходит.
Подскажите, знает ли кто-нибудь более правильный способ лишенный всех вышеперечисленных недостатков?
Медленная работа макроса, удаляющего пустые строки.
 
Цитата
ПРОИЗВЕД написал: Добавил оперативки 4 гига-не помогло ни капли
Если комп слабый и строк для проверки много этот макрос можно еще оптимизировать, убрав на каждом шаге цикла проверку не является область rng пустой, задав первоначальное значение этой области как первая строка после всех используемых на странице. Конечно же страница, в этом случае, заведомо не должна использовать всю возможную область.
Код
Sub rows_del()
Dim r As Long, rng As Range
Set rng = Rows(ActiveSheet.UsedRange.Rows.Count + 1)
    For r = 1 To ActiveSheet.UsedRange.Rows.Count
        If Application.CountA(Rows(r)) = 0 Then Set rng = Union(rng, Rows(r))
    Next r
rng.Delete
End Sub
Пользовательская функция, которая сможет работать с диапазоном как формула массива.
 
В общем, проблема такая, нужна функция которая возвращает цвет указанной ячейки. Получилось что-то вроде:
Код
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, После очистки форматов, формул, удаления строк - используемая область книги все равно слишком большая
 
The_Prist, спасибо, Activesheet.StandardHeight и вправду был равен 0. Буду знать, что есть и такое свойство у Sheets.
Слишком большой Usedrange, После очистки форматов, формул, удаления строк - используемая область книги все равно слишком большая
 
Hugo, конечно пробовал.
Кажется я нашел в чем проблема.
Плогнал макросом и посмотрел высоту всех строк. Несмотря на то, что все высоты были равны 15, если выделить все ячейки и вручную задать высоту в 15, то после сохранения размер используемой области нормализуется.
Видимо очистка форматов и удаление строк очищает не все, что натворил пользователь...
Слишком большой Usedrange, После очистки форматов, формул, удаления строк - используемая область книги все равно слишком большая
 
Итак, повторюсь, после очистки форматов (как очисткой форматов так и удаление условного форматирования), формул, удаления строк, и даже очистки мусорных стилей - используемая область книги все равно слишком большая. В общем, сделал все, что советуется в статье по уменьшению размера файла, но не получилось.
Конечно же можно перенести данные в другую книгу, но хотелось бы разобраться в чем проблема.
Файл приложить не могу, без архива это 2,5метра, а в архиве все равно больше 100кб...
Условное форматирование по данным с другого листа.
 
Большое спасибо, все работает. Не могу только понять, почему не работало в моём варианте...
Условное форматирование по данным с другого листа.
 
Заливка сделана верно. Но проблема в том, что таблица данных должна быть заполнена совсем другими данными. Например в Таблица_данных!B4 должно быть 100, С4 =110, D4 150 и.т.д. Но формат должен быть задан, как будто там записан коэффициент 0,43, 0,36, 0,25 и.т.д. Который берётся из таблицы коэффициентов Таблица_коэффициентов!A4:S28 соответствующего бренда за соответствующий период.
Условное форматирование по данным с другого листа.
 
Таблица коэффициентов это A4:S28. В U1:AA1 приведен свод правил для условного форматирования (то, что хотелось бы получить). Офис 2007.
Условное форматирование по данным с другого листа.
 
В том то и дело, что данные только для примера заполнены соответствующими коэффициентом. На самом деле там должны быть совсем другие значения. И применять в правилах условного форматирования B4<0,084 и.т.д. не получается. Там должно применяться значение, которое бы было у corr_coeff в этой ячейке.
Условное форматирование по данным с другого листа.
 
Существует 2 списка на разных листах. Один отображает данные за период (продажи количественно, по себестоимости, на сумму или как-либо еще, в зависимости от настроения того, кто с ней работает), другая таблица коэффициентов какого либо показателя за этот период (реально это маржинальность, или затраты на продвижение, или оборачиваемость, или еще что-нибудь другое в зависимости от настроения того, кто работает с первой таблицей). Надо ячейкам, содержащим данные сделать заливку, цвет которой определяется коэффициентом в таблице коэффициентов. Что бы стало хоть немного понятнее - для Brand 1 я сделал заливку вручную.
Используя имена я создал corr_coeff - которое с помощью ВПР-а ищет соответствующее значение коэффициента для данных на первом листе. Для примера вместо данных таблица заполнена соответствующим за период коэффициентом. Но никак не получается привязать ко всему этому условное форматирование.
ВПР в ЕСЛИ и как сделать чтобы ВПР не подтягивала 0 вместо пусто
 
Ну что ж, можно и так... хотя...)
выражение:
(ВРП($B6;Исходный!$B$6:$S$1048576;17;0)="")*1+(ВПР($B6;Исходный!$B$6:$S$1048576;7;0)="да")*10+(ВПР($B6;Исходный!$B$6:$S$1048576;7;0)="")*100
может выдать 4 числовых результата, или ошибку ошубку ввода(хотя я пока не придумал как):
Если в исходном ресурсе стоит "да" в 18-й сторе, то это:
11
101
Если в исходном ресурсе пусто в 18-й сторе, то это:
10
100

Как дибильный пример ВПР()+ВПР+ВРП в ВПР-е могу предложить такой вариант решения )
Если неправильно подобрал варианты в таблице решений - вы уж подправьте.
ВПР в ЕСЛИ и как сделать чтобы ВПР не подтягивала 0 вместо пусто
 
Цитата
ОЛег ОЛег пишет:
только если в формулу вставить сначала перевод пустой ячейки в текстовое пусто.
но думаю и сейчас в ней какая то ошибка, ни разу пока не приходилось ВПР в ЕСЛИ вставлять

=ЕСЛИ(ВПР($B7;[раз.xlsx]Исходный!$B$6:$S$1048576;18;0)="";ЕСЛИ(ВПР($B7;[раз.xlsx]Исходный!$B$6:$O$1048576;G$1;0)="";"";ВПР($B7;[раз.xlsx]Исходный!$A$6:$O$1048576;G$1;0));"")

О, дважды Олег Советского Союза. Не надо двух отдельных файлов, с ВПР-ом из одного в другой. Связь при открытии в чужом экселе при этом теряется. А людям приходится читать длинную ссылку в две строки, указывающую на один диапазон...
Переделайте пример. Уместите все в одном файле - так будет нам проще объяснить, что же нужно в результате.
Переделывание в "текстовое пусто" должно осуществляться в источнике. Т.е. там, откуда берёт данные ВПР. Если это место обновляется не очень часто, или результат выборки из этого места ВПР-ом имеет пусть периодический, но не очень частый характер -- то легче при помощи фильтров заменять пустые значения в источнике данных на формулу =СЖПРОБЕЛЫ(""). Тогда можно обойтись в файле результата без ЕСЛИ. Или сделать на одно ЕСЛИ короче.
ВПР в ЕСЛИ и как сделать чтобы ВПР не подтягивала 0 вместо пусто
 
Не совсем понял сути вопроса. Но есть способ, что б ВПР не подтягивал 0, вместо пусто. Для этого пусто - должно быть "текстовым пусто", а не пустой ячейкой. Один из способов превратить пусто, в текстовое значение "" - превратить значение пустых ячеек в значение результата работы оператора &"".
Или любой функции, дающей на выходе текст. Допустим =СЖПРОБЕЛЫ("").
В этом случае, значение Value у таких ячеек перестанет быть пустым (Empty) и приобретёт "" (пустая строка).
При таком подходе продолжают работать функции СУММ(), но перестают работать функции среднего. Так как количество непустых ячеек не совпадает с количеством содержащих числа. В приложении файл, показывающий этот метод.
Условное форматирование при использовании данных с другого листа и имени с формулой., Не работает условное форматирование. Коэффициент, для форматирования, находит правильное значение.
 
"Разношёрстная" таблица данных на самом деле заполнена совсем другими данными, а не соответствующим значением коэффициента за тот период. Нам надо, в зависимости от значения коэффициента в другой таблице покрасить её в соответствующий цвет. В ячейке B4 (что бы была заливка красным) должно выполняться условие, что в таблице коэффициентов, у бренда "Brand 1" значение коэффициента в период "VII" (в данном случае значение ячейки B4 но листа "Таблица коэффициентов") было бы меньше k_1.
не работает функция подставить
 
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(C3;"Текст1";"");"Текст2";"")
Функция подставить не может получить аргумент массивом. Так что {"ТЕКСТ1 ";"ТЕКСТ2"} - никак не получится.
Условное форматирование при использовании данных с другого листа и имени с формулой., Не работает условное форматирование. Коэффициент, для форматирования, находит правильное значение.
 
Есть таблица коэффициентов. Она динамическая и может время от времени пересчитываться (минимум раз в месяц будут добавляться новые данные). Иногда может меняться сам смысл коэффициента, то оборачиваемости за период, то еще по что-либо еще.
В зависимости от этой таблицы - надо сделать условное форматирование, наглядно показывающее, в какие границы попадает значение в тот или иной период той или иной строки в таблице данных. Сама таблица данных заполнена совсем другими значениями, и их порядок может обуславливаться "удобством". Т.е. : "эти три строки я хочу рассматривать вместе, а эти 4 отдельно".
Еще надо учесть, что границы для условного форматирования тоже могут время от времени меняться. Так как для каждого направления - они свои.
P.S. Не спрашивайте, зачем мне это надо - это надо не мне, я сам пытаюсь помочь)
Условное форматирование при использовании данных с другого листа и имени с формулой., Не работает условное форматирование. Коэффициент, для форматирования, находит правильное значение.
 
Суть задачи в том, что на одном листе находится таблица коэффициентов (coeff_table), и граничные условия форматирования (k_1 ~ k_6). На другом листе - таблица отображения форматов. В диспетчере имён создал имя (corr_coeff), которое показывает значение соответствующего коэффициента для данной ячейки (в таблице данных видно, что коэффициент находит правильное значение), но условное форматирование с использованием этого имени не работает.
Страницы: 1
Наверх