2011-03-10 16 views
2

跳過列我有一個VBA函數,返回到在Excel中顯示的陣列。數組的前兩列包含不需要顯示的ID。在陣列

有什麼辦法來修改Excel公式跳過前兩列,不用回到創建VBA幫手脫光列?

公式看起來像這樣,其中括號讓陣列跨小區的跨度被顯示:

{=GetCustomers($a$1)} 

回答

0

簡單的解決方案是隻隱藏的前兩列

另一可能是使用OFFSET來調整返回的數組
語法是

OFFSET(reference,rows,cols,height,width) 
+0

似乎不工作,如果我只是通過它的數組作爲參考......只有當我將整個表放在其他地方並引用該表時纔有效。不幸的是,由於Excel頁面的佈局,我無法隱藏列。 – tbischel 2011-03-10 18:56:29

0

我建議修改「GetCustomers的」功能,包括可選的布爾變量告訴返回所有列,或者只是單個列的功能。這將是最乾淨的解決方案,而不是試圖在公式方面處理它。

Public Function GetCustomers(rng as Range, Optional stripColumns as Boolean = False) as Variant() 

    If stripColumns Then 'Resize array to meet your needs 

    Else 'return full sized array 

    End If 
End Function 
1

Excel對內置數組操作最接近的是'INDEX'函數。在你的情況,如果您的「GetCustomers的」常規返回的數組是單行,如果你知道它有多長(我想你做,因爲你把它變成片狀),你可以得到你想要的東西做這樣的事情:

=INDEX(GetCustomers($A$1),{3,4,5}) 

所以說GetCustomers的()返回的數組{1,2, 「A」, 「b」, 「C」},上面只給回{ 「一」, 「公元前」}。

有不同的方法來保存自己不必鍵入您的數組索引,雖然。例如,

=COLUMN(C1:E1) 

將返回{3,4,5},您可以使用來代替:

=INDEX(GetCustomers($A$1),COLUMN(C1:E1)) 

這一招不與真正的2-d陣列工作,雖然。 「索引」將返回一個整行或列,如果你在正確的地方零通過,但我不知道如何使它返回一個2-d子集。編輯:你可以做到,但它很麻煩。假設你的數組是2x5,而你想要最後三列。你可以使用:

=INDEX(GetCustomers($A$1), {1,1,1;2,2,2}, {3,4,5;3,4,5}) 

(進一步編輯:克里斯·尼爾森提供了一個很好的方法來計算他的回答這些陣列。)

查爾斯·威廉斯有詳細解釋了使用數組像這樣在他的網站的鏈接在這裏:

http://www.decisionmodels.com/optspeedj.htm

他張貼在回答這個問題,我問:

Is there any documentation of the behavior of built-in Excel functions called with array arguments?

就個人而言,我用VBA輔助功能這樣的事情。在2 d情況下

=hstack(subseq(asCols(GetCustomers($A$1)),3,3)) 

,並且它更清楚:有了正確的庫函數,你可以這樣做:

=subseq(GetCustomers($A$1),3,3) 

在1-d的情況下,或。

0

可以使用INDEX函數從返回的數組中提取項目
- 公式是在範圍開始在單元格B2

{=INDEX(getcustomers($A$1),ROW()-ROW($B$2)+1,COLUMN()-COLUMN($B$2)+3)}