2016-08-25 10 views
0

Es gibt definitiv einfachere Möglichkeiten, um zu erreichen, was dieser Code versucht, aber ich habe einen vereinfachten Code erstellt, um zu zeigen, was ich erreichen möchte. Im Grunde möchte ich Berechnungen für viele Daten durchführen und möchte das nicht zu den Arbeitsblättern hinzufügen müssen.Anwenden von Formel auf Zelle mit einem VBA definierten Array

Also im Grunde muss ich Formeln wie sum, durchschnittlichifs, etc. in einem Arbeitsblatt durch die Verwendung eines Array, das ich in meinem Makro definiert. An diesem Punkt kann ich nicht herausfinden, wie man dieses Array, das 5 Werte enthält, in eine "= sum()" -Funktion umwandelt. Vielen Dank im Voraus für Ihre Hilfe!

Sub ArraySum() 

Dim numbers(5) As Double 
Dim E As Double 

For I = 1 To 5 
    E = Cells(I, 1) 
    numbers(I) = Cos(E) 
Next I 

Range("b1").Formula = "=sum(" & numbers & ")" 

End Sub 

Antwort

2

Es ist nicht klar, warum Sie wollen würde es auf diese Art und Weise zu tun, aber:

Sub ArraySum() 

    Dim numbers(1 To 5) '<<< 
    Dim E As Double 

    For I = 1 To 5 
     E = Cells(I, 1) 
     numbers(I) = Cos(E) 
    Next I 

    Range("B1").Formula = "=SUM(" & Join(numbers, ",") & ")" 

End Sub 

aber dann könnten Sie auch tun, nur:

Range("B1").FormulaArray = "=SUM(COS(A1:A5))" 
+0

Ya es scheint in meinem Kopf auch unklar. Mein Endziel würde erreicht werden, wenn ich etwas wie diese Formel innerhalb von Excel tun könnte, gibt es einen Weg, dies zu tun? = Averageif (cos (i2: i5), "> 0", cos (i2: i5)) – Topher

+0

Was genau meinen Sie mit "innerhalb von Excel"? - Auf einem Arbeitsblatt können Sie einfach die Array-Formel in meinem zweiten Beispiel verwenden (verwenden Sie 'Strg + Shift + Enter', wenn Sie es auf dem Blatt eingeben) –

+0

Ya ich meine auf einem Arbeitsblatt. Richtig, ich kann dein Beispiel mit Strg + Shift + Enter machen, aber ich lasse es nicht für den Durchschnitt tun (cos (a1: a5), "> 0"). Weißt du, was das Problem sein könnte? Schätze deine Hilfe. – Topher

0

Ein anderer Weg, wenn Sie brauche die Formel nicht, um tatsächlich in dieser Zelle zu sein:

Edit: Wenn Sie Option Base 1 nicht eingestellt haben, dann wird Dim numbers(3) As Double ein 4-Elemente-Array mit Nummern (0), ..., Zahlen (3) erstellen, da der Standardwert Base 0 ist. Ich würde empfehlen, Dim numbers(1 to 3) As Double anstatt auf die Base-Option zu verwenden.

Edit 2: Sie haben entweder Dim I in Ihrem Beispiel vergessen oder verwenden Sie nicht Option Explicit, was sehr empfehlenswert ist!

0

Muss es eine Gleichung im Arbeitsblatt sein? Sie könnten nur die Summe und setzen Sie es dort:

Sub ArraySum() 

    Dim numbers(1 To 5) '<<< 
    Dim E As Double 

    For I = 1 To 5 
     E = Cells(I, 1) 
     numbers(I) = Cos(E) 
    Next I 

    Range("B1").Value = Application.WorksheetFunction.Sum(numbers) 
End Sub 
Verwandte Themen