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

Code schneller?

Code schneller?
20.07.2016 13:15:25
Tim
Hallo
kann man diesen Code schneller machen?:
Sub Test()
Range("A4") = "=IF(AND('Daten aus CS7'!R[-2]C="""",'Daten aus CS7'!R[-2]C=0),"""",'Daten aus  _
CS7'!R[-2]C)"
Range("B4") = "=IF(RC[-1]="""","""",IFERROR(VLOOKUP(RC[5],'Daten aus SAP    '!C[-1]:C[2],2, _
FALSE),""Daten prüfen""))"
Range("C4") = "=IF('Daten aus CS7'!R[-2]C[4]="""","""",'Daten aus CS7'!R[-2]C[4])"
Range("D4") = "=IF('Daten aus CS7'!R[-2]C[4]="""","""",'Daten aus CS7'!R[-2]C[4])"
Range("E4") = "=IF(RC[-4]="""","""",IFERROR(VLOOKUP(RC[2],'Daten aus SAP    '!C[-4]:C[-1],4, _
FALSE),""Daten prüfen""))"
Range("F4") = "=IF(RC[-5]="""","""",IFERROR(VLOOKUP(RC[1],'Daten aus SAP    '!C[-5]:C[-2],3, _
FALSE),""Daten prüfen""))"
Range("G4") = "=IF('Daten aus CS7'!R[-2]C[-4]="""","""",'Daten aus CS7'!R[-2]C[-4])"
Range("H4") = "=IF('Daten aus CS7'!R[-2]C[-3]="""","""",'Daten aus CS7'!R[-2]C[-3])"
Range("I4") = "=IF('Daten aus CS7'!R[-2]C="""","""",'Daten aus CS7'!R[-2]C)"
Range("A4:I4").AutoFill Destination:=Range("A4:I" & Cells(Rows.Count, "A").End(xlUp).Row),  _
Type:=xlFillDefault
Columns("A:I").Select
Range("I2").Activate
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("A4").Select
End Sub
Besten Dank
TIM

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

Betreff
Datum
Anwender
Anzeige
AW: Code schneller?
20.07.2016 13:25:27
Hajo_Zi
verzichte auf select.
Option Explicit
Sub Test()
Range("A4") = "=IF(AND('Daten aus CS7'!R[-2]C="""",'Daten aus CS7'!R[-2]C=0),"""",'Daten  _
aus CS7 '!R[-2]C)"
Range("B4") = "=IF(RC[-1]="""","""",IFERROR(VLOOKUP(RC[5],'Daten aus SAP    '!C[-1]:C[2],2,  _
FALSE),""Daten prüfen""))"
Range("C4") = "=IF('Daten aus CS7'!R[-2]C[4]="""","""",'Daten aus CS7'!R[-2]C[4])"
Range("D4") = "=IF('Daten aus CS7'!R[-2]C[4]="""","""",'Daten aus CS7'!R[-2]C[4])"
Range("E4") = "=IF(RC[-4]="""","""",IFERROR(VLOOKUP(RC[2],'Daten aus SAP    '!C[-4]:C[-1],4, _
FALSE),""Daten prüfen""))"
Range("F4") = "=IF(RC[-5]="""","""",IFERROR(VLOOKUP(RC[1],'Daten aus SAP    '!C[-5]:C[-2],3, _
FALSE),""Daten prüfen""))"
Range("G4") = "=IF('Daten aus CS7'!R[-2]C[-4]="""","""",'Daten aus CS7'!R[-2]C[-4])"
Range("H4") = "=IF('Daten aus CS7'!R[-2]C[-3]="""","""",'Daten aus CS7'!R[-2]C[-3])"
Range("I4") = "=IF('Daten aus CS7'!R[-2]C="""","""",'Daten aus CS7'!R[-2]C)"
Range("A4:I4").AutoFill Destination:=Range("A4:I" & Cells(Rows.Count, "A").End(xlUp).Row),  _
_
Type:=xlFillDefault
With Columns("A:I")
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
End With
End Sub

Anzeige
AW: Code schneller?
20.07.2016 14:35:58
snb

With Columns("A:I").Borders
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With

AW: Code schneller?
20.07.2016 18:05:37
Daniel
Columns("A:I").Borders.Weight = xlThin
mit Hilfe einer...
20.07.2016 13:26:15
Oberschlumpf
...Bsp-Datei...
Hallo Tim,
...die du uns per Upload zur Verfügung stellst, und die auch Bsp-Daten enthält, könnte man dir vielleicht noch schneller helfen.
Ciao
Thorsten
AW: Code schneller?
20.07.2016 13:54:28
Daniel
Hi
am Code selbst gibt es nicht allzuviel zu verbessern.
ich würde die Rahmenlinien nicht über das ganze Blatt ziehen, sondern nur bis zur letzten Zeile der Tabelle. Ansonsten kann es passieren, dass Excel das ganze Blatt als genutzten Bereich erkennt was Speicherplatz und Rechenzeit in den Formeln kostet.
auch würde ich die Formeln gleich in alle Zellen schreiben und nicht über den Autofill gehen.
ebenso bei den Rahmenlinien musst du im Code nicht genau das machen, was der Recorder aufzeichnet.
Es reicht, die entscheidende Eigenschaft zu ändern, in diesem Fall .Weight.
bei .LineStyle, .Colorindex und .TintAndShade hast du Standarwerte, die man nicht extra setzen muss:
bei den Formeln würde ich versuchen, soviele Zellbezüge wie möglich auf Absolut zu setzen. Dann wird in der R1C1-Addressierungsart die Formel kürzer und leichter lesbar.
Sub Test()
Dim LZ As Long
LZ = Cells(Rows.Count, 1).End(xlUp).Row
With Range("A4:I" & LZ)
.Columns(1).FormulaR1C1 = "=IF(AND('Daten aus CS7'!R[-2]C="""",'Daten aus CS7'!R[-2]C=0),"""",' _
Daten aus CS7'!R[-2]C)"
.Columns(2).FormulaR1C1 = "=IF(RC[-1]="""","""",IFERROR(VLOOKUP(RC[5],'Daten aus SAP    '!C[-1]: _
C[2],2,FALSE),""Daten prüfen""))"
.Columns(3).FormulaR1C1 = "=IF('Daten aus CS7'!R[-2]C[4]="""","""",'Daten aus CS7'!R[-2]C[4])"
.Columns(4).FormulaR1C1 = "=IF('Daten aus CS7'!R[-2]C[4]="""","""",'Daten aus CS7'!R[-2]C[4])"
.Columns(5).FormulaR1C1 = "=IF(RC[-4]="""","""",IFERROR(VLOOKUP(RC[2],'Daten aus SAP    '!C[-4]: _
C[-1],4,FALSE),""Daten prüfen""))"
.Columns(6).FormulaR1C1 = "=IF(RC[-5]="""","""",IFERROR(VLOOKUP(RC[1],'Daten aus SAP    '!C[-5]: _
C[-2],3,FALSE),""Daten prüfen""))"
.Columns(7).FormulaR1C1 = "=IF('Daten aus CS7'!R[-2]C[-4]="""","""",'Daten aus CS7'!R[-2]C[-4])" _
.Columns(8).FormulaR1C1 = "=IF('Daten aus CS7'!R[-2]C[-3]="""","""",'Daten aus CS7'!R[-2]C[-3])" _
.Columns(9).FormulaR1C1 = "=IF('Daten aus CS7'!R[-2]C="""","""",'Daten aus CS7'!R[-2]C)"
End With
With Range("A1:I" & LZ)
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
End With
End Sub
aber ich vermute mal, dass der eigentliche Zeitfresser die VLookUps sind.
da du die Variante mit 4. Parameter = Falsch verwendest, brauchen die bei grossen Listen sehr viel Rechenzeit.
Wesentlich schneller wird der SVerweis mit 4. Parameter = Wahr berechnet.
hierbei musst du aber folgendes beachten:
1. die Quelltabelle 'Daten aus SAP '!A:D muss nach Spalte A aufsteigend sortiert sein.
2. es gibt keinen Fehler, wenn der Suchbegriff nicht gefunden wird, sondern es wird der nächstkleinere Wert als Ergebnis verwendet.
daher musst du den Formelteil:
WENNFEHLER(SVERWEIS(Suchwert;Suchmatrix;Spalte;0);"Daten prüfen")
so abändern:
WENN(SVERWEIS(Suchwert;Suchmatrix;1;1)=Suchwert;SVERWEIS(Suchwert;Suchmatrix;Spalte;1);"Daten prüfen)
Gruß Daniel
Anzeige
AW: Code schneller?
20.07.2016 14:50:51
snb

Sub M_snb()
sn = Sheets("Daten aus CS7").Cells(1).CurrentRegion
st = Sheets("Daten aus SAP").Cells(1).CurrentRegion
sp = Cells(1).CurrentRegion
For j = 4 To UBound(sp)
For jj = 1 To UBound(st)
If st(j, 1) = sn(j - 2, 1) Then Exit For
Next
If jj 

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige