標題:
[發問]
這段程式有部分不瞭解
[打印本頁]
作者:
morris_lth
時間:
2016-1-15 11:03
標題:
這段程式有部分不瞭解
G3儲存格 {=INDEX(D:D,SMALL(IF($A$2:$A$25=$G$1,ROW($A$2:$A$25),65536),ROW(1:1)))&""}
G4儲存格 {=INDEX(D:D,SMALL(IF($A$2:$A$25=$G$1,ROW($A$2:$A$25),65536),ROW(2:2)))&""}
G5儲存格 {=INDEX(D:D,SMALL(IF($A$2:$A$25=$G$1,ROW($A$2:$A$25),65536),ROW(3:3)))&""}
主要功能是G1輸入要尋找的資料,在A2~A25之間找尋,找到後依序輸出至G3/G4/G5
找到資料後程式運作已經了解
1.
,若是沒找到資料這部分不懂,可以幫忙解惑嗎?以下是我的假設
=INDEX(D:D,SMALL(IF($A$2:$A$25=$G$1,ROW($A$2:$A$25),65536),ROW(3:3)))&"" //假設G1≠A2~A25,
=INDEX(D:D,SMALL(IF(FLASE, ROW(A2:A25),65536),ROW(3:3)))&"" //找不到所以是FLASE
=INDEX(D:D,SMALL(65536,ROW(3:3)))&"" <----SMALL(array,k) ,65536 在這邊是錯誤的格式? 這邊該如何理解?
2.另外程式中為何要用65536 能順便解釋嗎?
3.若是前一次搜尋G3~G5有輸出資料,後一次搜尋只有一筆資料G3, G4/G5是如何做到把舊資料清除
謝謝
作者:
morris_lth
時間:
2016-1-15 12:09
回復
1#
morris_lth
我測出部分功能
1.SMALL(IF($A$2:$A$25=$G$1, ROW(A2:A25),65536),ROW(3:3)))
==>這段依舊不解,經過實測,若是FALSE則結果=65536.
但我的理解是若為FALSE 程式應該要變成這樣SMALL(65536,ROW(3:3)) , 但這不符合語法 SMALL(
array
,k)....
2.另外程式中為何要用65536 能順便解釋嗎?
==>如果沒尋到資料則就是傳回D65536的內容,若改成100,則是沒找到就會丟出D100內的資料
3.若是前一次搜尋G3~G5有輸出資料,後一次搜尋只有一筆資料G3, G4/G5是如何做到把舊資料清除?
==>呈上也正是因為這樣可以把多餘的資料清除
作者:
准提部林
時間:
2016-1-17 10:32
回復
2#
morris_lth
J1:
=IF($A$2:$A$25=$G$1,ROW($A$2:$A$25),65536)
游標留在公式編輯格,先不要按 ENTER,按F9,即可看出陣列變化∼∼
{65536;3;65536;5;6;7;65536;9;10;11;12;13;14;15;16;65536;18;65536;20;65536;22;23;65536;25}
65536,為2003版工作表最後一列,一般用不滿,預設為空格!
作者:
ML089
時間:
2016-1-17 11:41
回復
2#
morris_lth
回復 1# morris_lth
我測出部分功能
1.SMALL(IF($A$2:$A$25=$G$1, ROW(A2:A25),65536),ROW(3:3)))
==>這段依舊不解,經過實測,若是FALSE則結果=65536.
但我的理解是若為FALSE 程式應該要變成這樣SMALL(65536,ROW(3:3)) , 但這不符合語法 SMALL(array,k)....
2.另外程式中為何要用65536 能順便解釋嗎?
==>如果沒尋到資料則就是傳回D65536的內容,若改成100,則是沒找到就會丟出D100內的資料
3.若是前一次搜尋G3~G5有輸出資料,後一次搜尋只有一筆資料G3, G4/G5是如何做到把舊資料清除?
==>呈上也正是因為這樣可以把多餘的資料清除
回覆1
4^8 = 65536 ,2007版以前的版本最後一列為 65536,一般假設你不會用到第65536列,當不符合資料時將資料指標指向第65536列,這樣公式就會取到空白欄資料。
回覆1
SMALL(IF($A$2:$A$25=$G$1, ROW(A2:A25),65536),ROW(3:3))) 這陣列資料判斷
==>SMALL(65536,ROW(3:3)) 這單筆資料判斷,不是上述公式的執行過程
==>SMALL({.....65536......},ROW(3:3)) , {.....65536......}表示有24筆經過IF判斷,符合時為該列碼 2...25,不符合時為65536
最後用 SMALL 取 ROW(3:3) 取第3小的列號。
回覆3
SMALL(IF($A$2:$A$25=$G$1, ROW(A2:A25),65536),ROW(3:3)))
考慮只有一筆符合時公式改為
=IFERROR(SMALL(IF($A$2:$A$25=$G$1, ROW(A2:A25)),ROW(3:3))),"")
適用於 EXCEL2007板以上
作者:
morris_lth
時間:
2016-1-18 10:30
謝謝幫忙.
這段程式若是用VBA方式來寫,該如何做呢? 現在沒頭緒阿~
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)