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

Vom Makro-Rekorder zu VBA optimieren

Vom Makro-Rekorder zu VBA optimieren
heidi
Hallo an die Excel-Profil,
mein mit Rekorder aufgenommenes Makro ist sehr langsam an dieser Stelle. Im Forum lese ich immer wieder, dass man sich "Select" usw. sparen kann. Doch egal, wie ich es versuche zu ändern, bekomme ich dann Fehlermeldungen. Da ich dabei bin, mir zumindest ein bisschen VBA selbst beizubringen, bitte ich um Hilfe bei diesem - so denke ich - grundlegenden Thema.
Danke im Voraus,
Heidi
'Verschiedene Spalten werden umbenannt, andere umformatiert, usw.
Application.StatusBar = "Spaltenköpfe werden teilweise umbenannt. ... dann gehts gleich richtig los ..."
Columns("AL:AL").Select
Selection.NumberFormat = "dd/mm/yy;@"
Range("AM1").Select
ActiveCell.FormulaR1C1 = "KL_Umsatz in %"
Range("AO:AO,AQ:AQ").Select
Range("AO:AO,AQ:AQ,AS:AS,AU:AU,AW:AW,AY:AY").Select
Range("AY1").Activate
Selection.NumberFormat = "#,##0 $"
Range("AQ1").Select
ActiveCell.FormulaR1C1 = "Umsatz_2011"
Range("AR1").Select
ActiveCell.FormulaR1C1 = "Umsatz_2011_aktiv"
Range("AP1").Select
ActiveCell.FormulaR1C1 = "Umsatz_idl_12_Monate_aktiv"
Range("AS1").Select
ActiveCell.FormulaR1C1 = "Umsatz_2010"
Range("AT1").Select
ActiveCell.FormulaR1C1 = "Umastz_2010_aktiv"
Range("AU1").Select
ActiveCell.FormulaR1C1 = "Umsatz_2009"
Range("AV1").Select
ActiveCell.FormulaR1C1 = "Umsatz_2009_aktiv"
Range("AV2").Select
Range("AW1").Select
ActiveCell.FormulaR1C1 = "Umsatz_2008"
Range("AX1").Select
ActiveCell.FormulaR1C1 = "Umsatz_2008_aktiv"
Range("AY1").Select
ActiveCell.FormulaR1C1 = "Umsatz_2007"
Range("AZ1").Select
ActiveCell.FormulaR1C1 = "Umsatz_2007_aktiv"
Range("AZ2").Select
Range("BB:BB,BF:BF").Select
Range("BF1").Activate
Selection.NumberFormat = "dd/mm/yy;@"
Columns("BJ:BJ").Select
Range("BJ:BJ,BW:BW").Select
Range("BW1").Activate
Selection.NumberFormat = "dd/mm/yy;@"
Columns("BS:BT").Select
Selection.Delete Shift:=xlToLeft
Range("BW2").Select
Columns("CF:CG").Select
Selection.Delete Shift:=xlToLeft
Columns("CF:CF").Select
Selection.NumberFormat = "0.0%"
Columns("CG:CG").Select
Selection.NumberFormat = "#,##0 $"
Columns("CL:CL").Select
Columns("CP:CP").Select
Selection.NumberFormat = "dd/mm/yy;@"
Rows("1:1").Select
Range("CJ1").Activate
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Cells.Select
Cells.EntireColumn.AutoFit
Columns("AF:AF").ColumnWidth = 40.29

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Vom Makro-Rekorder zu VBA optimieren
18.02.2011 13:12:12
Klaus
Hi,
auf die schnelle:
Sub test()
With Application
.StatusBar = "Spaltenköpfe werden teilweise umbenannt. ... dann gehts gleich richtig los ... _
.ScreenUpdating = False
End With
Columns("AL:AL").NumberFormat = "dd/mm/yy;@"
Range("AM1").Value = "KL_Umsatz in %"
Range("AO:AO,AQ:AQ,AS:AS,AU:AU,AW:AW,AY:AY").NumberFormat = "#,##0 $"
Range("AQ1").Value = "Umsatz_2011"
Range("AR1").Value = "Umsatz_2011_aktiv"
Range("AP1").Value = "Umsatz_idl_12_Monate_aktiv"
Range("AS1").Value = "Umsatz_2010"
Range("AT1").Value = "Umastz_2010_aktiv"
Range("AU1").Value = "Umsatz_2009"
Range("AV1").Value = "Umsatz_2009_aktiv"
Range("AW1").Value = "Umsatz_2008"
Range("AX1").Value = "Umsatz_2008_aktiv"
Range("AY1").Value = "Umsatz_2007"
Range("AZ1").Value = "Umsatz_2007_aktiv"
Range("BB:BB,BF:BF").NumberFormat = "dd/mm/yy;@"
Range("BJ:BJ,BW:BW").NumberFormat = "dd/mm/yy;@"
Columns("BS:BT").Delete Shift:=xlToLeft
Columns("CF:CG").Delete Shift:=xlToLeft
Columns("CF:CF").NumberFormat = "0.0%"
Columns("CG:CG").NumberFormat = "#,##0 $"
Columns("CP:CP").NumberFormat = "dd/mm/yy;@"
With Rows("1:1")
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Cells.EntireColumn.AutoFit
Columns("AF:AF").ColumnWidth = 40.29
With Application
.ScreenUpdating = True
.StatusBar = "fertig"
End With
End Sub
lässt sich bestimmt noch weiter verkürzen, aber zum lernen erstmal die kleine Version :-)
Grüße,
Klaus M.vdT.
P.S.: ungetestet! Bei Fehlermeldungen bitte posten!
Anzeige
Lesestoff zum Thema .select
18.02.2011 13:16:14
Klaus
Nachtrag:
folgender Beitrag hat mir damals sehr geholfen, die Funktionsweise des Rekorders zu verstehen und select-frei zu programmieren:
http://www.online-excel.de/excel/singsel_vba.php?f=78
Viel Spaß beim lesen!
Grüße,
Klaus M.vdT.
AW: Vom Makro-Rekorder zu VBA optimieren
18.02.2011 13:13:47
Rudi
Hallo,
das musss ca so aussehen:
  Application.StatusBar = "Spaltenköpfe werden teilweise umbenannt. ... dann gehts gleich  _
