Критерии поиска VBA - PullRequest
       19

Критерии поиска VBA

0 голосов
/ 21 февраля 2012

Я использую приведенный ниже код для поиска столбца.

Set FinColumn = .Find(What:="Tax", AFter:=.Cells(1, 1), LookIn:=xlValues, LookAt _
          :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
          False, SearchFormat:=False).

если у меня есть столбцы, подобные приведенным ниже, он должен идентифицировать.найдите все вышеперечисленные столбцы. Есть ли критерии поиска, которые я могу реализовать.

Спасибо,

Chaitu

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Хотя мой первый ответ был верным, он не был полным.Следующий код циклически находит каждую ячейку, содержащую «налог», и останавливается, когда все обработано.

Прямой ответ на ваш вопрос - заменить xlWhole на xlPart.Однако есть ошибки, которые могут помешать работе вашего кода;например, вы не определяете диапазон, в котором должен работать поиск.Я добавил .Cells перед .Find.

Надеюсь, это поможет.

Option Explicit
Sub FindAllTax()

  Dim ColCrnt As Long
  Dim ColLast As Long
  Dim FinColumn As Range
  Dim RowCrnt As Long
  Dim RowLast As Long

  RowLast = 0
  ColLast = 0

  With Sheets("Sheet6")

    Set FinColumn = .Cells.Find(What:="Tax", After:=.Cells(1, 1), _
             LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
             SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

    Do While True
      If FinColumn Is Nothing Then
        ' No occurrence of "Tax" found
        Exit Do
      End If
      RowCrnt = FinColumn.Row
      ColCrnt = FinColumn.Column
      If RowCrnt < RowLast Or _
         (RowCrnt = RowLast And ColCrnt < ColLast) Then
        ' Current cell is above last cell so have looped after finding
        ' all values.
        Exit Do
      End If
      Debug.Print "Cells(" & RowCrnt & ", " & ColCrnt & ")=" & _
                                             .Cells(RowCrnt, ColCrnt).Value
      RowLast = RowCrnt
      ColLast = ColCrnt
      Set FinColumn = .Cells.FindNext(FinColumn)
    Loop
  End With

  Debug.Print "All cells containing ""tax"" processed"

End Sub
1 голос
/ 21 февраля 2012

Тони уже дал вам один способ. Вот еще один с использованием групповых символов. Теперь использование подстановочных знаков важно, потому что, скажем, у вас есть ячейки, где

А1 = налог

B10 = Налог и сбор

C15 = Налог и сбор1

D20 = 123Tax

G45 = DoggyTax

Что делать, если вы хотели искать только Tax *, т.е. Tax, Tax & Fee и Tax & Fee1?

Также, когда вы выполняете поиск по всем ячейкам, вам нужно указать диапазон. Вот быстрый пример

Option Explicit

Sub Sample()
    Dim oRange As Range, aCell As Range, bCell As Range
    Dim ws As Worksheet
    Dim ExitLoop As Boolean
    Dim SearchString As String, FoundAt As String

    On Error GoTo Err

    '~~> The Sheet where the search has to be performed
    Set ws = Worksheets("Sheet1")
    '~~> In All cells
    Set oRange = ws.Cells

    '~~> Search string
    SearchString = "Tax*"

    Set aCell = oRange.Find(What:=SearchString, LookIn:=xlValues, _
                LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)

    '~~> If search was found
    If Not aCell Is Nothing Then
        Set bCell = aCell
        FoundAt = aCell.Address
        Do While ExitLoop = False
            Set aCell = oRange.FindNext(After:=aCell)

            If Not aCell Is Nothing Then
                If aCell.Address = bCell.Address Then Exit Do
                FoundAt = FoundAt & ", " & aCell.Address
            Else
                ExitLoop = True
            End If
        Loop
    Else
        MsgBox SearchString & " not Found"
    End If

    MsgBox "The Search String has been found these locations: " & FoundAt
    Exit Sub
Err:
    MsgBox Err.Description
End Sub

Вы можете найти больше информации о FIND () и FINDNEXT () в указанной ниже ссылке.

ТЕМА: .ind и .FindNext в Excel VBA

LINK : http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/

Примечание : Если вы хотите найти все экземпляры «Налога», вам не требуется подстановочный знак. Все, что вам нужно сделать, это использовать ниже, как предложил Тони.

LookAt:=xlPart

НТН

Sid

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...