3

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

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

同様に、AVERAGE(A1) が 2 ではなく 1 を返すことを期待します。

簡単に言えば、SUM(A1) が SUM({1,2,3}) と同じ値を返すようにするにはどうすればよいでしょうか?

行ごとに異なる配列定数を定義しているため、配列定数を名前付き参照にしたくありません。

逆参照する方法がない C++ で立ち往生しているように感じます。

4

3 に答える 3

2

この短いVBAUDFがその役割を果たします。

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)))だけです。

于 2009-08-10T19:42:46.307 に答える
1

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

于 2009-08-10T22:50:50.153 に答える
0

次のように名前 (例: test) を定義することで、配列定数を名前付き配列定数にすることができます。

={1,2,3}

次に名前を参照します

=SUM(test)
于 2009-08-10T19:28:41.950 に答える