跳過列我有一個VBA函數,返回到在Excel中顯示的陣列。數組的前兩列包含不需要顯示的ID。在陣列
有什麼辦法來修改Excel公式跳過前兩列,不用回到創建VBA幫手脫光列?
公式看起來像這樣,其中括號讓陣列跨小區的跨度被顯示:
{=GetCustomers($a$1)}
跳過列我有一個VBA函數,返回到在Excel中顯示的陣列。數組的前兩列包含不需要顯示的ID。在陣列
有什麼辦法來修改Excel公式跳過前兩列,不用回到創建VBA幫手脫光列?
公式看起來像這樣,其中括號讓陣列跨小區的跨度被顯示:
{=GetCustomers($a$1)}
簡單的解決方案是隻隱藏的前兩列
另一可能是使用OFFSET
來調整返回的數組
語法是
OFFSET(reference,rows,cols,height,width)
我建議修改「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
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的情況下,或。
可以使用INDEX函數從返回的數組中提取項目
- 公式是在範圍開始在單元格B2
{=INDEX(getcustomers($A$1),ROW()-ROW($B$2)+1,COLUMN()-COLUMN($B$2)+3)}
似乎不工作,如果我只是通過它的數組作爲參考......只有當我將整個表放在其他地方並引用該表時纔有效。不幸的是,由於Excel頁面的佈局,我無法隱藏列。 – tbischel 2011-03-10 18:56:29