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

Страницы: 1
Горизонтальный фильтр по вхождению, а не по точному совпадению
 
Добрый день, уважаемые форумчане! Заранее прошу прощения у модераторов, что не могу написать в соответствующую ветку, т.к. она в архиве
В теме 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. Как сделать так, чтобы вводя слово "кастрюля" я мог отфильтровать все кастрюли и т.д.?

Файлы прилагаю
Оригинал

То, что я хочу

Изменено: San Tut - 16.07.2021 18:28:51 (Добавил пример данных для фильтрации)
Замена результата вычисления фиксированным значением, Прошу помочь разобраться как обнулить формулу и поставить вместо нее фиксированное значение
 
Добрый день, уважаемые форумчане! Заранее извиняюсь за расплывчатую формулировку. Читать вопрос без файла перед глазами не имеет смысла. Файл приложен.

Это файл отчета контент-менеджера. Он заполняет вкладку "Отчет". Во вкладке "Служебная информация" содержатся тарифы и коэффициенты.

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

Сама оплата вычисляется на первой вкладке в графе 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 . Я ошибся или пошел не тем путем?
Изменено: San Tut - 29.04.2021 17:17:35
Страницы: 1
Наверх