Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1140to1144
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wert in Spalte weitersuchen (rückwärts)

Wert in Spalte weitersuchen (rückwärts)
Luca-Darius
Hallo an die VBA-Experten,
ich suche ein Makro was folgendes realisieren kann:
In Spalte D meiner Tabelle (Tabelle mit 32.000 Zeilen) sind nur wenige (oder gar keine) Zellen mit dem Wert 1 befüllt. In Spalte A steht in jeder Zelle ein Datum.
Ich möchte mit einer Input-Box die unterste Zelle in Spalte D mit dem Wert 1 finden und das dazugehörige Datum aus Spalte A soll dann in einer Message-Box ausgegeben werden. Bei jedem weiteren Klick auf den OK-Button der Input-Box soll die "Suche und Datumsausgabe" nach oben fortgeführt werden.
Wird keine Zahl 1 in Spalte D gefunden soll in einer Infobox "Kein zutreffendes Datum gefunden !" ausgeben werden und das Makro soll ohne weitere "Fehlermeldung" beendet werden.
Kann der OK-Button auch anders benannt werden? "OK" könnte am besten durch "Datum suchen" ersetzt werden. Ein zweiter Button mit "Abbrechen" soll das Makro jederzeit beenden/abbrechen können - das wäre wirklich perfekt!
Vielen Dank für eure Hilfe - Mfg Luca-Darius
AW: Wert in Spalte weitersuchen (rückwärts)
02.03.2010 14:26:09
David
Hallo Luca,
warum nicht einfach per Autofilter?
Gruß
David
AW: Wert in Spalte weitersuchen (rückwärts)
02.03.2010 14:58:08
Uwe
Hallo,

Sub aaa()
Dim rngC As Range, rngF As Range
On Error Resume Next
With Columns(4)
Set rngF = .Find(What:="1", after:=.Cells(1), LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
Set rngC = rngF
If Not rngF Is Nothing Then
Do
MsgBox Cells(rngF.Row, 1)
Set rngF = .FindPrevious(rngF)
Loop Until rngC.Address = rngF.Address
Else
MsgBox "Kein zutreffendes Datum gefunden !"
End If
End With
End Sub
Der OK-Button lässt sich nicht umbenennen.
Gruß Uwe
Anzeige
AW: Wert in Spalte weitersuchen (rückwärts)
02.03.2010 21:32:48
Luca-Darius
Hallo David,
Autofilter ist deshalb ausgeschieden, da nach einer einmaligen Filterung der Rechner aufgrund der Zeilenanzahl so belastet wird, dass eine Filterung nach einem weiteren Wert erst nach ca. 30 Sekunden möglich ist.
Hallo Uwe,
dein VBA-Code funktioniert gut. Es stellen sich jedoch noch zwei Probleme.
1) Es dauert ca. 15 Sekunden bis in der Spalte der erste Wert von unten gefunden wird. Könnte man in
dem VBA-Code den Zellbereich (E2 bis E31047) eingrenzen, um schneller zum ersten Wert (die
unterste Zahl 1 in Spalte E) zu gelangen. Sonst fängt er doch bestimmt in der Zeile 65.000 an zu
suchen, was natürlich dauert - oder ?
2) Wenn ich z.B. 300 Treffer habe möchte ich die Suche auch vorzeitig abbrechen können. Ein Klick auf das
Beenden-Kreuzchen in der Msg-Box funktioniert natürlich nicht. Was gibt es für Möglichkeiten ohne das
ganze Excel-Programm beenden/abschießen zu müssen ?
Danke - Luca-Darius
Anzeige
AW: Wert in Spalte weitersuchen (rückwärts)
02.03.2010 22:10:00
Uwe
Hallo Luca-Darius,
die Find-Methode ist eigentlich die schnellste. Daran kann die Verzögerung nicht liegen.
Ich habe die Spalte mal komplett gefüllt und nur in Zeile 10 eine 1 eingetragen.
Die MsgBox kam ohne spürbare Verzögerung.
Deshalb habe ich zu Beginn mal eine Umschaltung auf manuelle Berechnung eingebaut.
Vielleicht hilft das.

Sub ZeigeEinser()
Dim rngC As Range, rngF As Range
Dim iMsgBox As Integer, iCalc As Integer
iCalc = Application.Calculation
Application.Calculation = xlCalculationManual
On Error Resume Next
With Columns(4)
Set rngF = .Find(What:="1", after:=.Cells(1), LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
Set rngC = rngF
If Not rngF Is Nothing Then
Do
iMsgBox = MsgBox(Cells(rngF.Row, 1), vbRetryCancel)
Set rngF = .FindPrevious(rngF)
Loop Until rngC.Address = rngF.Address Or iMsgBox = 2
Else
MsgBox "Kein zutreffendes Datum gefunden !"
End If
End With
Application.Calculation = iCalc
End Sub
Gruß Uwe
Anzeige
AW: Wert in Spalte weitersuchen (rückwärts)
03.03.2010 00:47:59
Luca-Darius
Hallo Uwe,
Super - Problem 2 ist auf jeden Fall gelöst.
Bei Problem 1 habe ich festgestellt, wenn die "leeren Zellen" in Spalte D wirklich leer sind (gelöscht), dann funktioniert der Zugriff (wie in deinem Test) ohne Verzögerung. Meine "leeren Zellen" sind allerdings Formeln, die als Ergebnis eine leere Zelle ausgeben. Da in jeder Zelle ein Formel steht dauert die Find-Methode wirklich mehrere Sekunden. Selbst kopieren und dann "Einfügen Wert" macht die Prozedur nicht schneller, denn die nun leeren Zellen scheinen auch noch irgendetwas zu beinhalten, was das Ganze langsam macht. Kann man irgendwie die Formeln, die nur als Ergebnis "leeren Zellen" ausgeben bei der Suche ignorieren und so direkt zu der Zelle springen, die den Wert 1 ausgiebt ?
Mfg - Luca-Darius
Anzeige
AW: Wert in Spalte weitersuchen (rückwärts)
03.03.2010 09:46:04
Uwe
Hallo Luca-Darius,
das vorherige Prüfen auf nicht NichtLeer würde den Code langsamer machen.
Aber probiere mal diese Variante:

Sub ZeigeEinser_2()
Dim i As Long, vArray As Variant
vArray = Columns(4).Value
For i = UBound(vArray) To 1 Step -1
If vArray(i, 1) = 1 Then
If MsgBox(Cells(i, 1), vbRetryCancel) = vbCancel Then Exit For
End If
Next i
End Sub
Gruß Uwe
AW: Wert in Spalte weitersuchen (rückwärts)
03.03.2010 14:25:55
Luca-Darius
Hallo Uwe,
suuuuuuuuuuuper - das wars - ich bin begeistert !!!
Mfg - Luca-Darius

374 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige