利用公式嵌套實現複雜的Excel中動態獲取sheet頁並獲取某表格中某值

遇到一個看似複雜邏輯過程,將對於excel工資數據進行處理。

現狀:

     每個月份產生一個sheet頁的數據,Sheet名稱命名格式格式固定YYYY.MM

需要處理邏輯:

    1、每年的1月份不累計以前月份的數據;其它月份累計上個月的歷史數據

    1.1 如果在歷史數據中獲取不到數據,則累計值需要返回零。

            例如,在某公司的工資表中,如果新員工入職第一個月發的工資,因爲沒有歷史累計個稅扣除,則需要認爲以前累計扣除值爲0。

 

       原來認爲在一個公式裏面,動態根據日期計算sheet名稱,以及前面所要求的基本處理邏輯,很難用一個公式來處理,後來通過研究wps2019提供的公式,發現還是可以搞一搞的。

公式如下

IFERROR       

  if(MONTH(NOW())=1,0,                 #判斷是否1月份

              IFERROR                              #vlookup查詢不到則返回零值邏輯處理

                    VLOOKUP(D8,                #本Sheet頁要查的key值,例如某id值

                             EVALUATE(             #根據日期拼湊sheet頁名,再拼湊文本公式引用sheet頁的數據表區域,動態評估文本公式

                                      CONCAT(CONCAT(YEAR(NOW()),".",

                                                 IF(MONTH(NOW())>10,MONTH(NOW())-1,CONCAT("0",MONTH(NOW())-1)))#動態判斷時間產生頁名

                                                                            "!D:AZ")),  #數據表區域

                                                                                        2,FALSE)

                                ,0)                          #vlookup查詢不到則返回零值返回

         )                        

,0) #異常保護

 

     利用if+iferror邏輯公式/concat文本拼湊公式/vlookup查詢公式/evaluate動態執行文本公式,幾個公式組合下來,就可以實現較爲複雜的邏輯。

    此公式在wps2019上測試通過,其他excel體系可以參考去寫......

   當時測試通過後,令我非常驚訝,原來以爲要寫一個複雜的vba腳本進行處理,但是,幾個公式的組合就可以完成以上的邏輯,也順便體會到Lisp編程的偉力,就是那一層層各種括號函數的嵌套,完成了複雜的邏輯過程,哈哈!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章