2009-08-10 8 views
3

セルA1に{1,2,3}と定義された配列定数があります。これは "1"(配列の最初の値)として表示されます。Excelの配列定数

私は式SUM(A1)が6を返すようにしたいと思います。しかし、SUMはA1内に含まれる配列定数ではなくA1を単精度配列として使用しているため、SUM(A1)は1を返します。

同様に、私はAVERAGE(A1)はそう単純に私はSUM({1,2,3})と同じ値を返すようにSUM(A1)を得るのですか、話す1の代わりに、2

を返す期待?

私はすべての行に対して異なる配列定数を定義しているので、配列定数を名前付き参照にしたくありません。

私はC言語で固執しているように感じています+ + /逆参照する方法!

+0

1,2,3をA1:C1に入れてsum(a1:c1)に入れないのはなぜですか? –

答えて

2

名を参照

={1,2,3} 

そうのように仕事をしなければならない。

Public Function ToArray(rngCell As Range) As Variant 

    Dim sFormString As String 
    sFormString = rngCell.Formula 

    Dim adReturn() As Double 
    ReDim adReturn(1) As Double 
    If Not Len(sFormString) - 3 > 0 Then 
     ToArray = adReturn 
     Exit Function 
    Else 
     sFormString = Mid(sFormString, 3, Len(sFormString) - 3) 
    End If 

    Dim vTest As Variant 
    vTest = Split(sFormString, ",") 

    ReDim adReturn(LBound(vTest) To UBound(vTest)) As Double 

    Dim iArrayCounter As Integer 
    For iArrayCounter = LBound(vTest) To UBound(vTest) 
     adReturn(iArrayCounter) = vTest(iArrayCounter) 
    Next iArrayCounter 

    ToArray = adReturn 

End Function 

(波括弧を持つ文字列が、例えば、セルB2に、あなたは別のセルに書き込むために必要なすべてがされている場合は= SUM(てToArray(B2)))

+0

この関数を変更して配列を返すことができますか?したがって、= SUM(TOARRAY(A1))のような式で使用できますか? – PhilChuang

+0

これはあなたが探しているものでなければなりません。 –

+0

あなたの例にいくつかのバグがありますが、そこからそれを理解することができました。どうもありがとう! 1) "Not If Len(sForm ...")の前にadreturnを宣言してください 2) "ArraySum = 0"を "ToArray = adreturn"に変更してください – PhilChuang

0

あなたは(例:テスト)の名前を定義することで、名前の配列が一定の配列を一定にすることができます。そして、この短いVBA UDFに

=SUM(test) 
+0

私はすべての行に対して異なる配列定数を定義しているので、配列定数を名前付き参照にしたくありません。 – PhilChuang

1

セルがに制限されています単一の数値、文字列、論理値またはエラー値。単一のセルに配列を含めることはできません。数式 "= {1,2,3}"が単一のセル式で評価されると、セルは配列から最初の値のみを取得します。