Excel / VBA - Wählen Sie Zellen zwischen 2 Schlüsselwörtern aus

  • Problem
  • Lösung

Problem

Ich versuche, ein Makro zu schreiben, das von der aktiven Zelle ausgeht - gehe die Spalte hoch und wähle etwa 20 Zellen aus und suche nach dem Suchwort "A" - wähle es aus. Dann sucht er in der Spalte nach dem nächsten Suchwort "B" (in diesem Fall die erste Instanz von irgendetwas mit einem $ -Wert) und wählt alle Zellen zwischen den beiden Suchwörtern aus und löscht alle Zeilen. Hier ist, was ich bisher habe (der erste Teil, in dem nach "N" gesucht wird, besteht darin, es auf den richtigen Datensatz zu bringen, den wir löschen möchten.

Codebeispiel:

 Do While True

Set Cell = Columns (11) .Find (What: = "N", _

Nach: = Zellen (11, 11), _

LookIn: = xlFormulas, _

LookAt: = xlPart, _

SearchOrder: = xlByRows, _

Suchrichtung: = xlNext, _

MatchCase: = False, _

SearchFormat: = False)

Wenn die Zelle nichts ist, beenden Sie Do

Cell.Select

ActiveCell.Select

ActiveCell.EntireRow.Range ("A1")

Bereich (Auswahl, Auswahl.Offset (-20, 0))

Aber der Code funktioniert nicht richtig.

Lösung

Sie müssten herausfinden, wo sich die erste Zelle befindet. und dann müssen Sie wieder herausfinden, wo sich die zweite Zelle befindet. Verwenden Sie die folgende Funktion

 Sub MyOrigSubDefHere ()

Verdunkeln Sie den ersten Treffer so lange wie möglich

LSecondHit As Long dimmen

Do While True

lFirstHit = getItemLocation ("N", Spalten (11),, False)

If (lFirstHit = 0) Dann Exit Do

lSecondHit = getItemLocation ("B", Range (Zellen (lFirstHit + 1, 11), Zellen (Rows.Count, 11)),, False)

If (lSecondHit = 0) Dann Exit Do

Zeilen (lFirstHit & ":" & lSecondHit) .Delete

Schleife

End Sub

Öffentliche Funktion getItemLocation (sLookFor As String, _

rngSearch As Range, _

Optional bFullString As Boolean = True, _

Optional bLastOccurance As Boolean = True, _

Optional bFindRow As Boolean = True) As Long

'finde die erste / letzte Zeile / Spalte innerhalb eines Bereichs für eine bestimmte Zeichenkette

Zelle als Bereich abdunkeln

ILookAt als Ganzzahl dimmen

ISearchDir als Ganzzahl dimmen

ISearchOdr als Ganzzahl dimmen

If (bFullString) _

Dann

iLookAt = xlWhole

Sonst

iLookAt = xlPart

End If

If (bLastOccurance) _

Dann

iSearchDir = xlPrevious

Sonst

iSearchDir = xlNext

End If

Wenn nicht (bFindRow) _

Dann

iSearchOdr = xlByColumns

Sonst

iSearchOdr = xlByRows

End If

Mit rngSearch

If (bLastOccurance) _

Dann

Set Cell = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

Sonst

Set Cell = .Find (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)

End If

Ende mit

Wenn Zelle dann nichts ist

getItemLocation = 0

Sonst nicht (bFindRow) _

Dann

getItemLocation = Cell.Column

Sonst

getItemLocation = Cell.Row

End If

Setze Zelle = Nichts

Funktion beenden

Danke an rizvisa1 für diesen Tipp.

Vorherige Artikel Nächster Artikel

Top-Tipps