Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1356to1360
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

Performantere Platzierung von Formeln per VBA

Performantere Platzierung von Formeln per VBA
16.04.2014 14:56:02
Formeln
Hallo,
ich suche eine Variante, wie ich eine Formel per VBA performanter platzieren kann. Aktuell nutze ich folgendes Script:
Do While (Worksheets("Tabelle1").Cells(lastLine, 1) "")
Range("V" & lastLine).FormulaLocal = "=SVERWEIS(" & lastLine & "*1;KST!$A$1:$C$117;3;FALSCH)"
lastLine = lastLine + 1
Loop

Die Funktion bringt das gewünschte Ergebnis. Dabei ist die Bearbeitungszeit pro Zeile in der Schleife jedoch viel zu hoch. Wie kann ich dies noch performanter gestalten
Gruß Thorsten

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Während des PgmLaufs Berechnung auf ...
16.04.2014 15:21:52
Luc:-?
…manuell stellen und Bildschirmaktualisierung abschalten, Thorsten!
Gruß Luc :-?

AW: Während des PgmLaufs Berechnung auf ...
16.04.2014 15:29:05
Philipp
Hallo Thorsten,
mit FormulaR1C1 kannst Du das Ganze auch direkt über den kompletten Bereich ohne Schleife berechnen lassen.
Ohne mehr vom code zu sehen, ist es aber letzendlich schwierig zu sagen.
Gruß
Philipp

Formeln in Bereich eintragen
16.04.2014 19:51:33
Erich
Hi Thorsten,
Philipps Anregung habe ich mal ansatzweise umgesetzt:

Option Explicit
Sub Thorsten()
Dim lastLine As Long, lngAnz As Long
lastLine = 1
' lngAnz kann vermutlich auch geschickter ermittelt werden
Do While Worksheets("Tabelle1").Cells(lastLine + lngAnz, 1)  ""
lngAnz = lngAnz + 1
Loop
Range("V" & lastLine).Resize(lngAnz).FormulaLocal = _
"=SVERWEIS(ZEILE(A" & lastLine & ");KST!$A$1:$C$117;3;FALSCH)"
End Sub
Die Schleife zur Ermittlung von lngAnz ist vermutlich auch überflüssig. Genaueres kann man so wohl nicht sagen.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Formeln in Bereich eintragen
17.04.2014 09:26:07
Klaus
Hallo Erich (und Thorsten und Phillip),
.end(xldown) springt zur nächsten leeren Zelle. Funktioniert natürlich nur, wenn die Zelle wirklich leer ist und nicht per Formel auf ="" gesetzt wurde.
Sub Thorsten()
Dim lastLine As Long, lngAnz As Long
lastLine = 1
lngAnz = Cells(lastLine, 1).End(xlDown).Row
Range("V" & lastLine).Resize(lngAnz).FormulaLocal = _
"=SVERWEIS(ZEILE(A" & lastLine & ");KST!$A$1:$C$117;3;FALSCH)"
End Sub
oder noch kürzer:
Sub Thorsten()
Const lastLine As Long = 1
Range("V" & lastLine).Resize(Cells(lastLine, 1).End(xlDown).Row).FormulaLocal = _
"=SVERWEIS(ZEILE(A" & lastLine & ");KST!$A$1:$C$117;3;FALSCH)"
End Sub

Hat natürlich den Nachteil, wenn man mal ausversehen LastLine bereits auf die letzte Zeile gesetzt hat, wird bis Zeile 1048576 ausgefüllt (und Excel crasht sehr warscheinlich). Auf 5000 Zeilen (Wert aus der Luft gegriffen) begrenzt:
Sub Thorsten()
Const lastLine As Long = 1
If Not Cells(lastLine, 1).End(xlDown).Row > 5000 Then
Range("V" & lastLine).Resize(Cells(lastLine, 1).End(xlDown).Row).FormulaLocal = _
"=SVERWEIS(ZEILE(A" & lastLine & ");KST!$A$1:$C$117;3;FALSCH)"
End If
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: Performantere Platzierung von Formeln per VBA
16.04.2014 22:21:11
Formeln
Hallo,
als Ansatz:
With Sheets("tabelle1")
.Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Offset(, 21).FormulaR1C1 = _
"=vlookup(row()-1,KST!r1c1:r117c3,0)"
End With
Gruß
Rudi

CROSSPOSTING
17.04.2014 11:08:34
Erich
Hi zusammen,
wir können - in Unkenntnis der vorliegenden Daten und der konkreten Anforderungen - hier nur trefflich spekulieren
oder abwarten, ob sich Thorsten hier oder im MOF mal zu den Vorschlägen äußert...
http://www.ms-office-forum.net/forum/showthread.php?t=308518
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: CROSSPOSTING
17.04.2014 13:55:15
Thorsten
Hallo,
ich habe jetzt noch von anderer Seite den Hinweis bekommen einfach die Autoberechnung zu deaktivieren und das Ganze manuell zu berechnen.
Gruß Thorsten

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige