Как искать строку в одном столбце (A) в Excel, используя VBA - PullRequest
7 голосов
/ 11 января 2012

Я хочу изменить эти строки в своем Excel-коде VBA на что-то гораздо более быстрое, вместо того, чтобы перебирать все строки, я видел примеры, но не мог их понять, поскольку я не являюсь пользователем VBA.

Когда я использовал код в примерах (Google, этот сайт), я не вижу нужной мне потребности, я хочу выполнить поиск в столбце A, и если найденные значения возвращают значения в столбце B рядом с искомыми значениями, в противном случае возвращаются пустые.

Большая часть кода, который я использовал, возвращала ошибку, когда не была найдена, и некоторые другие загадочные действия.

Мой текущий код для поиска:

Dim k As Integer
For k = 2 To sheet2Counter - 1                      
    Dim tmp As String                      

    tmp = ActiveSheet.Range("A" & k).Value                      
    If tmp = tmpstr Then                      
        tmp = ActiveSheet.Range("B" & k).Value                      
        tmp = Replace(tmp, "Q", "A")                      
        mainstringtopaste = mainstringtopaste + tmp + ","

            Exit For                      
    End If                    
Next k

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

Столбцы в листе для поиска выглядят так:

ColumnA        ColumnB
trees          leaves
oranges        fruits
pineapple      fruits
leaves         trees

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

Спасибо

1 Ответ

14 голосов
/ 11 января 2012

Ниже приведены два метода, которые превосходят циклы. Оба обрабатывают случай "не найти".

  1. Эквивалент VBA нормальной функции VLOOKUP с обработкой ошибок, если переменная не существует (INDEX/MATCH может быть лучшим маршрутом, чем VLOOKUP, т. Е. Если два столбца A и B были в обратном порядке или были далеко друг от друга)
  2. VBAs FIND метод (сопоставление всей строки в столбце A, если я использую аргумент xlWhole)

    Sub Method1()
    Dim strSearch As String
    Dim strOut As String
    Dim bFailed As Boolean
    
    strSearch = "trees"
    
    On Error Resume Next
    strOut = Application.WorksheetFunction.VLookup(strSearch, Range("A:B"), 2, False)
    If Err.Number <> 0 Then bFailed = True
    On Error GoTo 0
    
    If Not bFailed Then
    MsgBox "corresponding value is " & vbNewLine & strOut
    Else
    MsgBox strSearch & " not found"
    End If
    End Sub
    
    Sub Method2()
        Dim rng1 As Range
        Dim strSearch As String
        strSearch = "trees"
        Set rng1 = Range("A:A").Find(strSearch, , xlValues, xlWhole)
        If Not rng1 Is Nothing Then
            MsgBox "Find has matched " & strSearch & vbNewLine & "corresponding cell is " & rng1.Offset(0, 1)
        Else
            MsgBox strSearch & " not found"
        End If
    End Sub
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...