Registriert seit: 15.04.2014
Version(en): 2007, 2010, 2019
04.09.2016, 22:17
(Dieser Beitrag wurde zuletzt bearbeitet: 04.09.2016, 22:17 von radagast.)
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)
Registriert seit: 04.09.2016
Version(en): 2010
(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!!!
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• and.so
Registriert seit: 29.09.2015
Version(en): 2030,5
Wie sehen die Formel in C3 und G3 aus ?
Registriert seit: 04.09.2016
Version(en): 2010
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!
Registriert seit: 29.09.2015
Version(en): 2030,5
05.09.2016, 13:36
(Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2016, 13:36 von snb.)
Ja, das meine ich.
In keinem der Formeln spielt B3 eine Rolle ???
Warum denn B3 ändern ?
Registriert seit: 04.09.2016
Version(en): 2010
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.
Registriert seit: 29.09.2015
Version(en): 2030,5
Wenn es zu langsam läuft solltest du die ganze Berechnung zeigen. Das wird mit VBA viel schneller gehen.
Registriert seit: 04.09.2016
Version(en): 2010
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
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Andreas,
in Deinen Formeln ist immer noch kein Bezug zu B2 erkennbar
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)
|