Board logo

標題: [發問] IF可以做雙重判斷嗎? [打印本頁]

作者: nickapple    時間: 2010-6-17 23:40     標題: IF可以做雙重判斷嗎?

先前寫了一個IF迴圈如G儲存格
(f17-b17)>0=>空
(f17-b17)<0=>多

但現在想要多加一個判斷式

(f17-b17)>0且(f16-f17)>0=>空
(f17-b17)<0且(f16-f17)<0=>多

(f17-b17)>0且(f16-f17)<0=>0
(f17-b17)<0且(f16-f17)>0=>0
請問我是要加在IF迴圈內的話要怎麼改呢?[attach]1314[/attach]
作者: Hsieh    時間: 2010-6-17 23:56

依你的題意似乎應是
=IF(B17=0,G16,IF((F17-B17>0)*(F16-F17>0),"空",IF((F17-B17<0)*(F16-F17<0),"多",0)))
作者: gong    時間: 2010-6-18 08:48

1.似乎可稍為簡化
=IF(B60=0,G59,IF((F60>B60)*(F59>F60),"空",IF((F60<B60)*(F59<F60),"多",0)))
但結果會有0產生
股市不是多就是空,有0的結果是對的嗎?
作者: nickapple    時間: 2010-6-18 15:10

本帖最後由 nickapple 於 2010-6-18 15:21 編輯

感謝上面兩位大大
股市除了多 空以外 還有"空手"唷
0=空手 不做單^^ 不過實際上和構想還是會有落差
等等我再想看看要怎用文字表達出來
作者: nickapple    時間: 2010-6-18 16:50

文學造詣不好 有看不懂的地方還請告知
附件內我已經將大大們的版本放入了 [attach]1318[/attach]
但比對下來雖然是成功的 但並非小弟所想要的
所以有分成改前 改後 和理想值
簡單的說
判斷F<B且F16<F17
顯示多的時候
就不會去比較F儲存格上下的值 也就是說不會去判斷F16<F17
只會判斷F>B OR F<B 如果F>B=空 F<B=多 OR 0

這邊比較有問題的就是0這地方
如果多變成0表示F>B 且F16<F17
多變成空表示F>B且F16>F17

F>B反之亦然

但我想要的判斷流程卻是這樣(以20欄為舉例)
當F19顯示為多
20欄只判斷F及B值 如果F>B的話 先顯示0 如果F19>F20才會顯示空

這是我目前的想法 @@
拜託各位大大了(SORRY 邏輯不太好 不知道各位有沒有看得懂)
作者: nickapple    時間: 2010-6-21 20:38

我重新改過一次 請各位大大幫忙一下!
這次分開用兩個儲存格 分別為G和H

I儲存格:
先判斷G和H,如果G17=多,H17=1或G17=空,H17=1,判斷F值
若G17=多,F16>F17,I=多
若G17=空,F16<F17,I=空
其餘,I=0

[attach]1351[/attach]
作者: Hsieh    時間: 2010-6-21 21:21

I17=IF((G17="多")*(F16>F17),"多",IF((G17="空")*(F16<F17),"空",0))
作者: nickapple    時間: 2010-6-22 00:01

感謝hsieh大 雖然不是我想要的 但你卻給我一個方向

I17=IF((G17="多")*(H17=1)*(F16<F17),"多",IF((G17="空")*(H17=1)*(F16>F17),"空",0))

這才是我想要的 雖然離理想值還是有點距離^^
但若是將 J欄定義一下:
J17=IF(I17="多","多",IF(I17="空","空",0))

另外想請教 J17可以跟I17併在一塊做簡化嗎?[attach]1356[/attach]
作者: nickapple    時間: 2010-6-22 17:56

後來 我試出來了

I17=IF((I16="多")*(H17=0),"多",IF((I16="空")*(H17=0),"空",IF((G17="多")*(H17=1)*(F16<F17),"多",IF((G17="空")*(H17=1)*(F16>F17),"空",0))))

但總覺得判斷式太長,是否有辦法簡化呢?[attach]1364[/attach]
作者: gong    時間: 2010-6-23 08:54

本帖最後由 gong 於 2010-6-23 08:55 編輯

參考看看
I17=IF(H17,IF((G17="多")*(F16<F17)+(G17="空")*(F16>F17),G17,0),I16)
作者: freeffly    時間: 2010-6-30 23:42

I17=IF(H17,IF((G17="多")*(F16<F17)+(G17="空")*(F16>F17),G17,0),I16)

請問一下 ()裡面的東西好像不是數值 if裡面用* 跟 + 分別代表什麼功能
作者: gong    時間: 2010-7-1 00:02

本帖最後由 gong 於 2010-7-1 00:07 編輯

*為"且"的意思
+為"或"的意思

*要二者都為"真"才會為真
+二者其中任一為"真"都會為真
作者: freeffly    時間: 2010-7-2 22:50

試過之後發現如板大所言
他跟AND 及 OR的用法使用上有什麼差異嗎
如果用AND及OR寫 IF(OR(AND(A1>5,A1<10),AND(B1<50,B1>10)),"真","")
換成* 及 +
要怎麼表達?
作者: Hsieh    時間: 2010-7-3 00:17

回復 13# freeffly


    =IF(((A1>5)*(A1<10))+((B1<50)*(B1>10)),"真","")
作者: victorl    時間: 2010-7-3 00:35

回復 13# freeffly


AND - "且"的意思 同"*"
OR - "或"的意思 同"+"
作者: freeffly    時間: 2010-7-4 18:32

謝謝大大回複
感覺用* 跟+ 會有比較多的( )
不知道會函數的長度有沒有影響
以前曾經寫過被判定函數太長沒辦法繼續寫
()太多會這樣嗎?
作者: asimov    時間: 2010-7-5 00:54

謝謝大大回複
感覺用* 跟+ 會有比較多的( )
不知道會函數的長度有沒有影響
以前曾經寫過被判定函數太長沒 ...
freeffly 發表於 2010-7-4 18:32



使用函數有些基本限制
如使用if不可超過七層,使用sum時number不可超過30個等等
作者: Hsieh    時間: 2010-7-5 19:09

回復 17# asimov


    要突破IF的7層限制可分段再利用+讓層數延伸
SUM的30個引數可用連續範圍或陣列突破
置於公式長度大於256字元可能遭EXCEL拒絕接受可搭配定義名稱解決
作者: freeffly    時間: 2010-7-5 22:18

回復  asimov


    要突破IF的7層限制可分段再利用+讓層數延伸
SUM的30個引數可用連續範圍或陣列突破 ...
Hsieh 發表於 2010-7-5 19:09


if的分段有例子可以分享嗎
我都是在不同儲存格做完判斷
然後用最終要顯示的儲存格去選取其他判斷玩的儲存格
用這種土法煉鋼的方式分段
很好奇大大的分段怎麼使用
作者: asimov    時間: 2010-7-5 22:43

本帖最後由 asimov 於 2010-7-5 22:49 編輯
    要突破IF的7層限制可分段再利用+讓層數延伸
SUM的30個引數可用連續範圍或陣列突破 ...
Hsieh 發表於 2010-7-5 19:09



Hsieh版主說得沒錯
可以運用各種技巧突破if的7層限制
例如=if(and(條件一,條件二),.....
    =if(or(條件一,條件二),.....
    或是交叉運用=if(and(or(.....),and(......)),.....

SUM真的只能有30個number嗎
試試附件"[attach]1687[/attach]"
您會發現隨時充滿驚奇
C17總共用了517個字元,150個number...
作者: PD961A    時間: 2010-7-6 07:18

Hsieh版主說得沒錯
可以運用各種技巧突破if的7層限制
例如=if(and(條件一,條件二),.....
    =if( ...
asimov 發表於 2010-7-5 22:43


[attach]1690[/attach]

原則上可以到最後一欄
[attach]1691[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)