Добрый день, уважаемые форумчане! Заранее прошу прощения у модераторов, что не могу написать в соответствующую ветку, т.к. она в архиве В теме https://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=12247 предложен замечательный скрипт для горизонтального фильтрования:
Код
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myControlRange As Range
Dim rng As Range, Stolbec As Range
'назначаем конролируемую ячейку при изменении которой бдет запускаться макрос
'и с этим занчением будут сравниваться данные
Set myControlRange = Range("B3")
'пропускаем ошибки
On Error Resume Next
If Selection.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, myControlRange) Is Nothing Then
'отключаем обновление и контроль событий
Application.ScreenUpdating = False
Application.EnableEvents = False
'отображаем все столбцы, если были скрыты/со столбца F в данном случае
Range(Cells(7, 6), Cells(7, Columns.Count)).EntireColumn.Hidden = False
'устанавливаем диапазон данных где будем проверять данные/это строка 7 со столбца F
Set Stolbec = Range(Cells(7, 6), Cells(7, Columns.Count).End(xlToLeft))
'проверяем данные в каждой ячейке равенству для фильтра
For Each rng In Stolbec
If rng.Value <> Target.Value Then rng.EntireColumn.Hidden = True
Next
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Как сделать так, чтобы фильтровал он не по точному совпадению, а по вхождению? Представим, что столбцы называются
Артикул
Цена
Кастрюля: белая
Кастрюля: красная
Кастрюля: зеленая
Тарелка: белая
Тарелка: прозозрачная
Чашка: полная
И нам надо оставить только столбцы, например, сначала с кастрюлями, артикулом и ценой, а остальный скрыть, а затем с тарелками. Артикул и цена должны быть видны при любых условиях. Таких столбцов всего около 500. Как сделать так, чтобы вводя слово "кастрюля" я мог отфильтровать все кастрюли и т.д.?
Добрый день, уважаемые форумчане! Заранее извиняюсь за расплывчатую формулировку. Читать вопрос без файла перед глазами не имеет смысла. Файл приложен.
Это файл отчета контент-менеджера. Он заполняет вкладку "Отчет". Во вкладке "Служебная информация" содержатся тарифы и коэффициенты.
Столкнулся с такой ситуацией: Есть дополнительные работы, часть из них оплачивается коэффициентами от условной целой работы, стоимость которой вычисляется формулой. Но некоторые дополнительные работы имеют фиксированную ставку.
Сама оплата вычисляется на первой вкладке в графе Ca$h формулой =(ВПР(D2;'Служебная информация'!B:C;2;ЛОЖЬ))*(ВПР(E2;'Служебная информация'!I:J;2;ЛОЖЬ)). Первый ВПР выбирает ставку, а второй - коэффициент. Мне нужно, чтобы в двух случаях ("Правка 1 вкладки" и "Правка фото" первый ВПР умножался на 0 и ставилось фиксированное значение. Нагромождения "Если" хотелось бы избежать.
Не совсем понял, куда пропало мое сообщение... Дублирую Уважаемые форумчане! Прошу помощи вот в таком вопросе. Есть файл https://yadi.sk/d/XbjB8sE9f8qkBQ. Сжать его меньше 100 Кб никак не получается. В нем на каждом листе есть артикулы. Мне надо выделить те, что повторяются на разных листах. Методы из похожей темы пробовал - не подошли. Помогите, пожалуйста.
Наиболее близким к тому, что нужно, является этот скрипт
Код
Sub ColorsDoubles() On Error Resume Next
' массив цветов, используемых для заливки ячеек-дубликатов
Colors = Array(12900829, 15849925, 14408946, 14610923, 15986394, 14281213, 14277081, _
9944516, 14994616, 12040422, 12379352, 15921906, 14336204, 15261367, 14281213)
Dim coll As New Collection, dupes As New Collection, _
cols As New Collection, ra As Range, cell As Range, n&
Err.Clear: Set ra = Intersect(Selection, ActiveSheet.UsedRange)
If Err Then Exit Sub
ra.Interior.ColorIndex = xlColorIndexNone: Application.ScreenUpdating = False
For Each cell In ra.Cells ' запонимаем значение дубликатов в коллекции dupes
Err.Clear: If Len(Trim(cell)) Then coll.Add CStr(cell.Value), CStr(cell.Value)
If Err Then dupes.Add CStr(cell.Value), CStr(cell.Value)
Next cell
For i& = 1 To dupes.Count ' заполняем коллекцию cols цветами для разных дубликатов
n = n Mod (UBound(Colors) + 1): cols.Add Colors(n), dupes(i): n = n + 1
Next
For Each cell In ra.Cells ' окрашиваем ячейки, если для её значения назначен цвет
cell.Interior.Color = cols(CStr(cell.Value)) ' если надо окрасить всю строку,то cell.EntireRow.Interior.color = cols(CStr(cell.Value))
Next cell
Application.ScreenUpdating = True
End Sub
Но он действует только в рамках одного листа и выделенного диапазона ячеек.
Я попробовал распространить его на всю книгу
Код
Sub ColorsDoubles()
On Error Resume Next
' массив цветов, используемых для заливки ячеек-дубликатов
Colors = Array(12900829, 15849925, 14408946, 14610923, 15986394, 14281213, 14277081, _
9944516, 14994616, 12040422, 12379352, 15921906, 14336204, 15261367, 14281213)
Dim coll As New Collection, dupes As New Collection, _
cols As New Collection, ra As Range, cell As Range, n&
For Each oneSheet In ThisWorkbook.Sheets
Err.Clear: Set ra = worksheet.UsedRange
Next
If Err Then Exit Sub
ra.Interior.ColorIndex = xlColorIndexNone: Application.ScreenUpdating = False
For Each cell In ra.Cells ' запонимаем значение дубликатов в коллекции dupes
Err.Clear: If Len(Trim(cell)) Then coll.Add CStr(cell.Value), CStr(cell.Value)
If Err Then dupes.Add CStr(cell.Value), CStr(cell.Value)
Next cell
For i& = 1 To dupes.Count ' заполняем коллекцию cols цветами для разных дубликатов
n = n Mod (UBound(Colors) + 1): cols.Add Colors(n), dupes(i): n = n + 1
Next
For Each cell In ra.Cells ' окрашиваем ячейки, если для её значения назначен цвет
cell.Interior.Color = cols(CStr(cell.Value)) ' если надо окрасить всю строку,то cell.EntireRow.Interior.color = cols(CStr(cell.Value))
Next cell
Application.ScreenUpdating = True End Sub
Но в итоге все окрасило одним цветом по непонятному мне принципу https://yadi.sk/i/vt7kK9hJN7e5Pg . Я ошибся или пошел не тем путем?