excel 表格lookup 的操作
生活随笔
收集整理的這篇文章主要介紹了
excel 表格lookup 的操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個實現語句如下,(寫在2行然后向下拖動)(2007或以上版本):
1 = 2 IF(OR($D2<>0,ISBLANK($H2),$G2="111"), 3 "", 4 IF(OR($G2="222",$G2="333"), 5 IF($H2>0,1,-1)*SUMIFS(INDIRECT("E"&IFERROR(LOOKUP(1,0/(($H$1:INDIRECT("H"&ROW()-1)<>"")*($G$1:INDIRECT("G"&ROW()-1)=$G2)),ROW($1:2))+1,ROW($1:$1))):$E2,INDIRECT("A"&IFERROR(LOOKUP(1,0/(($H$1:INDIRECT("H"&ROW()-1)<>"")*($G$1:INDIRECT("G"&ROW()-1)=$G2)),ROW($1:2))+1,ROW($1:$1))):$A2,$A2,INDIRECT("B"&IFERROR(LOOKUP(1,0/(($H$1:INDIRECT("H"&ROW()-1)<>"")*($G$1:INDIRECT("G"&ROW()-1)=$G2)),ROW($1:2))+1,ROW($1:$1))):$B2,$B2,INDIRECT("D"&IFERROR(LOOKUP(1,0/(($H$1:INDIRECT("H"&ROW()-1)<>"")*($G$1:INDIRECT("G"&ROW()-1)=$G2)),ROW($1:2))+1,ROW($1:$1))):$D2,0,INDIRECT("G"&IFERROR(LOOKUP(1,0/(($H$1:INDIRECT("H"&ROW()-1)<>"")*($G$1:INDIRECT("G"&ROW()-1)=$G2)),ROW($1:2))+1,ROW($1:$1))):$G2,$G2) - $H2, 6 IF(OR($G2="444",$G2="555"), 7 IF($H2>0,1,-1)*SUMIFS($E:$E,$B:$B,$B2,$G:$G,$G2,$A:$A,$A2,$D:$D,0) - $H2, 8 "ERROR" 9 ) 10 ) 11 )?
主要復雜的是:
INDIRECT("E"&IFERROR(LOOKUP(1,0/(($H$1:INDIRECT("H"&ROW()-1)<>"")*($G$1:INDIRECT("G"&ROW()-1)=$G2)),ROW($1:2))+1,ROW($1:$1)))其作用就是返回:H列中存在空值,假設第i行有數據,從i行向上查找直到遇到另一個數據位置,返回查找到的空值的最小行號,如下面表格,i=2返回1,i=9返回5,當然還有符合一定篩選條件。
| 1 | ? |
| 2 | num |
| 3 | ? |
| 4 | num |
| 5 | ? |
| 6 | ? |
| 7 | ? |
| 8 | ? |
| 9 | num |
語句逐步才開看indirect,作用是將字符串“” 轉換成有效代碼,INDIRECT(“E”&1)= E1
- IFERROR()
為了解決向上查找時候沒有遇到空值的情況,例如上表中的第一行若為標簽,i =2 時候向上查找并未遇到空,所以用這個語句返回ROW($1:$1),E和1 前面帶 $ 意義是excel 中拖動時候不變。
- ROW() 返回選中單元格的行號。
下面是需要慢慢講的查找語句,先通過簡單版來講原理。
- LOOKUP(1,0/($H$1:INDIRECT("H"&ROW()-1)<>""),ROW($1:2))
一個數據的上面最靠近的 非 空值可以通過上面語句來返回行號。原理: INDIRECT($H$1:INDIRECT("H"&ROW()-1)<>"") 表示該列 從第一行到數據上一行的 是數值是否為空的判斷,結果是 一列的true 、false
0/(...)
用0 除以后變成一列 0 和 div/0,需要括起全部數據,后者是excel 的一個錯誤標記{0;0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;0}
然后在該列 中查找1 ,必須大于0(利用了excel 的機制,baidu會有更清楚的解釋:lookup 會默認第二個參數是已經sort(從小到大),忽略error,然后用二分查找),結果就會選中列中最后一個0,最后返回第三個參數 的對應數值,這里是行號。如果 查找的指匹配到了,lookup 的機制是返回匹配中最后一個,返回第一個好像是match。
剩下的加減 1是自己調整的。
- ($H$1:INDIRECT("H"&ROW()-1)<>"")*($G$1:INDIRECT("G"&ROW()-1)=$G2)
通過上面0/(...) 的解釋,可以加入條件選擇,避免了數組公式所以使用*號,這是一個且運算,并沒有找到或運算的,1*n 數列 且 1*n 數列 = 1*n 數列。
把使用方法也附上吧
1.對原始數據添加首行,第一行,需要注意的是列A,B,D,E,G,H 必須正確對應
次碼 主碼 有效號 計算值 選擇類型 處理選擇
2.對添加首行后的數據排序,方法:
ctrl+A 后選擇 開始->排序和篩選->自定義排序,
勾選 數據包含標題,
列:主碼,排序依據:數值,次序:升序
點擊添加條件,
列:次碼,排序依據:數值,次序:升序
3.在某一列的第二行,必須第二行,復制上面的公式
4.最后是一拖到底(其中有空行不影響,向下拖,另向右拖不影響結果)
轉載于:https://www.cnblogs.com/Azhu/p/4120067.html
總結
以上是生活随笔為你收集整理的excel 表格lookup 的操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 俞敏洪说想给董宇辉在北京买套房子 这话我
- 下一篇: 知乎怎么关闭接收喜欢我的回答消息