Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - Code optimieren
#1
Star 
Hallo zusammen,

ich hoffe Ihr könnt mir weiterhelfen. Ich benutze folgenden Code um mehrere spalten (365) abzufragen und hier dann einige Zeilenergebnisse untereiannder zu kopieren. Es funktioniert auch genauso wie es soll. Es ist aber verdammt langsam. Seht Ihr vielleicht eine Möglichkeit den Vorgang zu optimieren? Dauert aktuell bestimmt 5min und muss ich dann sogar aktiv beenden.


Sub Spaltenuntereianderkopieren()


Dim QZeile As Long 'Zeile Quelle
Dim QSpalte As Long 'Spalte Quelle
Dim ZZeile As Long 'Zeile Ziel

ZZeile = 2 'Startzeile in der Zielspalte

For QSpalte = 6 To 366 'Spalte D bis H

   For QZeile = 4 To 11

        Tabelle1.Cells(ZZeile, 1) = Tabelle1.Cells(QZeile, QSpalte) 'die 9 ist Spalte I
        ZZeile = ZZeile + 1

  Next

Next

End Sub

vg
Antworten Top
#2
Hallo,

versuche es mal so:

Code:
for Sp = 6 to 366
    range(cells(4,SP),cells(11, Sp)).copy cells(rows.count,1).end(xlup).offset(1)
next Sp

Wie lange dauert es so?

mfg
Antworten Top
#3
Hi,
da liegt die Gurke nicht begraben.
Obwohl ein Array sicherlich schneller gehen würde,  bzw. wäre Powerquery auch ein Thema.

siehe Demo.
 
.xlsm   umbauen.xlsm (Größe: 43,77 KB / Downloads: 2)
Dauer 0,x Sek.

Mit deinem Originalcode.

Sind bei Dir Formeln im Einsatz und/oder bedingte Formatierungen....

Edit: hier mal eine "hardcodierte" Arraylösung.

Code:
Sub marine()
Dim arr As Variant, i As Long, y  As Long, arrA(1 To 2888)
With Tabelle1
arr = .Range("F4:NB11")
    For y = 1 To 361
        For i = 1 To 8
            za = za + 1
            arrA(za) = arr(i, y)
        Next
    Next
    .Range("A2:A2888").Value = WorksheetFunction.Transpose(arrA)
End With
End Sub
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
Antworten Top
#4
Wow! Dauer jetzt 1sec :) Kannst du mir grob erklären woran der starke Unterschied liegt? vg
Antworten Top
#5
Hallo,

bei deinem originären Code schreibt Excel jede Zelle einzeln und das Beschriften von Zellen dauert bei Excel ewig... Bei den Lösungsvorschlägen der anderen Forum-Teilnehmer wird nur einmal in deine Excel-Datei geschrieben.

Weitere allgemeine Hinweise zur Code-Optimierung findest du in [url=
Dateiupload bitte im Forum! So geht es: Klick mich!
15[/url]
Viele Grüße,
Matthias

-------------------------------------------------------------------------------------------

Man muß nicht alles wissen, man muß nur wissen, wie man die Lösung findet.
Antworten Top
#6
Code:
sn=Tabelle1.Range("F4:NB11")
redim sp(ubound(sn)*ubound(sn,2),0)

for each it in sn
  sp(y,0)=it
  y=y+1
next

Tabelle1.cells(1).resize(ubound(sp))=sp
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste