2018年7月5日 星期四

Google Sheets: Oscillator by Importing Circular Accumulator: 載入循環累計,製作全時震盪器

未開啟 Google Sheets 試算表時,變動函式 (Volatile Function) 並不會變動。透過載入同一個試算表中的循環累計儲存格,即使未開啟試算表,也能造成變動,觸發變動函式重新計算。

1 循環累計

把自己的值,加一,再交給自己儲存,就形成循環累計的公式:
A1 =A1 + 1
這是循環參考運算,需要先開啟循環參考的「反覆運算 1 次」功能。(參考文章:Google Sheets: Freeze Volatile Function by Circular Reference: 用循環參考,凍結變動函式)



試算表中的任何其他儲存格有修改時,循環累計儲存格的值就會遞增。


2 載入循環累計

在同個試算表中,載入該循環累計儲存格,就形成全時震盪器:
A1 =ImportRange( 這個試算表, 循環累計儲存格 )
首次的載入,會改變試算表內容,造成循環累計儲存格遞增。而遞增後的循環累計儲存格的值,又確保了下次被載入時,會改變試算表內容,並繼續遞增循環累計儲存格。




3 補充



3.1 儲存格位址

上例 ImportRange() 的第二個參數,可以直接寫 "循環累計值!$A$1"。但將來試算表的結構改變時,要記得調整該參數。使用 CELL() 產生儲存格位址字串,則能自動調整,較易維護。


3.2 載入時的儲存格位址

函式 CELL( "address", ... ) 會根據所在工作表,產生最精簡的儲存格位址字串。

  • 在 Sheet1 (不同工作表) 中:
    • CELL( "address", Sheet2!A1 ) 會得到 "Sheet2!$A$1"。
  • 在 Sheet2 (相同工作表) 中:
    • CELL( "address", Sheet2!A1 ) 會得到 "$A$1"。

函式 ImportRange() 的第二個參數,含有工作表名稱 (例如:"Sheet2!$A$1") 會比較穩當。因此建議把 ImportRange( ... , Cell( "address", ... ) ) 放在不同的工作表中,可以避免載入錯誤的儲存格。