Ich habe die Arbeit mit drei dynamischen Arrays (alle sind Datentyp Double
) - sie sindMultiplizieren Sie eine 2D-Array von 1D-Array ein drittes (2D) Array zu erhalten (langsam)
OriningalArray
Dies wird aus einem Bereich zugeordnet werden, dass der Benutzer Ende sehen und wird 2 Dimension
seinMultiplierArray
Dies sind Multiplikatoren als (die meisten davon sind 1, aber einige werden zwischen + -5% und immer die gleiche Länge wie eine der Dimensionen in OriningalArray
sein.
newArray
Dies ist erforderlich, da es bestimmte Rabatte, die auf die OriningalArray
und beide Dimension die gleiche Größe wie es sein wird, angewendet werden müssen.
Hier ist ein Beispiel für eine visuelle Referenz ist:
ich Code habe, warum ich tue es auf diese Weise (dies ist nur ein Beispiel arbeitet zu erklären (siehe unten) und hat gesagt, es auch und tatsächliche Datengröße wird viel größer), aber hoffte, dass jemand sagen könnte mir, wie es weiter zu optimieren:
Sub Test()
Dim OriningalArray() As Double ' I can't declare it a Variant and then assign it straight from the range (OriningalArray = Rng) because there may be "N/A" values in the range which, when put into an Variant Array, gives false Double value
Dim MultiplierArray() As Variant
Dim NewArray() As Double
Dim Rng As Range
Dim MultiplierRng As Range
Dim x As Long, y As Long
Set Rng = Range("D4:I9")
Set MultiplierRng = Range("D12:I12")
ReDim OriningalArray(1 To Rng.Rows.Count, 1 To Rng.Columns.Count) ' 2D Array the sze of the range
ReDim NewArray(1 To Rng.Rows.Count, 1 To Rng.Columns.Count) ' 2D Array the sze of the range
MultiplierArray = MultiplierRng
On Error Resume Next ' Turn off error handler to stop macro crashing when trying to assign "N/A" as a Double
For x = 1 To Rng.Columns.Count
For y = 1 To Rng.Rows.Count
OriningalArray(y, x) = Rng.Cells(y, x).Value
NewArray(y, x) = OriningalArray(y, x) * MultiplierRng(1, x)
'Debug.Print OriningalArray(y, x)
'Debug.Print NewArray(y, x)
Next y
Next x
On Error GoTo 0
End Sub
Dank dafür, aber alle Werte in 'NewArray' zurückkehrt '0' – Jeremy
Dann ist es entweder das falsche Blatt oder die falschen Bereiche. – Rory
Sie haben recht - ich hatte das Activesheet geändert, ohne es zu merken - danke! – Jeremy