Liste schnell durchsuchen u. Zelle färbe
17.03.2021 16:02:21
Georg
Eine aufsteigend sortierte Zahlenliste möchte ich möglich schnell "durchsuchen", um Zellen die den Wert 888 enthalten gelb zu färben.
Angelehnt an den Quicksort, halte ich es für recht effektiv, sich immer den Wert der vorher ermittelten Listenmitte anzuschauen, um dann wiederum von der ersten Hälfte wieder die Mitte zu ermitteln für die Wertüberprüfung, usw.
Dazu habe ich eine Skizze erstellt, die den Ablauf schematisch darstellt:
Spalte A : aufsteigend sortierte Zahlenliste
Von der Gesamtzeilenanzahl wird zuerst die Mitte ermittelt
Dann wird der Wert von der Mitte mit 888 verglichen
Wenn kein 888 vorhanden, wird wieder die Mitte der oberen Hälfte ermittelt, usw.
Mein erstes Coding:
Sub Test_Neu()
Dim intUnten As Integer
Dim intOben As Integer
Dim intMitte As Integer
Dim intZaehler As Integer
Dim blnSchalterOben As Boolean
Dim blnSchalterUnten As Boolean
Dim blnSchalter As Boolean
blnSchalterOben = False
blnSchalterUnten = False
intOben = 1
intUnten = Cells(Rows.Count, 1).End(xlUp).Row
intMitte = (intUnten + intOben) / 2
Debug.Print intOben
Debug.Print intMitte
Debug.Print intUnten
blnSchalter = True
Do
If Cells(intMitte, 1).Value = 801 Then
intZaehler = intMitte
Do Until Cells(intZaehler, 1).Value 888
Cells(intZaehler, 1).Interior.Color = 65535 'gelb
intZaehler = intZaehler - 1
Loop
blnSchalterOben = True
intZaehler = intMitte
Do Until Cells(intZaehler, 1).Value 888
Cells(intZaehler, 1).Interior.Color = 65535 'gelb
intZaehler = intZaehler + 1
Loop
blnSchalterUnten = True
Else
If blnSchalter = True Then
intUnten = intMitte
intMitte = (intUnten + intOben) / 2
Else
' intUnten = intMitte
intMitte = ((intMitte + intOben) / 2) + intMitte
End If
If intMitte = intUnten Then
' intOben = 1
intUnten = Cells(Rows.Count, 1).End(xlUp).Row
' intMitte = (intUnten + intOben) / 2
intOben = (intUnten + intOben) / 2
blnSchalter = False
End If
End If
Loop Until (blnSchalterOben = True And blnSchalterUnten = True) Or (intMitte = intUnten)
End Sub
Vielen Dank für Eure Ideen.
VG, Georg