Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA-Abfrage optimieren

Forumthread: VBA-Abfrage optimieren

VBA-Abfrage optimieren
06.01.2025 15:57:42
Andreas
Hallo Zusammen,

ich habe vor laaaaanger Zeit mal eine VBA geschrieben / geklaut, welches ich heute wieder rauskramen musste. nachdem ich es umgeschrieben habe viel mir ein, dass es mega langsam ist / war.

Ich möchte eine Übersichtstabelle für Abwesenheiten von MA erstellen.

Die Abwesenheiten sollen im Reiter "Datum erfassen" Tabelle4 geschrieben werden mit von bis. Das Makro soll entsprechend der MA-Namen die Zeiträume in der Tabelle eintragen.

Das Makro:
sucht Namen im Reiter "2025" Tabelle2 in Tabelle4 jeweils aber nach jedem möglichen Datum und das macht es ungeheuer langsam.

Ich möchte gern, dass es "etwas schneller" läuft. so wie es gerade ist benötigt es ca. 5 Min ohne das er einen Eintrag kopiert. Könnt Ihr mir "verständlich" helfen.

DANKEDANKE - Tabelle ist anbei

https://www.herber.de/bbs/user/174706.xlsm
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Abfrage optimieren
06.01.2025 22:50:21
Piet
Hallo Andreas

anbei deine Beispieldatei zurück. Mit einem (zwei) Makros, die dich überraschen werden.
Wie lange kannst du als Abnoe Taucher die Luft anhalten? - Schaffst du ca. 2 Minuten??

Meine Makros arbeiten schneller als du einatmen kannst! - Wetten um 1 Kasten Kölsch.
Das erste ist dein altes Makro mit drei For Next Schleifen. Ist aber lahm im Fehlerfall!
Mein neues Makro, Kombination aus For Next mit Find Methode, ist sagenhaft schnell.
https://www.herber.de/bbs/user/174716.xlsm

mfg Piet
Anzeige
AW: VBA-Abfrage optimieren
07.01.2025 16:49:07
Piet
Hallo Andreas

noch mal optimieren, ja, da hat Yal recht. Samstag, Sonntag sollte nicht ausgefüllt werden.
Feiertage kann ich damit aber nicht erfassen, es sei denn sie sind farblich markiert. (Innenfarbe)
Wenn du meine Änderung verstehst kannst du die Feiertage auch noch selbst im Code einbauen.

mfg Piet

           For c = 3 To LSP    '2025 Spalten

If .Cells(b, 1).Value = Tabelle4.Cells(a, 2).Value And _
.Cells(3, c).Value >= Tabelle4.Cells(a, 3).Value And _
.Cells(3, c).Value = Tabelle4.Cells(a, 4).Value Then
If Weekday(.Cells(2, c), 0) = 6 Or Weekday(.Cells(2, c), 0) = 7 Then
Else 'Samstag, Sonntag überspringen Weekday 6,7
.Cells(b, c).Value = Tabelle4.Cells(a, 5).Value
Mta = "ok" 'Mitarbeiter eingetragen
End If
End If
Next c
Anzeige
AW: VBA-Abfrage optimieren
07.01.2025 18:33:36
Yal
Moin,

ich meinte eher so ähnliches:

Public Sub DatenSchreiben_Find()

Dim rFind As Range
Dim LR As ListRow
Dim DatVon As Long
Dim DatBis As Long

Application.Calculation = xlCalculationManual
With ActiveWorkbook.Sheets("2025")
For Each LR In Range("Tabelle1").ListObject.ListRows
Set rFind = .Columns(1).Find(What:=LR.Range(1).Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not rFind Is Nothing Then
DatVon = LR.Range(2).Value + Month(LR.Range(2).Value) - DateSerial(Year(LR.Range(2).Value), 1, 1) + 2
DatBis = LR.Range(3).Value + Month(LR.Range(3).Value) - DateSerial(Year(LR.Range(3).Value), 1, 1) + 2
For c = DatVon To DatBis 'Falls monatsübergreifend
If Weekday(.Cells(3, c).Value, vbMonday) 6 And WorksheetFunction.CountIf(Worksheets("Meta-Daten").Range("K3:K22"), .Cells(3, c).Value) = 0 Then .Cells(rFind.Row, c).Value = LR.Range(4).Value
Next c
Else
Debug.Print LR.Range(1).Value & " - nicht gefunden!", vbInformation 'Ausgabe im Direktfenster
End If
Next
End With

Application.Calculation = xlCalculationAutomatic
End Sub

(nur spärsam gestestet...)

VG
Yal
Anzeige
AW: VBA-Abfrage optimieren
07.01.2025 06:50:32
Andreas
Moinmoin,

@Piet - meine Apnoe-Fähigkeiten sind OK und offensichtlich besser als meine VBA-Kenntnisse. Ich schaffe 1 1/2 Minuten.

Aber tatsächlich so schnell wie Dein Script bin ich nicht...Ich habe es sogar "verstanden" denke ich.

Ich küss Dein Herz - Danke für Deine Hilfe.

Andreas
Anzeige
AW: VBA-Abfrage optimieren
07.01.2025 11:17:42
Yal
Hallo Piet,

sieht -wie immer- gut aus.

Mein Vorschlag für einen Challenge für Dich: da es eine Zusammenhang zwischen Datum (von-bis) und Spaltennummer (pro Monat eine Spalte mehr), wäre es möglich den Bereich, der zu befüllen gilt, zu bestimmen und direkt reinzuschreiben, ohne die For-Schleife über alle 365+12 Spalten.
Da wäre nachzufragen, ob den Eintrag auch auf das Wochenende erfolgen darf. Sonst doch eine Schleife, aber nur zwischen von und bis.

VG
Yal

Anzeige
AW: VBA-Abfrage optimieren
07.01.2025 11:22:06
Andreas
Moin Yal,

vielen Dank dass Du das Thema aufgreifst, in der Theory sollen Wochenenden und Feiertage nicht beschrieben werden (aber da wollte ich selber "rumfriemeln zum gucken".

Ansonsten as i said...läuft super

ach ja Kölsch gibbet hier oben nicht - nur Matjes ;)

LG Andreas
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige