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

Array Kalkulation ohne Worksheet

Array Kalkulation ohne Worksheet
17.07.2020 15:22:47
Karl
Hallo zusammen,
ich arbeite gerade an einer Preissimulation für Aktien. Dafür muss ich aus meinen Rohdaten für 100 Tage einen zufälligen Wert in eine Tabelle einfügen. In rawData sind meine Rohdaten hinterlegt. Da ich die Simulation 10.000 mal durchführen muss kann ich die erstellte Array nicht in mein Arbeitsblatt einfügen. Das dauert einfach viel zu lange.
Meine Idee war, die Rohdaten als Array zu definieren, danach eine zweite Array zu definieren in die zufällig einer der Werte für jeden Tag eingefügt wird. Der Großteil hat auch schon funktioniert aber bei:
rand_return = rawData(rand_numb_sim)
OutpArray(m) = rand_return
funktioniert mein Code leider noch nicht. Hat jemand vielleicht eine Lösung? oder einen besseren Vorschlag? Es handelt sich beim hier angezeigten Code nicht um mein komplettes Makro. Hier geht es nur um die Erstellung dieser Array. Sollte der Code funktionieren wird das Ergebnis nicht mehr in das Arbeitsblatt kopiert sondern nur "VBA Intern" zu Berechnungszwecken verwendet.
Code:

Public Sub CreateArray()
Dim Calculation As Worksheet
Dim rawData(0 To 100) As Single
Dim OutpArray(0 To 100) As Long
Set Calculation = Worksheets("Calculation")
Dim m As Long
Dim rand_numb_sim As Long
Dim rand_return As Long
rawData = Calculation.Range("F23:AJ23").Value
For m = 0 To 100
rand_numb_sim = Int(((100 - 1 + 1) * Rnd) + 1)
rand_return = rawData(rand_numb_sim)
OutpArray(m) = rand_return
Next m
Calculation.Range("C3:CX3").Value = OutpArray
End Sub

Schöne Grüße,
Karl Toffelpuffer

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array Kalkulation ohne Worksheet
17.07.2020 15:43:17
onur
"funktioniert mein Code leider noch nicht" ? Was genau passiert denn?
Warum eigentlich
Int(((100 - 1 + 1) * Rnd) + 1)

und nicht
Int(100 * Rnd + 1)

?
Abgesehen davon - wenn du nicht Randomize(Timer) benutzt, kommen immer die gleiche "Zufallszahlen" in Folge.
AW: Array Kalkulation ohne Worksheet
17.07.2020 16:22:52
Karl
Hallo onur,
die Erstellung der Zufallszahl hab ich vor Ewigkeiten irgendwo verwendet. Das ist auch nicht relevant. Mir wäre nur wichtig zu wissen, ob ich mit vba überhaupt einzelne Werte einer erstellten Array verändern kann. Also der Teil
 For m = 0 To 100
rand_numb_sim = Int(((100 - 1 + 1) * Rnd) + 1) 'erstellt "Zufallszahl"
rand_return = rawData(rand_numb_sim) 'soll Wert an Stelle der Zufallszahl raussuchen
OutpArray(m) = rand_return 'soll rausgesuchten Wert in Output Array einfügen
Next m
Jemand eine Idee?
Anzeige
AW: Array Kalkulation ohne Worksheet
17.07.2020 16:27:05
onur
Du verrätst immer noch nicht, WAS an deinem Makro falsch läuft.
Ich werde ihn bestimmt nicht testen, indem ich deine Datei nachbaue - denn du hast ja keine (Beispiels-) Datei gepostet.
AW: Array Kalkulation ohne Worksheet
17.07.2020 16:43:51
EtoPHG
Hallo,
Calculation ist ein Keyword in VBA und darf/soll nicht als Variable missbraucht werden, das führt zu unerwünschten Nebeneffekten.
Der Befehl rand_return = rawData(rand_numb_sim) wird einen Fehler generieren, wenn die errechnete Zufallszahl &gt30 ist, weil F23:AJ23 nur 30 Werte sind, du aber eine Zufallszahl bis 100 generierst. Folglich bricht das Makro vor dem nächsten Befehl ab.
Gruess Hansueli
Anzeige
AW: Array Kalkulation ohne Worksheet
17.07.2020 16:49:20
Karl
Hallo Hansueli,
den Fehler habe ich auch gerade bemerkt. Ist in der Hochgeladenen Datei korrigiert.
Gruß,
Karl
AW: Array Kalkulation ohne Worksheet
17.07.2020 16:46:45
volti
Hallo Karl,
versuch es mal so:
Und das mit dem Namen Calculation für ein Sheet solltest Du ändern...

Public Sub CreateArray1() Dim Calculation As Worksheet Dim rawData As Variant Dim OutpArray(0 To 100) As Long Set Calculation = Worksheets("Calculation") Dim m As Long Dim rand_numb_sim As Long Dim rand_return As Long rawData = Calculation.Range("F23:AJ23").value Randomize Timer For m = 0 To 100 rand_numb_sim = Int((31 * Rnd) + 1) OutpArray(m) = rawData(1, rand_numb_sim) Next m Calculation.Range("C3:CX3").value = OutpArray End Sub
viele Grüße aus Freigericht
Karl-Heinz

Anzeige
AW: Array Kalkulation ohne Worksheet
17.07.2020 16:53:18
Karl
Hallo Karl-Heinz,
das mit dem Name habe ich noch geändert. Leider bekomme ich dabei nur eine Reihe mit Nullen als Ergebnis.
Gruß,
Karl
AW: Array Kalkulation ohne Worksheet
17.07.2020 17:01:50
volti
Da hast ja auch das OutpArray und die Variable rand_return als LONG deklariert (Ganzzahl) und willst nun winzige Kommazahlen da reinbringen.
Das geht so nicht.
VG KH
AW: Array Kalkulation ohne Worksheet
17.07.2020 16:52:14
volti
Hi Karl,
In Deiner Datei ist aber jetzt nicht das gleiche, wie hier in Deinem Beitrag.
Stichwort SIngle Variant und Range
VG KH
Anzeige
AW: Array Kalkulation ohne Worksheet
17.07.2020 16:56:50
Karl
Hallo,
ich habe wieder zu variant gewechselt weil ich dachte, dass das richtiger wäre. Die Range habe ich verändert um eine übersichtlichere Datei hochzuladen. Ich habe das makro und die Daten in einem sehr umfangreichen Excel Blatt und wollte nur einen Teil rauskopieren der exakt das Problem betrifft.
Gruß,
Karl
AW: Array Kalkulation ohne Worksheet
17.07.2020 16:57:46
onur
SO geht es:
Dim Calculation As Worksheet
Dim rawData As Variant
Dim OutpArray(0 To 100)'NICHT LONG !!!
Set Calculation = Worksheets("Calculation")
Dim m As Long
Dim rand_numb_sim As Long
Dim rand_return'NICHT LONG !!!
rawData = Calculation.Range("F2:DA2").Value
For m = 0 To 100
rand_numb_sim = Int(100 * Rnd) + 1
rand_return = rawData(1, rand_numb_sim)
OutpArray(m) = rand_return
Next m
Calculation.Range("F3:DA3").Value = OutpArray
End Sub
Anzeige
AW: Array Kalkulation ohne Worksheet
17.07.2020 17:00:47
onur
Habe Randomize Timer vergessen.
Public Sub CreateArray()
Dim Calculation As Worksheet
Dim rawData As Variant
Dim OutpArray(0 To 100)
Set Calculation = Worksheets("Calculation")
Dim m As Long
Dim rand_numb_sim As Long
Dim rand_return
Randomize Timer
rawData = Calculation.Range("F2:DA2").Value
For m = 0 To 100
rand_numb_sim = Int(100 * Rnd) + 1
rand_return = rawData(1, rand_numb_sim)
OutpArray(m) = rand_return
Next m
Calculation.Range("F3:DA3").Value = OutpArray
End Sub

AW: Array Kalkulation ohne Worksheet
17.07.2020 17:08:08
Karl
Hey Onur,
perfekt. Vielen dank dafür!!!
Schöne Grüße,
Karl
Anzeige
Gerne !
17.07.2020 17:08:45
onur
Besser für ganze Zufallszahlen
17.07.2020 17:16:32
Daniel

rand_numb_sim = Worksheetfunction.RandBetween(1, 100)
Ist Übersichtlicher und braucht kein Randomize.
Gruß Daniel
AW: Besser für ganze Zufallszahlen
17.07.2020 17:43:31
Karl
Hey Daniel,
super Tipp! danke dafür.
Gruß,
Karl
AW: Array Kalkulation ohne Worksheet
17.07.2020 17:00:22
EtoPHG
Hallo,
Vielleicht solltest Du Dich mal zuerst mit den grundlegenden Datentypen vertraut machen und mit den Überwachungsfunktionen des VBE und dem Debugger:
Public Sub CreateArray()
Dim wsQ As Worksheet
Dim rawData As Variant
Dim OutpArray(0 To 100) As Double
Set wsQ = Worksheets("Calculation")
Dim m As Long
Dim rand_numb_sim As Double
Dim rand_return As Double
rawData = wsQ.Range("F2:DA2").Value
For m = 0 To 100
rand_numb_sim = Int(((100 - 1 + 1) * Rnd) + 1)
rand_return = rawData(1, rand_numb_sim)
OutpArray(m) = rand_return
Next m
wsQ.Range("F3:DA3").Value = OutpArray
End Sub
Gruess Hansueli
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige