Поиск и выделение в таблице по нескольким параметрам - VBA

Узнай цену своей работы

Формулировка задачи:

Ночи доброй! возник следующий вопрос: есть таблица(размерность может быть как увеличена, так и уменьшена) можно ли вывести на экран менюшку в котороый можно будет задавать несколько параметров поиска? к примеру в таблице надо найти все ячейки в которых встречаются сразу все эти критерии( П, Г, 234, МЗН) кол-во параметров может варьироваться от 1го до ++ вбивать параметры нужно ручками в специальном окошке(менюшке), (и в любом порядке) нужные ячейки будут подсвечиваться цветом к примеру "vbGreen"

Решение задачи: «Поиск и выделение в таблице по нескольким параметрам»

textual
Листинг программы
  1. Sub wrkWITHmyCriteries()
  2. Dim mRng As Range, AllCells As Range, currCell As Range
  3. Dim mArr(), currKey, mVAR, i&, j&
  4. Dim dict As Object, SecDict As Object
  5.     mArr = Array("aaa", "b#2c2", "345")
  6.     Set dict = CreateObject("scripting.dictionary")
  7.         dict.comparemode = 1
  8.     Set SecDict = CreateObject("scripting.dictionary")
  9.         SecDict.comparemode = 1
  10.         For i = LBound(mArr) To UBound(mArr)
  11.             dict.Add mArr(i), mArr(i)
  12.         Next 'i
  13.        For Each currKey In dict.Keys
  14.             mVAR = dict.Item(currKey)
  15.                 If IsNumeric(mVAR) Then
  16.                     mVAR = CDbl(dict.Item(currKey))
  17.                 End If
  18.             With ActiveSheet
  19.             Set mRng = .UsedRange
  20.                 For Each currCell In mRng
  21.                     If currCell.Value = mVAR Then
  22.                         If SecDict.exists(mVAR) Then
  23.                             SecDict.Item(mVAR).Add currCell.Address
  24.                                 Else
  25.                                     SecDict.Add mVAR, New Collection
  26.                                     SecDict.Item(mVAR).Add _
  27.                                                         currCell.Address
  28.                         End If
  29.                     End If
  30.                 Next ' currCell
  31.            End With 'ActiveSheet
  32.        For i = 1 To SecDict.Item(mVAR).count
  33.             If AllCells Is Nothing Then
  34.                 Set AllCells = Range(SecDict.Item(mVAR)(i))
  35.                 i = 2
  36.             End If
  37.             Set AllCells = Union(AllCells, _
  38.                         Range(SecDict.Item(mVAR)(i)))
  39.         Next 'i
  40.    Next ' currKey
  41.    With AllCells
  42.         .Interior.ColorIndex = 35
  43.     End With
  44. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут