Excel 的列與列之間的比較

2007-02-13 5:09 pm
Excel 的列與列之間的比較

在Excel 的欄D中的某一列, 例如: D100向上跟上一個儲存格比較, 若D99是空格則繼續向上比較, 直到不是空格為止. 例如去到D91先至不是空格, 則不用再向上比較了, 那麼D100跟D91比較, 若相同則E100=(E91+F100), 若不同則E100=F100.

不要跟我說用好多個IF來做

請高手們多多指教

thanks !!

^_^

回答 (5)

2007-02-13 8:31 pm
✔ 最佳答案
謹提供以下一個方法,不須要用 Macro ,兩條公式就可以了,。

為方便錄製示範,我將 問題裏的儲存格範圍從 D1:D100 簡約到 D1:D10 ,所以你只要將公式裏的 D9 轉做 D99 及 D10 等轉做 D100 就可以了。。

D12 的公式是:
=MAX(IF(D1:D9<>"",ROW(D1:D9),0))

記住一定 Double Click D12 那一格,然後 Copy & Paste ,最後再用 Ctrl+Shift+Enter


E10 (即最後答案) 的公式是:
=IF(OFFSET(D1,D12-1,0)=D10,D10+F10, F10)

點擊圖片可 Fast Forward 及 Rewind 。


圖片參考:http://big-lin.com/Documents/7007021300533_Excel_Upward_Search.gif




詳細解說:

這條問題最難的地方是要在一個 Column 裏,找出最底的一個不是空格的儲存格。
謹提供以下一個方法,不須要用 Macro ,不過要額外多用一個儲存格。

首先,原本 Excel 裏的 MATCH() 函數,是可以做到從上以下搜尋某一個特定字樣的。
不過,問題要求從下而上地搜尋,所以我們要找另一個方法。

其實,我們只要測試 D1:D100 中每一格,看它們是否空格,然後選取列數 (Row Number) 最大的那個就可以了。例如:

=D1<>""
若不是空格就 Return TRUE ,若是空格就 Return FALSE
=IF(D1<>"", ROW(D1), 0) 若不是空格就 Return D1 的列數,若是空格就 Return 0

當一百個都比較完,我們就有一堆不是空格的列數 ,那麼在當中選取最大的就可以了。

當然,如你所說,我們不可能用一百個 IF() 來達到這個目的。不過,我們可以用 Array Formula 來做,如:

=MAX(IF(D1:D9<>"",ROW(D1:D9),0))

你見到 IF() 裏居然拿超過一個格來比較,即 D1:D9<>"" ,不錯,這個就是 Array Formula 。
輸入 Array Forumula 時要注意,打完公式後要按 Ctrl+Shift+Enter 而不是像平時那樣只按 Enter 。
按完 Ctrl+Shift+Enter 後,你會見到公式被一對大括號包圍。

知道最後一格的列數後就可以比較兩格,然後有條件地做加數,這一步應該很容易 不用解釋。


2007-02-15 04:39:54 補充:
公式顯示出現問題。 第一條裏的 後不應有分號。你也可以真接下載這個現成 Excel 檔:http://big-lin.com/Documents/7007021300533_Excel_Upward_Search.xls
2007-02-14 9:58 pm
題目有3點未清晰:
1.) 公式是否需要下拉? 現我假設是要下拉
2.) D欄第1項(假設是D1), 因無法向上比較, 那E1的值會是什麼呢? 現我假設E1是空白格
3.) D92:D99是空白格, 那E92:E99是什麼呢?現我假設D92:D99的下拉結果是空白格
我的方法是(要用輔助欄, 現假設是G欄, 用一般傳統公式):
在G1 輸入 數值 1
在G2輸入公式: =IF(D2&lt; &gt;“”,1,G1+1), 然後下拉至尾
在E2輸入公式: =IF(D2=“”,“”,F2+IF(D2=OFFSET(D2,-G1,0),OFFSET(E2,-G1,0))), 然後下拉
注意: E1 因尚未定義, 故是保存空白的
如有需要, 如列印, 可將G欄隱藏, 或將文字色彩選白色
完成
2007-02-14 7:06 am
=IF(INDIRECT(&quot;R&quot;&MATCH(999999999,D1:D99,1)&&quot;C4&quot;,0)=D100,INDIRECT(&quot;R&quot;&MATCH(999999999,D1:D99,1)&&quot;C5&quot;,0)+F100,F100)

2007-02-17 00:46:13 補充:
=IF(INDIRECT“R&quot;&MATCH(999999999,D1:D99,1)&&quot;C4&quot;,0)=D100,INDIRECT(&quot;R&quot;&MATCH(999999999,D1:D99,1)&&quot;C5”,0)+F100,F100)

2007-02-17 10:23:43 補充:
=IF(INDIRECT“R”&MATCH(999999999,D1:D99,1)&“C4”,0)=D100,INDIRECT(“R”&MATCH(999999999,D1:D99,1)&“C5”,0)+F100,F100)
2007-02-14 6:28 am
用陣列公式做左個例子 應符合你要求
http://hk.geocities.com/snam_hk/00000022.xls

公式你想要多少列 你只要往下拉就可以

陣列公式要按住 ctrl 同 shift 再按enter 哦 . . .
2007-02-13 7:38 pm
如果你是用 Macro如下:

Range(&quot;D99&quot;).Select
Selection.End(xlUp).Select
ActiveCell.Range(&quot;A1&quot;).Select
Selection.Copy
Range(&quot;C100&quot;).Select
Selection.Paste

if Range(&quot;C100&quot;)=Range(&quot;D100&quot;)
then Range(&quot;E100&quot;)=Range(&quot;F100&quot;)+Range(&quot;C100&quot;)
else Range(&quot;E100&quot;)=Range(&quot;F100&quot;)
End Sub

留意:
&quot; 變左 &amp;quot

2007-02-13 17:05:07 補充:
如果你不是用 Macro如下首先在C100輸入=INDEX(D1:D100,ROWS(D1:D100)在E100輸入IF(C100=D100,INDEX(E1:E100,ROWS(D1:D100)+F100,F100)留意: C100 是空的或者用另外一個代替亦可


收錄日期: 2021-04-12 19:11:00
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070213000051KK00533

檢視 Wayback Machine 備份