作者JieJuen (David)
看板Office
標題Re: [算表] 請問關於陣列公式--集中
時間Wed Mar 24 19:58:20 2010
這是基本的集中公式囉
複習一下
=INDEX(A:A,SMALL(IF((LEFT($A$1:$A$1042,1)="1")*($A$1:$A$1042<200),
ROW($A$1:$A$1042)),ROW(A1)))
此法會省的情況是符合條件的a欄資料不會太多
否則很多條陣列公式仍然不快
※ 引述《b19111010 (怡君怎麼會輸的…)》之銘言:
: 設有如下a1至f4資料
: 112 =LEFT(A1,1)="1" =A1<200 =AND(B1,C1) =IF(D1=TRUE,ROW(),"") =OFFSET($A$1,SMALL(E:E,ROW())-1,,,)
: 833 =LEFT(A2,1)="1" =A2<200 =AND(B2,C2) =IF(D2=TRUE,ROW(),"") =OFFSET($A$1,SMALL(E:E,ROW())-1,,,)
: 1341 =LEFT(A3,1)="1" =A3<200 =AND(B3,C3) =IF(D3=TRUE,ROW(),"") =OFFSET($A$1,SMALL(E:E,ROW())-1,,,)
: 149 =LEFT(A4,1)="1" =A4<200 =AND(B4,C4) =IF(D4=TRUE,ROW(),"") =OFFSET($A$1,SMALL(E:E,ROW())-1,,,)
: 其中a欄為原始資料欄,f欄為將要印出的結果欄(a欄中符合某條件之儲存格集中列示於f
: 欄)。
: 但由於a欄資料現實情境中往往上千筆(ex:a1:a1042)
: 如果依上述方法,複製e1:f1公式上千列以產生f欄結果,
: 此xls檔將會變得很大,運算時間亦變得較長。
: 故來請問各位大大,
: 是否有簡化上述設定以獲得同樣結果之方法?
: 目前想到是否可以類似「陣列」方式簡化以上公式如下:
: 112 =LEFT(A:A,1)="1" =A:A<200 =AND(B1,C1) =IF(D1=TRUE,ROW(),"") =OFFSET($A$1,SMALL(E1,ROW(e1))-1,,,)
: 833
: 1341
: 149
: 上述設定中的f1是否為「等於原設定中的f1:f4」的陣列?
: 如是,則如何把f1「列印出」或「顯示出」如原設定中f1:f4之樣式?
: 如否,則請問修正上述構想之方法或大大另有的簡化途徑?
: 感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.47.1.214
推 b19111010:感謝J大賜教!!!另請問如果small裏的三個判別式分拆在三 03/24 22:59
推 b19111010:個或更多的儲存格,會比合起在一個儲存格更浪費運算資源 03/24 23:02
→ b19111010:嗎?(有這個考量是因為遇到的實際情況都是有很長的判別式 03/24 23:03
→ b19111010:如果合在一起我怕終於會超過儲存格的限制字數) 03/24 23:04
可能要看實例比較清楚 而且實驗了才能確定
以前經驗是多格則容量很大 少格則計算較慢
但太多格又會變慢 如果很少格則會快 要取得平衡
比較好的方法通常都是改寫條件式
不一定都是改得更精煉 有可能改得更平白 拆得更開 才計算快
如果只有幾千列 應該不會太多格
前幾欄都可留著 F欄改成集中公式即可
另應不會超過字數 因為公式字數可比顯示字數多
比較會超過的是7層巢狀 可用定義名稱解決
※ 編輯: JieJuen 來自: 114.47.1.214 (03/24 23:43)
推 b19111010:再次感謝J大賜教!! 03/25 22:13