Yahoo 知識+ 將於 2021 年 5 月 4 日 (美國東岸時間) 停止服務,而 Yahoo 知識+ 網站現已轉為僅限瀏覽模式。其他 Yahoo 資產或服務,或你的 Yahoo 帳戶將不會有任何變更。你可以在此服務中心網頁進一步了解 Yahoo 知識+ 停止服務的事宜,以及了解如何下載你的資料。

Daniel
Lv 7
Daniel 發問於 電腦與網際網路軟體 · 1 十年前

Excel 數列對照的問題, 要去掉0與空白

如附件:

http://www.funp.net/128449

有ABC三欄,分別為名稱,數值,計算結果,

我想在另一處寫函數,將這三欄的數列直接對照,

但要將計算結果為0或空白者均踢除,

得到如EFG三欄的結果

這個結果使用VBA的方式我是會做,

但我這個表格不想再使用VBA,

所以要直接做函數的對照

請各位高手幫幫忙!

更新:

感謝PINY大大, 但我只要判斷C欄就好, B欄有沒有都沒關係,

那公式是不是就可以簡化許多?

麻煩您了!

更新 2:

再請教您, 如果我要將資料在對照後一併作排序, 是否可行?

更新 3:

排序的方式是要依C欄的數字, 由大排到小.

更新 4:

piny果然厲害, 真的可以排序了, 很高興!

想再請問:

LARGE($C$2:$C$21-ROW($C$2:$C$21)/10000

$C$2:$C$21-ROW($C$2:$C$21)/10000

的意義為何?

更新 5:

因我的表格標題列並非在第一列,且列數也不止20列,

為什麼我將可以排序的公式套到我的表格後都變成#NUM或#NA呢?

=IF(SUM(--NOT(ISERROR(1/$G$18:$G$65)))<ROW(1:1),””,OFFSET(C$17,IF(ISERROR(1/$G$18:$G$65),””,MATCH(LARGE($G$18:$G$65-ROW($G$18:$G$65)/10000,ROW(1:1)),$G$18:$G$65-ROW($G$18:$G$65)/10000,)),))

更新 6:

到底哪裡出問題了呢? 不知跟那10000是不是有關係?

(不管我有沒有按陣列公式都沒辦法)

更新 7:

我的G18~G65都是加總的函數,也只有SUM(...)而已

我還發現一個問題,若第一個數是0或空白時,則所有的排序結果都是#VALUE

公式要如何修改? 麻煩您了!

更新 8:

G18=SUM(D18:F18)

其它公式相同

可否有非陣列公式的做法?

我的檔案好像對陣列公式不太喜歡

我將公式直接複製, 就產生#N/A

快瘋掉了!

更新 9:

我的內容格式都是 $#,##0_ ;[紅色]-$#,##0_

更新 10:

我發現問題是在D18~F18的公式

D18=INDIRECT(D$17&”!B2”)

只要將公式COPY進去, 即變成#N/A

或許是要修改我的公式吧!

拜託大大幫忙,感激不盡!

http://www.funp.net/146393

更新 11:

我又發現一個問題

在計算的結果有負值出現時

排序的結果不會跑出負值那列

而是跑出第一個0值那列的結果

http://www.funp.net/439423

更新 12:

這幾天這個空間好像都進不去~http://www.funp.net/

我重新上傳:

http://www.badongo.com/file/9854152

麻煩各位大大的幫忙囉!

更新 13:

感謝Applerot大大的鼎力相助

排序問題解決了, 但之前的問題又出現, 等於零者應要空白, 卻又顯示出來, 再麻煩了~

http://www.badongo.com/file/9854753

謝謝!

更新 14:

其實很接近了

applerot大大新的檔案, 在產生負值時, 一個零沒問題, 在2個以上時的負值會變為#NUM!

piny大大新的公式複製進去後, 負值出不來, 相對的有多少負值就跑出多少個 0 值出來

再加油, 辛苦你們了!

更新 15:

還有~~我想要數字一樣時, 列數小的在上面, 後來都變到後面去了啦!

謝謝!

2 個解答

評分
  • piny
    Lv 7
    1 十年前
    最愛解答

    I2公式為

    =OFFSET(A$1,SMALL(IF(ISERROR(1/($B$2:$B$21*$C$2:$C$21)),"",ROW($B$2:$B$21)-1),ROW(1:1)),)

    此公式為陣列

    偵錯還在想 ^^

    2008-06-07 07:53:25 補充:

    呼!想出來了

    I2公式改為

    =IF(SUM(--NOT(ISERROR(1/($B$2:$B$21*$C$2:$C$21))))

    2008-06-07 07:54:40 補充:

    如附件(SeriesRef)

    http://www.funp.net/948150

    2008-06-07 07:55:23 補充:

    公式被截掉了

    I2

    =IF(SUM(--NOT(ISERROR(1/($B$2:$B$21*$C$2:$C$21))))<ROW(1:1),"",OFFSET(A$1,SMALL(IF(ISERROR(1/($B$2:$B$21*$C$2:$C$21)),"",ROW($B$2:$B$21)-1),ROW(1:1)),))

    2008-06-07 11:51:26 補充:

    若只判斷C欄

    I2

    =IF(SUM(--NOT(ISERROR(1/($C$2:$C$21))))<ROW(1:1),"",OFFSET(A$1,SMALL(IF(ISERROR(1/($C$2:$C$21)),"",ROW($C$2:$C$21)-1),ROW(1:1)),))

    2008-06-07 11:52:17 補充:

    重新上傳附件

    http://www.funp.net/498230

    2008-06-07 17:32:02 補充:

    排序值相同時,列號大的先排序

    M2

    =IF(SUM(--NOT(ISERROR(1/($C$2:$C$21))))<ROW(1:1),"",OFFSET(A$1,IF(ISERROR(1/($C$2:$C$21)),"",MATCH(LARGE($C$2:$C$21+ROW($C$2:$C$21)/10000,ROW(1:1)),$C$2:$C$21+ROW($C$2:$C$21)/10000,)),))

    2008-06-07 17:32:21 補充:

    列號小的先排序

    Q2

    =IF(SUM(--NOT(ISERROR(1/($C$2:$C$21))))<ROW(1:1),"",OFFSET(A$1,IF(ISERROR(1/($C$2:$C$21)),"",MATCH(LARGE($C$2:$C$21-ROW($C$2:$C$21)/10000,ROW(1:1)),$C$2:$C$21-ROW($C$2:$C$21)/10000,)),))

    2008-06-07 17:33:12 補充:

    重新上傳附件

    http://www.funp.net/985748

    2008-06-08 01:05:09 補充:

    您好,

    先回答簡單的 ^^

    應該有把「小於」符號及「加號」及「減號」改為半形吧

    而ROW($C$2:$C$21)/10000的用法主要是考量同結果時之排序問題,如您例中之23,則僅用large排序原函數,會有部分rank值佚失而影響match函數判斷

    故將每個值都加上列號,則縱使同值,也因列號不同而可分別,再加上不想影響原始排序,故將列號除以10000(若不夠,則除以100000000000)

    2008-06-08 01:19:34 補充:

    小問題

    請問G18到G65有Rand函數嗎

    2008-06-08 07:20:04 補充:

    改善起始值為0或空白

    M2

    =IF(SUM(--NOT(ISERROR(1/($C$2:$C$21))))<ROW(1:1),"",OFFSET(A$1,SMALL(IF(ISERROR(1/($C$2:$C$21)),"",MATCH(LARGE($C$2:$C$21+ROW($C$2:$C$21)/10000,ROW(1:1)),$C$2:$C$21+ROW($C$2:$C$21)/10000,)),ROW(1:1)),))

    重新上傳附件

    http://www.funp.net/923736

    2008-06-08 07:21:25 補充:

    經測試,僅有Sum函數應該可以跑出來

    G18到G65的公式應該都類似吧,可以將G18的公式寫出來嗎?

    好讓小弟方便判斷 ^^

    2008-06-08 23:48:11 補充:

    不好意思,您兩個補充的問題,經小弟一整個下午測試也想不出所以然

    初步看來,小弟的公式僅適用於DEF無公式,且G欄無負值情況,

    沒能幫上忙!

    看有無其他大師樂意相助 ^^

    2008-06-12 23:20:59 補充:

    嗯 funp網站似乎當機中

    這是用另一網站上傳的檔案(SeriesRef4-1)

    http://web2.go2upload.com/file/22916

    主要問題是

    1.sheet2之D到F欄若無公式,則K欄可顯示結果

    2.G欄加總值若為負值,會影響正確結果

    就是這兩點讓小弟束手無策 懇請大大撥冗賜教囉 ^^

    2008-06-13 00:20:05 補充:

    哇 還在嘗試瞭解applerot大大提供的解法

    如果僅零值不出現,綜合小弟公式前段的判讀公式即可

    =IF(SUM(--NOT(ISERROR(1/$G$18:$G$65)))

    2008-06-13 00:20:29 補充:

    =IF(SUM(--NOT(ISERROR(1/$G$18:$G$65)))<ROW(1:1),"",INDEX(C:C,SMALL(IF(LARGE($G$18:$G$65,ROW(A1))=$G$18:$G$65,ROW($G$18:$G$65),""),MOD(ROW(),COUNTIF($G$18:$G$65,LARGE($G$18:$G$65,ROW(A1))))+1)))

    2008-06-13 00:24:11 補充:

    applerot大大的解法比較強 佩服

  • 顯栓
    Lv 7
    1 十年前

    依經驗所得 INDIRECT 和 OFFSET 處理不好會相沖

    不知是不是我的電腦有問題以上的 http://www.funp.net/XXXX

    都沒法下載有空也幫不上忙!

    2008-06-13 00:05:47 補充:

    公式貼不完整

    檔案: http://tco.cseintltd.com.tw/applerot/pic/SeriesRef...

    自己研究

    piny 可算大師級應該不難

    重點我猜對了 INDIRECT 和 OFFSET 不相容

    2008-06-13 00:10:24 補充:

    試貼

    K18=IF(SUM(--($G$18:$G$65<>""))<ROW(1:1),"",INDEX(C:C,SMALL(IF(LARGE($G$18:$G$65,ROW(A1))=$G$18:$G$65,ROW($G$18:$G$65),""),MOD(ROW(),COUNTIF($G$18:$G$65,LARGE($G$18:$G$65,ROW(A1))))+1)))

    2008-06-13 00:20:27 補充:

    最後修訂版,檔案也修改過

    K18=IF(SUM(--($G$18:$G$65<>0))<ROW(1:1),"",INDEX(C:C,SMALL(IF(LARGE(IF($G$18:$G$65,$G$18:$G$65,""),ROW(A1))=$G$18:$G$65,ROW($G$18:$G$65),""),MOD(ROW(),COUNTIF($G$18:$G$65,LARGE($G$18:$G$65,ROW(A1))))+1)))

    有問題明天再研究!

    晚安!

    2008-06-13 10:57:15 補充:

    修訂完成,列數小的在上面、0 、負 應該都解決了

    http://tco.cseintltd.com.tw/applerot/pic/061301.xl...

    2008-06-13 12:07:26 補充:

    SUM(--NOT(ISERROR(1/$G$18:$G$65)))=SUM(--($G$18:$G$65<>0))

    兩個結果一樣!

    IF($G$18:$G$65,$G$18:$G$65,"") 將陣列中的0消除

還有問題嗎?立即提問即可得到解答。