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.

Loop sehr langsam
#11
heje excelfreunde, schauan,

aus #8:

Zitat:wenn Du Deine Ansicht konsequent verfolgst, würde es ggf. reichen, die 147 am Ende der Schleife in B2 einzutragen.

da liegst du völlige falsch, nicht die eigenen mutmaßungen/interpretationen sind gefragt, sonder das problem, welches dargestellt wurde...
und dessen elegantere, aber gleichwertigere umsetzung.
Vielen Dank
--Janosch
                                                     
Excel  2019 (64bit)  Win 10 Pro (64bit)                              
Antworten Top
#12
(04.09.2016, 09:58)Crazy Tom schrieb: Moinmoin

war wohl noch etwas früh heut morgen :D
klar sollte die Berechnung da automatisch bleiben

aber so sollte es auch schnell genug sein

Code:
Sub WKN_Update()
  Dim i As Long
  With Sheets("WKN Data")
  For i = 1 To 147
      .Range("B2").Value = i
      .Cells(i + 4, 10).Value = .Range("C3").Value
      .Cells(i + 4, 11).Value = .Range("G3").Value
  Next i
  End With
  MsgBox "fertsch"
End Sub

MfG Tom

Danke Tom!
Läuft in der Tat schneller, aber bei 147 Loops immer noch recht zeitaufwendig. Der Aufwand kommt von der Berechnung einiger Zellen in Abhängigkeit von B2.
Ich kann in meinem Modell die Variablen reduzieren, das hilft nochmal (siehe unten).
Gerne würde ich diese Idee weiterführen, sodass B2 für noch weniger Variablen verändert wird; allerdings bin ich mit einem IF im Loop nicht so weit gekommen. Von der Idee her sollte es so aussehen:
Code:
Sub WKN_Update()

Application.ScreenUpdating = False
  Dim i As Long
  With Sheets("WKN Data")
  For i = 1 To .Range("I3").Value
        If Left(.Cells(i + 4, 10).Value, 1) = " " Then Next i Else

        .Range("B2").Value = i
        .Cells(i + 4, 10).Value = .Range("C3").Value
        .Cells(i + 4, 11).Value = .Range("G3").Value
        End
  Next i
  End With

End Sub

Das Next i im Then geht aber leider nicht. Ideen?

Danke!!!
Antworten Top
#13
Hallo,

so?
Code:
Sub WKN_Update()

Application.ScreenUpdating = False
  Dim i As Long
  With Sheets("WKN Data")
   For i = 1 To .Range("I3").Value
      If Left(.Cells(i + 4, 10).Value, 1) <> " " Then

        .Range("B2").Value = i
        .Cells(i + 4, 10).Value = .Range("C3").Value
        .Cells(i + 4, 11).Value = .Range("G3").Value
      End If
   Next i
  End With

End Sub

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • and.so
Antworten Top
#14
Wie sehen die Formel in C3 und G3 aus ?
Antworten Top
#15
Danke Uwe, das funktioniert top!
@snb:  Die Formeln lauten

=ROUND(INDEX(Performance!N$14:N$183,MATCH('WKN Data'!$C$4,Performance!$B$14:$B$183,0)),2)*100&"%"

und

=ROUND(OFFSET($G$4,COUNT($G$5:$G$1030),)/$G$5-1,2)*100&"%"

Meinst du, durch Berechnung in VBA wäre es vllt noch schneller?

Danke!
Antworten Top
#16
Ja, das meine ich.

In keinem der Formeln spielt B3 eine Rolle ???

Warum denn B3 ändern ?
Antworten Top
#17
Doch - B2-Bezüge sind natürlich indirekt in den anderen Formeln drin. Sonst würde es ja keinen Sinn machen.
B2 wird von einem Spin Button gefüttert, daher nicht direkt in den Formeln verlinkt. Basierend auf B2 werden entsprechende Daten in dem Sheet aufgerufen, die dann in C3 und G3 zusammengefasst werden.
Antworten Top
#18
Wenn es zu langsam läuft solltest du die ganze Berechnung zeigen. Das wird mit VBA viel schneller gehen.
Antworten Top
#19
Sorry, das Modell ist recht komplex, dauert wsh sehr lange bis man sich da eingearbeitet hat. Ich versuche mal mein Anliegen in Kurzform zu erklären :)

[
Bild bitte so als Datei hochladen: Klick mich!
]

B2 ist die durch den Spin Button getriggerte Zelle. Füttert C4 mit einem Namen
Datumspalte B zieht Daten aus einem anderen Sheet für diesen Namen: =INDEX(Overview!F$3:F$500,MATCH('WKN Data'!$C$4,Overview!$B$3:$B$500,0))
Spalten C-F ebenso, z.B.: =INDEX(Overview!$AA$3:$CO$5000,MATCH('WKN Data'!B6,Overview!$Z$3:$Z$5000,0),MATCH('WKN Data'!$C$4,Overview!$AA$2:$CO$2,0))
Spalte G berechnet auf Basis von D-F eine Zahl: =IFERROR(INDEX(D5:F5,,MATCH($G$4,$D$3:$F$3,0)),D5*Overview!$W$32+E5*Overview!$W$33+F5*Overview!$W$34)*$C$5

C3 zieht auf Basis von B2 eine Zahl aus einem anderen Sheet (aus meiner Sicht unkritisch): =ROUND(INDEX(Performance!N$14:N$183,MATCH('WKN Data'!$C$4,Performance!$B$14:$B$183,0)),2)*100&"%"
G3 ist wohl der Übeltäter, da für die Berechnung hier der gesamte Klatsch vornedran verwendet wird: =ROUND(OFFSET($G$4,COUNT($G$5:$G$1030),)/$G$5-1,2)*100&"%"

Was ich machen möchte: Alle Zahlen des Spin-Buttons durchgehen. Mit jeder Änderung gibt es neue C3 und G3 Werte. Diese möchte ich dann einfach nur in das entsprechende Feld J & K kopieren.

Ist das soweit verständlich? Falls ja, welche Idee hättest du, das direkt in VBA umzusetzen?

Vielen Dank und Grüße
Andreas
Antworten Top
#20
Hallo Andreas,

in Deinen Formeln ist immer noch kein Bezug zu B2 erkennbar Sad
Zur Umsetzung wäre es in diesem Fall ausnahmsweise hilfreich, eine Musterdatei zu posten.

Hier mal noch vorab die von snb vorgeschlagene Variabte mit dem Array auf Basis von Tom's Code:

Code:
Sub WKN_Update()
Dim i As Long, arrData(1 To 147, 1)
With Sheets("WKN Data")
  For i = 1 To 147
    .Range("B2").Value = i
    '.Cells(i + 4, 10).Value = .Range("C3").Value
    '.Cells(i + 4, 11).Value = .Range("G3").Value
    arrData(i, 0) = .Range("C3").Value
    arrData(i, 1) = .Range("G3").Value
  Next i
  .Range(.Cells(1, 10), .Cells(147, 11)).Value = arrData()
End With
MsgBox "fertsch"
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


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