2016-08-25 7 views
0

このコードの目的を達成するための簡単な方法はありますが、達成しようとしていることを示す簡単なコードを作成しました。基本的には、たくさんのデータを計算したいので、ワークシートに追加する必要はありません。VBAで定義された配列を使用してセルに式を適用する

基本的に、マクロで定義した配列を使用して、ワークシート内でsum、averifsなどの式を実行する必要があります。この時点では、5つの値を含むこの配列を "= sum()"関数に変換する方法を知ることはできません。あなたの助けを前もってありがとう!

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 

答えて

2

あなたはこのようにそれをしたいと思います理由は明らかではないが、:

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 

が、その後あなたにもちょうど行う可能性があります:

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

私の考えでも不明な点があります。私の最終目標は、私がこの式のような何かをExcelで行うことができれば達成できます。これを行う方法はありますか? = averageif(cos(i2:i5)、 "> 0"、cos(i2:i5)) – Topher

+0

「エクセル」内の正確な意味は? - ワークシート上では、2番目の例の配列式を使用することができます(シートに入力するときは 'Ctrl + Shift + Enter 'を使用します)。 –

+0

私はワークシート上を意味します。そうですね、私はctrl + shift + enterであなたの例を行うことができますが、averageif(cos(a1:a5)、 "> 0")でそれをやらせていません。あなたはその問題が何であるか知っていますか?あなたの助けに感謝。 – Topher

0

あなたであれば別の方法をそのセルに実際に入る数式は必要ありません。

Range("b1").Value = Application.WorksheetFunction.Sum(numbers) 

編集:Option Base 1を設定していない場合、Dim numbers(3) As Doubleは、デフォルトがBase 0なので、4要素の配列番号(0)、...、numbers(3)を作成します。ベースオプションに頼るのではなく、Dim numbers(1 to 3) As Doubleを使用することをお勧めします。

編集2:あなたの例ではDim Iを忘れてしまったか、またはOption Explicitをお勧めしません。

0

ワークシートの式である必要がありますか?

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 
関連する問題