wake-up-neo.com

So finden Sie einen Wert in einer Excel-Spalte durch VBA-Code Cells.Find

Ich muss einen Wert celda in einer Excel-Tabelle finden. Ich habe diesen VBA-Code verwendet, um ihn zu finden:

Set cell = Cells.Find(What:=celda, After:=ActiveCell, LookIn:= _
    xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:= _
    xlNext, MatchCase:=False, SearchFormat:=False)


If cell Is Nothing Then
    'do it something

Else
    'do it another thing
End If

Das Problem ist, wenn ich den Wert finden muss nur in einer Excel-Spalte. Ich finde es mit dem nächsten Code:

    Columns("B:B").Select
    Selection.Find(What:="VA22GU1", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate

Aber ich weiß nicht, wie ich es an den ersten vba-Code anpassen soll, weil ich den Wert nothing verwenden muss.

Benutz einfach

Columns("B:B").Select
Set cell = Selection.Find(What:="celda", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

If cell Is Nothing Then
    'do it something

Else
    'do it another thing
End If
39
Andrey Gordeev

Der Vollständigkeit halber können Sie dieselbe Technik auch für Excel-Tabellen verwenden.

Im folgenden Beispiel suche ich nach einem Text in einer beliebigen Zelle einer Excel-Tabelle mit dem Namen "tblConfig", der sich in dem Blatt "Config" befindet, das normalerweise ausgeblendet ist. Ich akzeptiere die Standardeinstellungen der Find-Methode.

Dim list As ListObject
Dim config As Worksheet
Dim cell as Range


Set config = Sheets("Config")
Set list = config.ListObjects("tblConfig")

'search in any cell of the data range of Excel table
Set cell = list.DataBodyRange.Find(searchTerm)

If cell Is Nothing Then
    'when information is not found
Else
    'when information is found
End If
8
Dim strFirstAddress As String
Dim searchlast As Range
Dim search As Range

Set search = ActiveSheet.Range("A1:A100")
Set searchlast = search.Cells(search.Cells.Count)

Set rngFindValue = ActiveSheet.Range("A1:A100").Find(Text, searchlast, xlValues)
If Not rngFindValue Is Nothing Then
  strFirstAddress = rngFindValue.Address
  Do
    Set rngFindValue = search.FindNext(rngFindValue)
  Loop Until rngFindValue.Address = strFirstAddress
4
Mona

Ich würde es vorziehen, die .Find Methode direkt auf ein Bereichsobjekt, das den Bereich der zu durchsuchenden Zellen enthält. Für den Code des ursprünglichen Posters könnte dies so aussehen:

Set cell = ActiveSheet.Columns("B:B").Find( _
    What:=celda, _
    After:=ActiveCell _
    LookIn:=xlFormulas, _
    LookAt:=xlWhole, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlNext, _
    MatchCase:=False, _
    SearchFormat:=False _
)

If cell Is Nothing Then
    'do something
Else
    'do something else
End If

Ich würde es vorziehen, mehr Variablen zu verwenden (und sie unbedingt zu deklarieren) und viele optionale Argumente ihre Standardwerte verwenden zu lassen:

Dim rng as Range
Dim cell as Range
Dim search as String

Set rng = ActiveSheet.Columns("B:B")
search = "String to Find"
Set cell = rng.Find(What:=search, LookIn:=xlFormulas, LookAt:=xlWhole, MatchCase:=False)

If cell Is Nothing Then
    'do something
Else
    'do something else
End If

Ich behielt LookIn:=, LookAt::=, und MatchCase:= explizit angeben, was abgeglichen wird. Die anderen optionalen Parameter steuern, in welcher Reihenfolge Übereinstimmungen zurückgegeben werden. Ich würde diese nur angeben, wenn die Reihenfolge für meine Anwendung wichtig ist.

3
robartsd