web-dev-qa-db-de.com

Excel VBA - Übergeben Sie eine Reihe von Zellwerten an ein Array und fügen Sie dieses Array dann in eine relative Referenz von Zellen ein

Mit Excel (2010) VBA versuche ich, einen konstanten Zellbereich (dessen Werte neu berechnet werden) in ein Array zu kopieren (zu übergeben). Dann versuche ich, dieses Array an einen neuen Zellbereich direkt darunter zu übergeben. Nachdem ich dies getan habe, möchte ich die neuen Werte des konstanten Bereichs erneut in das Array kopieren (übergeben) und diese neuen Werte direkt unterhalb des zuvor übergebenen Bereichs übergeben.

Ich weiß, dass dieser Code grausam ist (ich bin neu in Arrays in VBA).

Sub ARRAYER()

Dim anARRAY(5) As Variant

Number_of_Sims = 10

For i = 1 To Number_of_Sims
   anARRAY = Range("C4:G4")
   Range("C4").Select
   ActiveCell.Offset(Number_of_Sims, 0).Select
   ActiveCell = anARRAY
   Range("C4").Select
Next

End Sub

Ich freue mich sehr über Ihre Hilfe!

Vielen Dank.

Respektvoll,

Jonathan 

Sie sind ein paar Dinge hier, also hoffentlich hilft das Folgende.

Erstens müssen Sie keine Bereiche auswählen, um auf ihre Eigenschaften zuzugreifen, Sie können nur deren Adresse angeben usw. Zweitens müssen Sie sie nicht auf eine Variante setzen, es sei denn, Sie ändern die Werte innerhalb des Bereichs. Wenn Sie die Werte bearbeiten möchten, können Sie die Grenzen des Arrays weglassen, da diese beim Definieren des Bereichs festgelegt werden.

Es empfiehlt sich auch, Option Explicit oben in Ihren Modulen zu verwenden, um die Variablendeklaration zu erzwingen.

Folgendes tun, was Sie wollen:

Sub ARRAYER()
    Dim Number_of_Sims As Integer, i As Integer

    Number_of_Sims = 10

    For i = 1 To Number_of_Sims
       'Do your calculation here to update C4 to G4
       Range(Cells(4 + i, "C"), Cells(4 + i, "G")).Value = Range("C4:G4").Value
    Next
End Sub

Wenn Sie die Werte innerhalb des Arrays bearbeiten möchten, führen Sie folgende Schritte aus:

Sub ARRAYER()
    Dim Number_of_Sims As Integer, i As Integer
    Dim anARRAY as Variant

    Number_of_Sims = 10

    For i = 1 To Number_of_Sims
       'Do your calculation here to update C4 to G4
       anARRAY= Range("C4:G4").Value

       'You can loop through the array and manipulate it here

       Range(Cells(4 + i, "C"), Cells(4 + i, "G")).Value = anARRAY
    Next
End Sub
9
CuberChase

Kein Array erforderlich. Verwenden Sie einfach so etwas:

Sub ARRAYER()

    Dim Rng As Range
    Dim Number_of_Sims As Long
    Dim i As Long
    Number_of_Sims = 10

    Set Rng = Range("C4:G4")
    For i = 1 To Number_of_Sims
       Rng.Offset(i, 0).Value = Rng.Value
       Worksheets("Sheetname").Calculate   'replacing Sheetname with name of your sheet
    Next

End Sub
3
chuff

Da Sie die gleichen Daten in alle Zeilen kopieren, müssen Sie eigentlich gar keine Schleife machen. Versuche dies:

Sub ARRAYER()
    Dim Number_of_Sims As Long
    Dim rng As Range

    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Number_of_Sims = 100000

    Set rng = Range("C4:G4")
    rng.Offset(1, 0).Resize(Number_of_Sims) = rng.Value

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub
2
chris neilsen

Als ich Ihren Code ausprobierte, bekam ich Fehler, als ich das Array füllen wollte.

sie können versuchen, das Array so zu füllen.

Sub Testing_Data()
Dim k As Long, S2 As Worksheet, VArray

Application.ScreenUpdating = False
Set S2 = ThisWorkbook.Sheets("Sheet1")
With S2
    VArray = .Range("A1:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
End With
For k = 2 To UBound(VArray, 1)
    S2.Cells(k, "B") = VArray(k, 1) / 100
    S2.Cells(k, "C") = VArray(k, 1) * S2.Cells(k, "B")
Next

End Sub
0
Moosli