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

VBA kürzer damit Makro schneller wird

VBA kürzer damit Makro schneller wird
06.11.2014 00:45:34
mehmet
Hallo Forum,
wie könnte man das Makro mit Schleife verkürzen:
Sheets("OL_test_OneLeg3d").Range("g3") = "=IF(n3="""","""",IF(n3=""- "","""",IF(IF(n3=""- "","""",MOD(m3-n3,1))<IF(n3=""- "","""",MOD(n3-m3,1)),"" - "","" + "")))"
Sheets("OL_test_OneLeg3d").Range("g4") = "=IF(n4="""","""",IF(n4=""- "","""",IF(IF(n4=""- "","""",MOD(m4-n4,1))<IF(n4=""- "","""",MOD(n4-m4,1)),"" - "","" + "")))"
Sheets("OL_test_OneLeg3d").Range("g5") = "=IF(n5="""","""",IF(n5=""- "","""",IF(IF(n5=""- "","""",MOD(m5-n5,1))<IF(n5=""- "","""",MOD(n5-m5,1)),"" - "","" + "")))"
Sheets("OL_test_OneLeg3d").Range("g6") = "=IF(n6="""","""",IF(n6=""- "","""",IF(IF(n6=""- "","""",MOD(m6-n6,1))<IF(n6=""- "","""",MOD(n6-m6,1)),"" - "","" + "")))"
Sheets("OL_test_OneLeg3d").Range("g7") = "=IF(n7="""","""",IF(n7=""- "","""",IF(IF(n7=""- "","""",MOD(m7-n7,1))<IF(n7=""- "","""",MOD(n7-m7,1)),"" - "","" + "")))"
Sheets("OL_test_OneLeg3d").Range("g8") = "=IF(n8="""","""",IF(n8=""- "","""",IF(IF(n8=""- "","""",MOD(m8-n8,1))<IF(n8=""- "","""",MOD(n8-m8,1)),"" - "","" + "")))"
Sheets("OL_test_OneLeg3d").Range("g9") = "=IF(n9="""","""",IF(n9=""- "","""",IF(IF(n9=""- "","""",MOD(m9-n9,1))<IF(n9=""- "","""",MOD(n9-m9,1)),"" - "","" + "")))"
Meine Laufvariable von oben nach unten heisst eigendlich "k"
Ich kriege es nicht hin in die Formel einzubinden.
herzlichen Dank
Gruss
mehmet

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA kürzer damit Makro schneller wird
06.11.2014 01:00:47
Daniel
HI
kannst du so verkürzen:
Sheets("OL_test_OneLeg3d").Range("g3:g9").formula = "=IF(n3="""","""",IF(n3=""- "","""",IF(IF(n3=""- "","""",MOD(m3-n3,1))<IF(n3=""- "","""",MOD(n3-m3,1)),"" - "","" + "")))"
Schleife brauchst du nicht, du kannst die Formel - wenn sie mit Copy-Paste von der ersten in die anderen Zellen übertragbar wäre - auch in alle Zellen gleichzeitig schreiben.
Excel macht das dann mit den relativen und absoluten Zellbezügen schon richtig.
Gruß Daniel

