zum Verstehen:
26.06.2013 11:38:11
Klaus
Hallo Thomas,
wenn du die Optimierung des Code verstehen willst, ergänze ihn mal um diese fettgedruckten Zeilen und gehe ihn dann im Einzelschrittmodus (F8) durch, dann siehst du gut was passiert:
Option Explicit
Sub Machs()
End Sub
Application.ScreenUpdating = False
Const Headline As Long = 1
Const AusgabeSpalte As Long = 23
Dim SpalteVor As Long
Dim SpalteNach As Long
Dim WKA As Sheets
Dim WKS As Worksheet
Dim LZeile As Integer
Set WKA = Sheets(Array("Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Sep", "Okt", "Nov", "Dez"))
For Each WKS In WKA
With WKS
.Activate
LZeile = .Cells.SpecialCells(xlCellTypeLastCell).Row
SpalteVor = WorksheetFunction.Match("Vorname", .Rows(Headline), False)
SpalteNach = WorksheetFunction.Match("Nachname", .Rows(Headline), False)
With .Range(.Cells(2, AusgabeSpalte), .Cells(LZeile, AusgabeSpalte))
.Select
.FormulaR1C1 = "=RC" & SpalteVor & "&"" ""&RC" & SpalteNach
.Value = .Value
End With
End With
Next WKS
End Sub
Du siehst, der Code geht einmalig in jedes Blatt, und führt dort die Operation (Vor+Nachname verknüpfen) je einmal für den gesamten Bereich aus.
Im Anschluss änderst du mal den Code vor der Optimierung so, dass er auch mit F8 durchgeschaut werden kann:
Sub Machs()
Application.ScreenUpdating = False
Const headline As Long = 1 'Überschriften in Zeile 1!
Dim spalteVor As Long
Dim spalteNach As Long
Dim WKA As Sheets
Dim WKS As Worksheet
Dim LZeile As Integer
Dim Zeile As Integer
Set WKA = Sheets(Array("Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Sep", "Okt", "Nov", "Dez"))
For Each WKS In WKA
WKS.Activate
LZeile = WKS.Cells.SpecialCells(xlCellTypeLastCell).Row
spalteVor = WorksheetFunction.Match("Vorname", WKS.Rows(headline), False)
spalteNach = WorksheetFunction.Match("Nachname", WKS.Rows(headline), False)
For Zeile = LZeile To 2 Step -1
WKS.Cells(Zeile, 23).Select
WKS.Cells(Zeile, 23) = WKS.Cells(Zeile, spalteVor) & " " & WKS.Cells(Zeile, spalteNach)
Next Zeile
Next
End Sub
Ich denke aber, diese Variante wirst du dir nicht bis zum Ende ansehen, je nachdem wieviele Daten da stehen :-) Wenn der Code das hunderste Mal innerhalb der Schleife wiederholt wird, wird es schnell langweilig :-)
Und das ist dann auch der Grund, warum es ohne Schleife so viel schneller ist!
Viele Grüße und viel Spass beim nachvollziehen,
Klaus M.vdT.