richtig los ..."
Columns("AL:AL").NumberFormat = "dd/mm/yy;@"
Range("AM1").FormulaR1C1 = "KL_Umsatz in %"
Range("AO:AO,AQ:AQ,AS:AS,AU:AU,AW:AW,AY:AY").NumberFormat = "#,##0 $"
Range("AQ1") = "Umsatz_2011"
Range("AR1") = "Umsatz_2011_aktiv"
Range("AP1") = "Umsatz_idl_12_Monate_aktiv"
Range("AS1") = "Umsatz_2010"
Range("AT1") = "Umastz_2010_aktiv"
Range("AU1") = "Umsatz_2009"
Range("AV1") = "Umsatz_2009_aktiv"
Range("AW1") = "Umsatz_2008"
Range("AX1") = "Umsatz_2008_aktiv"
Range("AY1") = "Umsatz_2007"
Range("AZ1") = "Umsatz_2007_aktiv"
Range("BB:BB,BF:BF").NumberFormat = "dd/mm/yy;@"
Range("BJ:BJ,BW:BW").NumberFormat = "dd/mm/yy;@"
Columns("BS:BT").Delete Shift:=xlToLeft
Columns("CF:CG").Delete Shift:=xlToLeft
Columns("CF:CF").NumberFormat = "0.0%"
Columns("CG:CG").NumberFormat = "#,##0 $"
Columns("CP:CP").NumberFormat = "dd/mm/yy;@"
With Range("CJ1")
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Cells.EntireColumn.AutoFit
Columns("AF:AF").ColumnWidth = 40.29

Gruß
Rudi
Anzeige
Danke, das ging superschnell!
18.02.2011 13:20:40
heidi
Hallo,
schon mal besten Dank. Ich werde das am Wochenende alles lesen und ausprobieren.
Wünsche ein schönes WE, Grüße,
Heidi
Danke für die Rückmeldung! o.w.T.
18.02.2011 13:23:11
Klaus
.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige