2011-10-14 37 views
4

例如,假設我有是否有Excel的數組公式的編程接口?

{={1,2,3,4,5}} 

在細胞中。有什麼方法可以找出該陣列中有多少個元素,以及這些元素是什麼?

現在實行@克里斯尼爾森的主意,我現在已經有了一個VBA函數如下

Function rinfo(r As Range) As String 
    With r.CurrentArray 
     rinfo = .Address & ", " & .Rows.Count & ", " & .Columns.Count & ", " & .Value & ", " & .Value2 
    End With 
End Function 

但是從它的數據看起來不樂觀,即

$A$29, 1, 1, 1, 1 

行.Count和Columns.Count是否合理,如果它們計算工作表中使用的行和列。但是,作爲數組公式中的數據的指示,不。

+0

從哪裏? VBA或其他公式? –

+0

@chris neilsen的解決方案正常工作。例如,如果確實有一個1x5的數組,那麼'.Value'和'.Value2'方法應該拋出一個類型不匹配的錯誤,因爲你的'{= {1,2,3,4,5}} '它們不適用於數組......但是它們不會,這使我認爲您的數組在表單上的大小爲1x1。 –

+0

@Jean由於某種原因從udf調用時'.CurrentArray'不會返回整個範圍,而只是第一個單元格,因此在示例中沒有錯誤。那爲什麼我說「在一個小組」。更奇怪的是,如果函數是從一個Sub調用的,它會返回一個數組,並且示例*將會出錯。 –

回答

5

您的公式只佔用一個單元格,並且一個單元格只能包含一個標量值,所以在單元格之後l已計算出它將包含1.
但是,您可以從VBA評估公式並可以給出數組結果。如果你的公式是A1,那麼

Dim vArr As Variant 
vArr = Evaluate(Range("a1").Formula) 

將導致vArr包含4個數字的4個變體的數組。
評估方法有幾個「怪癖」:有關詳細信息,請參見one of my web pages

+0

你真了不起。謝謝! – bugmagnet

+0

啊哈,現在我明白了這個問題。 +1 –

1

Sub,如果clRange並且被設定爲一個陣列式的一部分的小區,則

cl.CurrentArray 

返回包含該陣列式的範圍內。

如果你的榜樣公式是細胞A1:E1和activecell是任意小區A1 ... E1,然後運行

Sub zx() 
    MsgBox "ref = " & ActiveCell.CurrentArray.Address 
End Sub 

將返回ref = $A$1:$E$1

消息您可以使用.Rows.Count.Columns.Count到得到大小,並.Value得到值