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

Tuning eines Makros

Tuning eines Makros
Kasimir
Hallo an alle!
Ich bräuchte mal wieder Hilfe. Ich habe 2 Tabellenblätter. Eines mit Rechnungsdaten und eines Mit Rechnungspositionen. In beiden Tabellen gibt es eine Spalte mit Rechnungsnummern. Ich gehe nun Zeile für Zeile in dem Blatt mit den Positionen lese die Rechnungsnummer aus und suche diese im Rechnungsblatt. Wenn gefunden schreibe ich in das Blatt mit den Positionen das Rechnungsdatum, welches in der gleichen Zeile wie die gefundene Rechnungsnummer steht.
Im Moment erledige ich das mit nachfolgendem Code.
Modul Modul2
Option Explicit 
 
Sub Auswertung() 
Dim lngLastRow As Long 
Dim lngLastRowRech_Pos As Long 
Dim lngRowRechnung As Long 
 
Dim strAddresse As String 
Dim strSuchtext As String 
 
Dim rngSuchbereich As Range 
 
Dim dblSumme As Double 
Dim dblSummeErtrag As Double 
 
Dim wksRech_Pos As Worksheet 
Dim wksRechnung As Worksheet 
 
Dim wkbAktuelleDatei As Workbook 
 
Dim dtStartime As Date 
Dim dtEndtime As Date 
 
'Startzeit ermitteln 
dtStartime = Time 
 
With Application 
 .ScreenUpdating = False 
 .EnableEvents = False 
 .DisplayAlerts = False 
 .Calculation = xlCalculationManual 
 .ErrorCheckingOptions.BackgroundChecking = False 
 .CalculateBeforeSave = False 
End With 
 
Set wkbAktuelleDatei = ActiveWorkbook 
 
Set wksRech_Pos = wkbAktuelleDatei.Sheets("Positionen") 
Set wksRechnung = wkbAktuelleDatei.Sheets("Rechnung") 
 
 
With wksRech_Pos 
 lngLastRowRech_Pos = .Cells(Rows.Count, 1).End(xlUp).Row 
 
 For lngRowRechnung = 2 To wksRechnung.Cells(Rows.Count, 1).End(xlUp).Row 
 
 'Text in Statusbar 
 Application.StatusBar = "Zeile Rechnung: " & lngRowRechnung 
 DoEvents 
 
 strSuchtext = wksRechnung.Cells(lngRowRechnung, 1) 
 
 Set rngSuchbereich = .Range("B1:B" & lngLastRowRech_Pos).Find(What:=strSuchtext, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True) 
 
 If Not rngSuchbereich Is Nothing Then 
 strAddresse = rngSuchbereich.Address 
 
 Do 
 Application.StatusBar = "Zeile Rechnung: " & lngRowRechnung & " - Copy Datum" 
 DoEvents 
 
 'Datum kopieren 
 .Cells(rngSuchbereich.Row, 20) = wksRechnung.Cells(lngRowRechnung, 4) 
 
 Set rngSuchbereich = .Range("B1:B" & lngLastRowRech_Pos).FindNext(rngSuchbereich) 
 Loop While Not rngSuchbereich Is Nothing And rngSuchbereich.Address <> strAddresse 
 End If 
 Next 
End With 
 
With Application 
 .ScreenUpdating = True 
 .EnableEvents = True 
 .DisplayAlerts = True 
 .Calculation = xlCalculationAutomatic 
 .ErrorCheckingOptions.BackgroundChecking = True 
 .CalculateBeforeSave = True 
 .Calculate 
 .StatusBar = "" 
End With 
 
'Endzeit ermitteln 
dtEndtime = Time 
 
'Verstrichene Zeit erechnen 
MsgBox "Dauer der Auswertung:" & vbLf & Format(dtEndtime - dtStartime, "hh:mm:ss"), vbInformation 
 
End Sub 
 