AW: VBA kürzer damit Makro schneller wird
06.11.2014 11:00:42
mehmet
Dank dir Daniel,
wusste nicht, dass es so geht. Läuft jetzt auch schneller.
Wie könnte man die folgende Formel verkürzen
Diesmal ist eine IF Abfrage pro Formel:
'ATA +/-
If Sheets("OL_test_OneLeg3d").Range("g3") = "" Then
Sheets("OL_test_OneLeg3d").Range("g3") = "=IF(o3="""","""",IF(o3=""- "","""",IF(IF(o3=""- "","""",MOD(m3-o3,1))<IF(o3=""- "","""",MOD(o3-m3,1)),"" - "","" + "")))"
End If
If Sheets("OL_test_OneLeg3d").Range("g4") = "" Then
Sheets("OL_test_OneLeg3d").Range("g4") = "=IF(o4="""","""",IF(o4=""- "","""",IF(IF(o4=""- "","""",MOD(m4-o4,1))<IF(o4=""- "","""",MOD(o4-m4,1)),"" - "","" + "")))"
End If
If Sheets("OL_test_OneLeg3d").Range("g5") = "" Then
Sheets("OL_test_OneLeg3d").Range("g5") = "=IF(o5="""","""",IF(o5=""- "","""",IF(IF(o5=""- "","""",MOD(m5-o5,1))<IF(o5=""- "","""",MOD(o5-m5,1)),"" - "","" + "")))"
End If
If Sheets("OL_test_OneLeg3d").Range("g6") = "" Then
Sheets("OL_test_OneLeg3d").Range("g6") = "=IF(o6="""","""",IF(o6=""- "","""",IF(IF(o6=""- "","""",MOD(m6-o6,1))<IF(o6=""- "","""",MOD(o6-m6,1)),"" - "","" + "")))"
End If
If Sheets("OL_test_OneLeg3d").Range("g7") = "" Then
Sheets("OL_test_OneLeg3d").Range("g7") = "=IF(o7="""","""",IF(o7=""- "","""",IF(IF(o7=""- "","""",MOD(m7-o7,1))<IF(o7=""- "","""",MOD(o7-m7,1)),"" - "","" + "")))"
End If
If Sheets("OL_test_OneLeg3d").Range("g8") = "" Then
Sheets("OL_test_OneLeg3d").Range("g8") = "=IF(o8="""","""",IF(o8=""- "","""",IF(IF(o8=""- "","""",MOD(m8-o8,1))<IF(o8=""- "","""",MOD(o8-m8,1)),"" - "","" + "")))"
End If
If Sheets("OL_test_OneLeg3d").Range("g9") = "" Then
Sheets("OL_test_OneLeg3d").Range("g9") = "=IF(o9="""","""",IF(o9=""- "","""",IF(IF(o9=""- "","""",MOD(m9-o9,1))<IF(o9=""- "","""",MOD(o9-m9,1)),"" - "","" + "")))"
End If
Wenn ich es so mache:
If Sheets("OL_test_OneLeg3d").Range("g3:g30") = "" Then
Sheets("OL_test_OneLeg3d").Range("g3:g30") = "=IF(o3="""","""",IF(o3=""- "","""",IF(IF(o3=""- "","""",MOD(m3-o3,1))<IF(o3=""- "","""",MOD(o3-m3,1)),"" - "","" + "")))"
End If
Bekomme ich Fehlermeldung: Typen unverträglich.
Wenn so:
If Sheets("OL_test_OneLeg3d").Range("g3:g30") = "" Then
Sheets("OL_test_OneLeg3d").Range("g3:g30") = "=IF(o3="""","""",IF(o3=""- "","""",IF(IF(o3=""- "","""",MOD(m3-o3,1))<IF(o3=""- "","""",MOD(o3-m3,1)),"" - "","" + "")))"
End If
wird die vorherige Formel überschrieben.
Dank Dir
Gruss
mehmet

Anzeige
AW: VBA kürzer damit Makro schneller wird
06.11.2014 12:36:52
Daniel
HI
IF-Abfrage ist schwierig.
Wenn die Formel nur bei bestimmten Bedingungen eingetragen werden soll, dann brauchst du in den meisten Fällen tatsächlich eine Schleife, denn du kannst nicht alle Zellen gleichzeitig abfragen.
ausserdm solltest du die R1C1-Schreibweise für die Formeln verwenden.
Das erspart dir den Aufwand, die Formel in jeder Zeile neu verfassen zu müssen, weil du die relativen Zellbezüge besser beschreiben kannst.
In der R1C1-Schreibweise haben alle Zellen, deren Formel per Copy-Paste übertragbar ist, auch tatsächlich genau den selben Textstring als Formel:

For i = 3 to 9
With Sheets("OL_test_OneLeg3d").Cells(i, 7)
if .Value = "" Then .FormulaR1C1 = "=Hier der Formeltext in R1C1"
end With
Next
leider verhindert der Editor die Korrekte Darstellung.
Ersezte in deiner Formel den Bezug "n3" durch "RC14" und "m3" durch "RC13"
das R steht für "Zeile", weils ein Zellbezug auf die selbe Zeile ist lässt man sie weg
nach dem C steht die Spaltennummer.
Damit steht dann in jeder Zelle dieselbe Formel und du kannst einfach mit einer Schleife arbeiten.
Aus diesem Grund ist die R1C1-Schreibweise für Formeln in VBA oft die besser. Ausserdem zeichnet der Recorder sie auch so auf.
Gruß Daniel

Anzeige
AW: VBA kürzer damit Makro schneller wird
07.11.2014 01:26:24
mehmet
Hallo Daniel,
ich verstehe nicht wie du es meinst:
'ETA +/-
Sheets("OL_test_OneLeg3d").Range("g3:g30") = _
"=IF(n3="""","""",IF(n3=""- "","""",IF(IF(n3=""- "","""",MOD(m3-n3,1))<IF(n3=""- "","""",MOD(n3-m3,1)),"" - "","" + "")))"
'ETA DLY
Sheets("OL_test_OneLeg3d").Range("h3:h30") = "=IF(n3=""- "","""",TEXT(IF(IF(n3=""- "","""",MOD(m3-n3,1))<IF(n3=""- "","""",MOD(n3-m3,1)),IF(n3=""- "","""",MOD(m3-n3,1)),IF(n3=""- "","""",MOD(n3-m3,1))),""hh:mm""))"
'ATA +/-
For i = 3 to 9
With Sheets("OL_test_OneLeg3d").Cells(i, 7)
if .Value = "" Then .FormulaR1C1 = "=Hier der Formeltext in R1C1"
end With
Next
Das mit dem Web Editor kann man mit ~f~ ergänzen.
Kann Du mir mal zeigen wie Du es meinst.
Dank Dir
Gruss
mehmet

Anzeige
AW: VBA kürzer damit Makro schneller wird
08.11.2014 10:21:47
daniel
Hi
Schreibe die Formel mal von Hand in die Zelle und zeichne mit dem Recorder auf.
Schaue dir dann die Formelschreibweise an, die der Recorder verwendet.
Gruß Daniel

AW: VBA kürzer damit Makro schneller wird
08.11.2014 22:44:38
mehmet
Hallo Daniel,
habe aufgezeichnet:
Range("G3").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[8]="""","""",IF(RC[8]=""- "","""",IF(IF(RC[8]=""- "","""",MOD(RC[6]-RC[8],1))<IF(RC[8]=""- "","""",MOD(RC[8]-RC[6],1)),"" - "","" + "")))"
Range("G3").Select
Selection.AutoFill Destination:=Range("G3:G30"), Type:=xlFillDefault
Range("G3:G30").Select
Range("G11").Select
und so eingefuegt:
'ATA +/-
'Aufzeichnung: =IF(RC[8]="""","""",IF(RC[8]=""- "","""",IF(IF(RC[8]=""- "","""",MOD(RC[6]-RC[8],1))<IF(RC[8]=""- "","""",MOD(RC[8]-RC[6],1)),"" - "","" + "")))
For iATA = 3 To 30
With Sheets("OL_test_OneLeg3d").Cells(iATA, 7)
If .Value = "" Then .FormulaR1C1 = "=IF(RC[8]="""","""",IF(RC[8]=""- "","""",IF(IF(RC[8]=""- "","""",MOD(RC[6]-RC[8],1))<IF(RC[8]=""- "","""",MOD(RC[8]-RC[6],1)),"" - "","" + "")))"
End With
Next iATA
sieht aus als würde es klappen
Bekomme keine Fehler Meldung und die Formeln sind dann auch so drin wie es sein sollte
Vielen vielen Dank für deine Hilfe und Geduld
Gruss
mehmet

Anzeige
AW: VBA kürzer damit Makro schneller wird
06.11.2014 13:00:04
Rudi
Hallo,
wenn die Zellen wirklich leer sind:
Sheets("OL_test_OneLeg3d").Range("g3:g30").Specialcells(xlCellTypeBlanks).formular1c1 = _
"=IF(rc15="""","""",IF(rc15=""- "","""",IF(IF(rc15=""- "","""",MOD(rc13-rc15,1))
Gruß
Rudi

AW: VBA kürzer damit Makro schneller wird
07.11.2014 01:31:53
mehmet
Hallo Rudi,
vielen Dank für Deine Interesse.
Nein, die Zellen sind nicht leer. Zellen beinhalten auch Formel.
Diese sollen aber überschrieben werden, wenn diese vorher nicht zugetroffen haben.
Gruss
mehmet

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige