2022-04-02|閱讀時間 ‧ 約 5 分鐘

寫長算式的建議

我們都想寫又簡單又好管理的算式,畢竟困難的又長又難寫啊 ( •́ _ •̀)
但生命中總會有不得已、必須把算式寫得很長、或是很多巢狀結構、一組括號又要包著一組括號的糾結時刻。想讓這樣複雜的算式執行成功、又要有易讀性,方便之後管理,其實不是件容易的事情。
所以呢,今天想分享幾項我在工作中實際用到的方法,在寫長算式的時候更不容易出錯的幾個小建議,給大家參考參考!

建議一:善用換行和空白鍵

假設我們今天有個算式:
=IFERROR(VLOOKUP(TRIM(MID(A1,10,50)),Validation!$A1:B50,2,false),"發現錯誤")
但如果分行整理成:
=IFERROR(
  VLOOKUP(
      TRIM(
          MID(A1,10,50)),
      Validation!$A1:B50,2,false
          ),
 "發現錯誤")
是不是會比較好讀一點點?原本看起來複雜,但現在應該可以看得出來由內而外是 MID、TRIM、VLOOKUP、IFERROR 這四個函式了吧?這樣一來,之後如果函式回傳錯誤,也比較容易層層抽絲剝繭下去,找到癥結點就可以排除錯誤了。
換行的方法很簡單,在你想換行的地方按 Command/Ctrl + Enter 就可以囉!我們看看效果:
Before
Before
After
只是換行,瞬間清楚多了!

給正在努力寫 Google Apps Script 的朋友
如果你需要寫 setFormula() 或是陣列的 setFormulas() 這類需要大篇幅斷行的算式,字串的換行可以用 \n\ 完成,像是:
var formula = 
"=IFS(   \n\
    ...  \n\
    ...)"

ss.getRange("A10").setFormula(formula)
執行後,\n\ 也會幫你斷行,就會有 Ctrl/Command + Enter 的效果。

建議二:巢狀算式由內往外寫、一層一層來

內層的算式執行結果如果沒寫好,外部也很容易出現錯誤或是預料外的結果。
與其一開始就直接用外層的算式包到內部、又不考慮內層算式執行成果,不如先把內層寫好、確定執行結果是自己預期的之後再向外包一層,做完再包一層、再包、再包、再包...,這樣就不會那麼容易出錯了,尤其是得寫巢狀 IF、巢狀 QUERY、字串處理和擷取(LEFT/MID/RIGHT/FIND/LEN 等)的時候,我非常推薦這個做法!
如果寫的過程出現錯誤的話,可以搭配我之前寫過的錯誤疑難排解術來檢查問題出在哪喔。

建議三:檢查括號層級

如果你按照建議一妥善地斷行、建議二把巢狀算式整理乾淨後,卻還是出錯,那可以檢查看看括號是不是包含到了不該列入的算式。這種情況發生的原因通常是多打、或少打括號導致,只要耐心釐清括號的範圍該是哪裡到哪裡,補上或刪減不對的括號就大概可以解決了。

建議四:檢查絕對位址、相對位址

如果長算式發生錯誤,可以先確認你的長算式裡面有絕對位址(儲存格位址出現 $A$1 這類有「$」的符號)和相對位址(也就是位址沒有「$」的符號),可以再檢查一下位址是不是都妥妥指定好。如果你的算式是從別的儲存格貼過來的,也有可能會發生這樣的錯誤,把儲存格的位址梳理好也或許可以解決。

建議五:寫長的沒把握就先拆開來寫短的!

上面的方法都試過了,還是做不出來的話,其實人生不必活得那麼辛苦 (›´ω`‹ )!如果真的沒辦法在一個儲存格內一口氣寫完長的,把長的拆成短的處理、分在別的儲存格上先釐清問題,搞定了後再拼裝回去也是個方法。你可以考慮把原本長算式裡內層的部分先執行好,再用另外一個儲存格的算式包覆,結果還是出得來的。

簡單來說,只要把邏輯理清楚、斷行斷得好,或是把長的改成短的、分開處理,就算遇到長算式的難關也能迎刃而解,慢慢來、比較快!
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
・按下愛心、按下儲存
・留言告訴我你的想法
・加入喜特先生的官方沙龍,即時看到我發布的教學
・付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
・追蹤喜特先生的 Facebook
・按這邊小額贊助我的創作!
想要看更多文章,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.