Ich habe ein Excel-Blatt mit mehreren Zellen mit einer Zeichenfolge foo
in der ersten Zeile. Ich möchte die erste und letzte Spalte finden, in der die Zeichenfolge geschrieben wird. Ich habe versucht, die folgendenFinden der ersten und letzten Eintrag mit einem bestimmten Wert in einer Zeile
Dim first_col As Integer
Dim last_col As Integer
Dim col As Integer
Dim found As Range
Dim ws_MLB as Worksheet
Dim foo as String
set ws_MLB = ThisWorkbook.Sheet(1)
Set found = ws_MLB.Rows(1).Find(foo)
If Not found Is Nothing Then
col = found.Column
first_col = col
last_col = col
Do
found = ws_MLB.Rows(1).FindNext(found)
col = found.Column
If col < first_col Then
first_col = col
MsgBox ("This should not happen")
ElseIf col > last_col Then
last_col = col
End If
Loop While Not found Is Nothing And col <> first_col
Else
MsgBox ("not found")
End If
Aber auf diese Weise ich nur die den ersten Wert für beide first_col und last_col bekommen. Wenn ich mit der integrierten Excel-Suche nach der Zeichenfolge suche, finde ich mehrere Instanzen. Also ist die Schnur da. Habe ich einen Fehler gemacht oder gibt es einen besseren Weg?
Bearbeiten vergessen zu erwähnen, dass ich auch versucht, die Suchrichtung zu ändern, aber ich habe immer noch den ersten Eintrag.
.find ist wunderbar und all das, aber wäre es nicht einfacher, nur für die nächste Schleife zu verwenden? Beginne vorne und schaue in jede Zelle, bis du foo findest, dann beginne am Ende und arbeite rückwärts (für x = letzte Zelle bis 1 Schritt -1), bis du die letzte findest. – Hrothgar
Soweit ich festgestellt habe, ist das Finden viel schneller als das Iterieren. http://www.siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/. In diesem Fall könnte es schneller sein, aber ich wollte mich daran gewöhnen, dass ich es nicht mehr finde, aber es hat einfach nicht funktioniert. –
Ja, ohne Zweifel ist das Finden schneller als für/als nächstes, aber wirklich, wie breit kann es sein? Ich habe versucht, in letzter Zeit auch mehr zu finden, wenn auch bisher nur für vertikale Listen. Möglicherweise müssen Sie jedes Mal mehr Optionen aufrufen. Dies ist eine typische Art, wie ich find aufrufen ... Setze FindCell = shSrc.Range ("A1", shSrc.Cells (shBottom, "A")). Finde (Was: = StrValue, nach: = shc.Range ("A1 „), schau: = Special xlValues, LookAt: = xlPart) wenn FindCell Nichts ist dann 'eine Sache Else ' das andere tun Ende, wenn – Hrothgar