Нужна помощь в фильтрации листа Excel для определенных условий - PullRequest
0 голосов
/ 04 марта 2020

Привет У меня возникла проблема с фильтрацией таблицы Excel. По сути, я извлекаю очень длинный PDF в Excel.

Из экспортированных данных меня интересуют только некоторые коды, представленные в виде SM12345 (SM и пять цифр).

Мне удалось создать формулу в Excel, чтобы проверить 3 условия, которые я определил для фильтрации данных, но она проверяет только одно значение ячейки (кажется, я не могу найти способ ссылаться на весь лист как на диапазон, как в функция поиска).

Моя идея - использовать предварительную фильтрацию и использовать мои 3 условия в качестве критерия, но я не знаю, как ссылаться на весь лист в Excel, поэтому я записываю макрос и копирую их в отдельный столбец.

Мои условия:

1- Содержит "SM"

2- Длина равна 7 (хотя я думаю, что после SM можно использовать дикие символы, не уверен)

3- Строка содержит числа

Это формула Excel, которую я имею для отдельной ячейки:

=IF(AND(ISNUMBER(SEARCH("sm",A9)),LEN(A9)=7,COUNT(FIND({0,1,2,3,4,5,6,7,8,9},A9))>0),A9,"")

1 Ответ

0 голосов
/ 04 марта 2020

Сначала найдите все SM * и выделите их все с помощью ctrl + a в поле поиска, как показано на рисунке. После закрытия поля поиска все ячейки останутся выделенными, и вы сможете запустить следующий макрос. Тогда вы можете делать что угодно с этими ячейками, зацикливающимися на myRng.

Sub SlectCond()
Dim myRng As Range
For Each cell In Selection
     If HasNumber(cell.Value) And Len(cell) >= 7 Then
        If myRng Is Nothing Then
        Set myRng = cell
        Else
        Set myRng = Union(myRng, cell)
        End If
    End If
Next

For Each cell In myRng
cell.Interior.ColorIndex = 6
Next

End Sub

Function HasNumber(strData As String) As Boolean
 Dim iCnt As Integer
 For iCnt = 1 To Len(strData)
    If IsNumeric(Mid(strData, iCnt, 1)) Then
    HasNumber = True
    Exit Function
    End If
 Next iCnt
End Function

enter image description here

Или если вы хотите выполнить все через макрос ..... ...

Sub SlectCond()

Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)).Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select

Dim myString, myStringArr
myString = ""

Dim myRng As Range
For Each cell In Selection
     If HasNumber(cell.Value) And InStr(1, cell.Value, "SM") And Len(cell) >= 7 Then
        If myRng Is Nothing Then
        Set myRng = cell
        myString = cell.Value
        Else
        Set myRng = Union(myRng, cell)
        myString = myString & "," & cell.Value
        End If
    End If
Next

For Each cell In myRng
cell.Interior.ColorIndex = 6
Next

myStringArr = Split(myString, ",")

Worksheets.Add
For i = 0 To UBound(myStringArr)
Range("A" & i + 1) = myStringArr(i)
Next


End Sub

Function HasNumber(strData As String) As Boolean
 Dim iCnt As Integer
 For iCnt = 1 To Len(strData)
    If IsNumeric(Mid(strData, iCnt, 1)) Then
    HasNumber = True
    Exit Function
    End If
 Next iCnt
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...