[size=8]Code eingefügt mit [url=http://vbahtml.origo.ethz.ch] VBA in HTML 2.0.0.3[/url][/size]
Der Funktioniert auch soweit. Allerdings dauert das Makro gute 45 Minuten, da es sich im Blatt mit den Positionen um ca. 75000 Zeilen und im Rechnungsblatt um ca. 25000 Zeilen handelt. Hat eventuell jemand einen kleinen Tuningtipp zu meinem Makro, so dass das Makro vielleicht nicht ganz so lange benötigt?
Danke Euch schon mal im Voruas für Eure Tipps,
Kasimir

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

Betreff
Benutzer
Anzeige
AW: Tuning eines Makros
12.04.2012 16:50:04
Rudi
Hallo,
warum nicht einfach per SVERWEIS()?
Wenn ich das richtig sehe, ist die ReNr in beiden Listen in B und das Datum in Rechnung!D:D und soll nach Positionen!T:T
.....
Set wkbAktuelleDatei = ActiveWorkbook
Set wksRech_Pos = wkbAktuelleDatei.Sheets("Positionen")
Set wksRechnung = wkbAktuelleDatei.Sheets("Rechnung")
With wksRech_Pos
lngLastRowRech_Pos = .Cells(Rows.Count, 1).End(xlUp).Row
With .Range(.Cells(2, 20), .Cells(lngLastRowRech_Pos, 20))
.FormulaR1C1 = "=vlookup(rc2,Rechnungen!C2:C4,3,0)"
.Value = .Value
.SpecialCells(xlCellTypeConstants, xlErrors).Clear
End With
End With
With Application
.ScreenUpdating = True
.....

Gruß
Rudi
Anzeige
AW: Tuning eines Makros
12.04.2012 17:48:52
Kasimir
Hallo Rudi,
auf die Idee wäre ich nie gekommen. Danke Dir dafür. Allerdings hätte ich da noch eine Frage: Kann ich mit dem SVERWEIS auch irgendwie ermitteln in welcher Zeile die Rechnungsnummer steht und diese dann in Spalte 21 eintragen lassen?
Nochmal Danke und Gruß,
Kasimir
AW: Tuning eines Makros
12.04.2012 18:28:20
Rudi
Hallo,
mit SVERWEIS nicht, aber mit VERGLEICH
.....
Set wkbAktuelleDatei = ActiveWorkbook
Set wksRech_Pos = wkbAktuelleDatei.Sheets("Positionen")
Set wksRechnung = wkbAktuelleDatei.Sheets("Rechnung")
With wksRech_Pos
lngLastRowRech_Pos = .Cells(Rows.Count, 1).End(xlUp).Row
With .Range(.Cells(2, 20), .Cells(lngLastRowRech_Pos, 20))
.FormulaR1C1 = "=vlookup(RC2, Rechnungen!C2:C4, 3, 0)"
.Value = .Value
.SpecialCells(xlCellTypeConstants, xlErrors).Clear
End With
With .Range(.Cells(2, 21), .Cells(lngLastRowRech_Pos, 21))
.FormulaR1C1 = "=Match(RC2, Rechnungen!C2:C2, 0)"
.Value = .Value
.SpecialCells(xlCellTypeConstants, xlErrors).Clear
End With
End With
With Application
.ScreenUpdating = True
.....

Gruß
Rudi
Anzeige
AW: Tuning eines Makros
12.04.2012 19:02:01
Kasimir
Hallo Rudi!
Danke Dir für Deine Antwort, aber leider werden mir in Spalte 21 nur als Zeilenindexzahl eine 0 eingetragen. Woran kann denn das liegen?
Gruß,
Kasimir
AW: Tuning eines Makros
12.04.2012 19:46:13
Rudi
Hallo,
evtl so:
  With wksRech_Pos
lngLastRowRech_Pos = .Cells(Rows.Count, 1).End(xlUp).Row
With .Range(.Cells(2, 20), .Cells(lngLastRowRech_Pos, 20))
.FormulaR1C1 = "=vlookup(RC2, Rechnungen!C2:C4, 3, 0)"
Application.Calculate
.Value = .Value
.SpecialCells(xlCellTypeConstants, xlErrors).Clear
End With
With .Range(.Cells(2, 21), .Cells(lngLastRowRech_Pos, 21))
.FormulaR1C1 = "=Match(RC2, Rechnungen!C2:C2, 0)"
Application.Calculate
.Value = .Value
.SpecialCells(xlCellTypeConstants, xlErrors).Clear
End With
End With

Gruß
Rudi
Anzeige
AW: Tuning eines Makros
12.04.2012 20:01:17
Kasimir
Hallo Rudi!
Supi, danke Dir für Deine Antwort. Dank Deiner Lösung bin ich ein ganzes Stück weitergekommen und vor allem schneller was das Abbarbeiten des Makros angeht.
Wünsche Dir noch einen schönen Abend,
Kasimir

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige