Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1692to1696
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

Zellen durchsuchen u Spalten ausblenden - Speed

Zellen durchsuchen u Spalten ausblenden - Speed
16.05.2019 13:56:56
Robert
Hallo liebe VBA-Profis,
ich habe zwar ein nettes Makro, das funktioniert. Aber es erscheint mir recht umständlich und läuft so langsam --- kann man das einfacher und schneller machen?
Was ich möchte:
Im Bereich (O4:AN95) - später vielleicht größer werdend - soll geschaut werden, ob in der jeweiligen Zeile einmal EIN Datum steht, das älter als heute ist (es stehen in fast allen Zellen Datumsangaben).
Es reicht, wenn ein Datum älter ist als heute: Dann soll die Zeile NICHT ausgeblendet werden, sonst schon. (Es sollen hinterher alle Zeilen da stehen mit einem vertrichenen Datum...)
Was ich bislang zusammengebastelt habe:
Sub Uberfaellig()
Dim zeile As Integer, spalte As Integer, zelle As Range, ausblenden As Boolean
For zeile = 4 To 95                     'zeilenweises Vorgehen
ausblenden = True                   'Standard soll ausblenden sein
If Cells(zeile, 1)  "" Then       'wenn die erste Spalte leer ist
= ganze Zeile leer,
dann Suche in dieser Zeile beenden
For spalte = 15 To 40           'jetzt Spalten durchsuchen
Set zelle = Cells(zeile, spalte)    'Inhalt der Zelle anschauen
If IsDate(zelle) And zelle 

Wo ist der Zeitfresser bzw. wie macht man das, wenn man sich mit VBA auskennt? :)
1000 Dank
Robert

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen durchsuchen u Spalten ausblenden - Speed
16.05.2019 14:37:48
onur

Sub Uberfaellig()
Dim z, s, found, dt
For z = 4 To 95
found = False
If Cells(z, 1)  "" Then found = True
If Not found Then
For s = 15 To 40
If IsDate(Cells(z, s)) And Cells(z, s) 

AW: Zellen durchsuchen u Spalten ausblenden - Speed
16.05.2019 14:38:35
onur
Muss heissen:
Rows(z).Hidden = found
AW: Zellen durchsuchen u Spalten ausblenden - Speed
17.05.2019 11:22:52
Robert
Hallo,
1000 Dank für die schnelle Rückmeldung (du hattest mir schon einmal bei einem anderen Thema geholfen - da hatte ich nur die Antworten-Funktion in diesem Forum zum Bedanken nicht kapiert, sorry.)!
Es klappt, wenn ich auch nochmals umgebastelt habe, da ich vermute, dass
Rows(z).Hidden = found
bewirkt, dass die Zeilen ausgeblendet werden, in denen ein vergangenes Datum gefunden wird. Es sollte genau umgekehrt sein.
Es rast zwar immer noch nicht wie die Wutz (aber das liegt wohl am Zelle-für-Zelle-Vergleichen), ist aber schon schneller und der Code ist viel schöner als meiner! :) Danke!
Merci
Robert
Anzeige
AW: Zellen durchsuchen u Spalten ausblenden - Speed
17.05.2019 11:27:29
EtoPHG
Hallo,
Umkehren (aus-ein-blenden):
Rows(z).Hidden = found

muss heissen
Rows(z).Hidden = Not found

Gruess Hansueli
AW: Zellen durchsuchen u Spalten ausblenden - Speed
17.05.2019 11:59:45
Robert
Hallo Hansueli,
genau - dachte ich auch. Aber irgendwie blendete er erst alle Zeilen aus und dann gar keine. :-(
Habe nun das hier draus gemacht, was zwar sichtbar arbeitet, aber funktioniert:
(Habe dabei die Variable und das Arbeiten wieder von "Finden" auf "Ausblenden" umgeschaltet, aber das ist wohl irrelevant, oder?
Und wenn Spalte 1 leer ist, ist's mir egal, was er macht. Überspringen geht schneller...)
Sub Uberfaellig()
Dim z, s, ausbl
For z = 4 To 95
ausbl = True
If Cells(z, 1) = "" Then
Exit For
Else
For s = 15 To 40
If IsDate(Cells(z, s)) And Cells(z, s) 
Gruß
Robert
Anzeige
AW: Zellen durchsuchen u Spalten ausblenden - Speed
17.05.2019 13:34:22
onur
Sorry!

Sub Uberfaellig()
Dim z, s, ausbl, dt
For z = 4 To 95
ausbl = true
If Cells(z, 1)  "" Then
For s = 15 To 40
If IsDate(Cells(z, s)) And Cells(z, s) 

AW: Zellen durchsuchen u Spalten ausblenden - Speed
17.05.2019 13:51:40
Daniel
Hi
Zeitfresser ist jeder Zugriff auf das Tabellenblatt, sei es lesend (nicht ganz so kritisch) oder schreibend/ausführend (sehr kritisch)
dabei ist hautsächlich die Anzahl der Zugriffe entscheidend und weniger die Anzahl der beim Zugriff verwendeten Zellen.
du solltest also immer versuchen, den Zugriff auf einzelne Zellen zu vermeiden und Arbeiten im Tabellenblatt möglichst in einem Schritt mit einem Zellblock durchführen.
In deinem Fall könntest du auch ganz ohne VBA arbeiten und dir in Spalte AO (oder der ersten freien Spalte am Tabellenende) mit der MIN-Funktion das kleinste Datum ausgeben lassen =Min(O4:AN4)
dann blendest du über den Autofilter alle Zeilen aus, in denen das Datum in Spalte AO größer gleich als Heute ist
per VBA dann so:
With ActiveSheet.Range("AO4:AO" & cells.SpecialCells(xlcelltypelastcell).Row)
.EntireRow.Hidden = False
.FormulaLocal = "=Wenn(MIN(O4:AN4)>=Heute();1;"""")"
if Worksheetfunction.Sum(.Cells) > 0 then
.Cells.SpecialCells(xlcelltypeformulas, 1).EntireRow.Hidden = True
end if
end with
gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige