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

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

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

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

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

textual
Листинг программы
Sub wrkWITHmyCriteries()
Dim mRng As Range, AllCells As Range, currCell As Range
Dim mArr(), currKey, mVAR, i&, j&
Dim dict As Object, SecDict As Object
    mArr = Array("aaa", "b#2c2", "345")
    Set dict = CreateObject("scripting.dictionary")
        dict.comparemode = 1
    Set SecDict = CreateObject("scripting.dictionary")
        SecDict.comparemode = 1
        For i = LBound(mArr) To UBound(mArr)
            dict.Add mArr(i), mArr(i)
        Next 'i
        For Each currKey In dict.Keys
            mVAR = dict.Item(currKey)
                If IsNumeric(mVAR) Then
                    mVAR = CDbl(dict.Item(currKey))
                End If
            With ActiveSheet
            Set mRng = .UsedRange
                For Each currCell In mRng
                    If currCell.Value = mVAR Then
                        If SecDict.exists(mVAR) Then
                            SecDict.Item(mVAR).Add currCell.Address
                                Else
                                    SecDict.Add mVAR, New Collection
                                    SecDict.Item(mVAR).Add _
                                                        currCell.Address
                        End If
                    End If
                Next ' currCell
            End With 'ActiveSheet
        For i = 1 To SecDict.Item(mVAR).count
            If AllCells Is Nothing Then
                Set AllCells = Range(SecDict.Item(mVAR)(i))
                i = 2
            End If
            Set AllCells = Union(AllCells, _
                        Range(SecDict.Item(mVAR)(i)))
        Next 'i
    Next ' currKey
    With AllCells
        .Interior.ColorIndex = 35
    End With
End Sub

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


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

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

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