設計手冊
遇到問題了嗎?不用擔心,答案都在這。
全站搜尋

公式

公式使用

Ragic 與 Excel 一樣都可以撰寫公式進行運算,但 Ragic 的公式都是自行開發的,因此支援的公式或寫法不一定相同,尤其撰寫公式時是直接參照欄位標頭

公式不只能運算數字,也能計算字串及日期,系統會自動辨識需要用什麼類別的公式運算。但還是建議把要公式運算的欄位設定成對應的欄位種類,像是數值或是日期欄位會比較好。

表單頁設計模式下,點選欄位標頭後選擇左側列的公式,就可以輸入公式。

例如在「銷售訂單」中的金額的公式為售價*數量,就在該空格中輸入「C9*D9」。要注意公式要參照的儲存格是標頭所在的位置

在有設定公式的欄位右上方會顯示 fx() 圖示。

點擊該圖示的話,會將該公式的所有參照欄位框選出來,以便快速查找。

更多公式可以查看支援的公式列表。注意:多選欄位只能套用列表中的特定公式。

支援的運算符號

符號會決定如何執行運算。以一般運算來說,會遵循先乘除後加減的規則。但跟數學運算相同,你可以利用「括號 ()」來改變運算的順序。但 Ragic 不能以冒號: 來加總儲存格範圍的值

算數運算符號

要執行基本的數學運算,像是加減乘除,請使用以下算數符號。

算數符號 意涵 例子
+ (加號)加法 3+3
– (減號) 減法  3–1
* (星號/米字號) 乘法 3*3
/ (斜線) 除法 3/3
^ (插入符號) 次方 3^2

比較符號

你可以利用以下符號來比較兩個值。你也能在條件公式中用這些符號來判斷是否符合邏輯,然後顯示 TRUE 或 FALSE。

比較符號 意涵 例子
= 等於 A1=B1
== 等於 A1==B1
> 大於 A1 > B1
< 小於 A1 < B1
> = 大於等於 A1 > =B1
< = 小於等於 A1 < =B1
!= 不等於 IF(A1!=B1,'yes','no')

公式中的字串

你可以用「'單引號'」或「"雙引號"」標註公式中的字串。我們將使用「'單引號'」來解說,但兩種格式 Ragic 都支援。

計算子表格中的值

Ragic 的公式是直接參照欄位標頭的,讓公式套用更為簡單。特別是在子表格就不需要撰寫複雜的公式。

下列為「銷售訂單」的演算範例。子表格列出商品的售價(C9)與數量(D9),透過乘法運算可以得知顧客每項商品所需要付的總額(C9*D9);

小計(D13)的數值是由 E9 加總而來的。

除了上述的例子,也有其他能應用於子表格的公式。假設要計算子表格中有多少筆資料,可以新增一個欄位並利用子表格的欄位標頭來寫 COUNT() 公式。

如果需要其他進階條件公式來計算或加總子表格欄位值,請參閱 COUNTIF 函數COUNTIFS 函數SUMIF 函數 SUMIFS 函數

計算子表格中不重複的值

在子表格中計算不重複的值,可以使用 UNIQUE() 以及 UNIQUE().length 。

UNIQUE():列出參照欄位中所有不重複的欄位值。如沒有設定分隔符號的話預設分隔符號為",",結果如下圖的 UNIQUE() 欄位,也可以自訂分隔符號,寫法就必須改成 UNIQUE(欄位,"分隔符號")。例如 UNIQUE(A1,"/") 或 UNIQUE(A1,", ")。產出的結果分別就會是:Angie/Lillian/Amy/Rex 或 Angie, Lillian, Amy, Rex。

UNIQUE().length:計算參照欄位中不重複的值的數量。

回傳子表格特定的欄位值

如需回傳子表格中符合指定條件的值,可以使用 VLOOKUP。

公式 語法
VLOOKUP VLOOKUP(value, queryField, returnField, [approximateMatch=true], [findMultiple=false])

VLOOKUP 公式需要包含下列幾項參數:

value:是必要的,此為檢查的值,可以為指定的值,也可以直接參照欄位。

queryField:是必要的,此為子表格中用於比對的欄位。

returnField:是必要的,此為子表格中當條件符合時回傳的欄位。

[approximateMatch=true]:是選擇性的,不一定要輸入,此參數表示是否要精準比對,預設是關閉,如果你希望系統精準比對,請在此參數輸入 false。

[findMultiple=false]:是選擇性的,不一定要輸入,此參數表示是否要列出多個符合條件的值,預設是關閉,如果你需要回傳的條件值可能不只一個,請在此參數輸入 true。

例如想在子表格中查詢星期三的教師名稱。

可以新增一個自由輸入欄位給使用者輸入查詢日期,並於另外一個欄位中套用「VLOOKUP(A9, A4, B4, false, false)」或是「VLOOKUP(A9, A4, B4)」,系統即可依據使用者輸入的查詢日期自動回傳「王老師」。

如果你希望是模糊比對而且可以回傳多個符合條件的值的話可以套用「VLOOKUP(A9, A4, B4, true, true)」。

計算日期與時間

日期欄位的公式計算方式

會以天數作為日期的增減:如果 A1 是日期欄位,A1+7 的日期則為 A1 的後七天。

另一個常用的日期公式是計算年齡:如果 A1 為出生年月日,你可以設定公式「(TODAY()-A1)/365.25」,來顯示目前年齡,年齡的欄位種類記得選擇數值,才能夠正確用數值來做公式運算。

時間欄位的公式計算

會需要都是時間欄位(格式 HH:mm) 或搭配數字欄位來做運算。

例如 A1 為開始時間(格式 HH:mm),A2 為結束時間(格式 HH:mm),計算開始到結束的時間有兩種作法:

A3 時間計算欄位(格式 HH:MM)可套用公式「A2-A1」 ; 或是 A3 如果為數字欄位(格式 0.0),則可套用公式「(A2-A1)/60」。

注意:以上時間計算方式只適用於同一天內的時間計算,如果有跨日,例如晚上 10 點到早上 4 點,就必須用下面的方法:

時間欄位必須是包含日期的格式(例如 yyyy/MM/dd HH:mm),計算欄位要是數字欄位(格式 0.0),A1 為開始日及時間(yyyy/MM/dd HH:mm),A2 為結束日及時間(yyyy/MM/dd HH:mm),則時間計算欄位 A3(數字格式0.0) 套用公式「(A2-A1)*24」。

WORKDAY 函數

套用在日期欄位,會傳回代表日期(起始日期)之前或之後指定工作日數的日期。工作日不包含週末、週日以及假日(但包含指定的工作日)。 您可以在計算發票到期日、預期遞送時間或工作日數時,使用 WORKDAY 來排除週末或假日,但包含指定的工作日。

公式 語法
WORKDAY WORKDAY(start_date,days,["holidays"], ["makeup_workdays"])

WORKDAY 需要包含下列參數:

Start_date:是必要的,代表開始日期的日期。

Days:是必要的,代表 start_date 之前或之後的非週末和非假日的天數。正值代表未來的日期;負值代表過去的日期。

Holidays:是選擇性的,這是要從工作行事曆中排除之一個或多個日期的選擇性清單,例如國定假日。此清單要是代表日期之序列值的陣列常數。

Makeup_workdays:是選擇性的,這是要從工作行事曆中要包含之一個或多個日期的選擇性清單,例如補班日。此清單要是代表日期之序列值的陣列常數。

範例 1:

日期欄位套用公式「WORKDAY(A1,A2,["2017/06/16","2017/06/19"])」

假設 A1 的日期值為 2017/06/15,A2 的數字為 9,指定不計算在內的日期為 「2017/06/16」 跟 「2017/06/19」,則從開始日期之後不包括週末以及指定的假日的第九天計算出來的結果會是「2017/06/30」。

範例 2:

日期欄位套用公式「WORKDAY(A1,A2,["2017/06/16","2017/06/19"],["2017/06/24"])」

假設 A1 的日期值為 2017/06/15,A2 的數字為 9,指定不計算在內的日期為 「2017/06/16」 跟 「2017/06/19」,但指定「2017/06/24」這個禮拜六為工作日,則從開始日期之後不包括週末以及指定的假日,但是包括指定工作日的第九天計算結果會是「2017/06/29」。

WORKDAY.INTL 函數

套用在日期欄位,使用參數指出哪幾天和多少天是週末及指定哪幾天是工作日,會傳回起始日期之前或之後指定工作日數的日期。工作日不包含週末、假日,但包含指定工作日。可以用於計算發票到期日、預期遞送時間或工作日數時。

公式 語法
WORKDAY WORKDAY.INTL(start_date,days,[weekend_no],["holidays"], ["makeup_workdays"])

WORKDAY.INTL 需要包含下列參數:

Start_date:是必要的,代表開始日期的日期。

Days:是必要的,代表 start_date 之前或之後的非週末和非假日的天數。 正值代表未來的日期;負值代表過去的日期。

Weekend_no:是選擇性的,若週末日為非週六及週日時,可參考下方表格來帶入相對應 Weekend 數字。

Holidays:是選擇性的,這是要從工作行事曆中排除之一個或多個日期的選擇性清單,例如國定假日。此清單要是代表日期之序列值的陣列常數。

Makeup_workdays:是選擇性的,這是要從工作行事曆中要包含之一個或多個日期的選擇性清單,例如補班日。此清單要是代表日期之序列值的陣列常數。

範例 1:

日期欄位套用公式「WORKDAY(A1,A2,2,["2017/06/16","2017/06/19"])」

假設 A1 的日期值為 2017/06/15,A2 的數字為 9,以星期日及星期一作為週末,指定不計算在內的日期為「2017/06/16」跟「2017/06/19」,則從開始日期之後不包括週末及指定假日的第九天計算結果會是「2017/06/29」。

NETWORKDAYS 函數

套用在數字欄位,會傳回 start_date 與 end_date 間的全部工作日數。工作日不包括週末與任何指定的假日,但包含指定工作日。使用 NETWORKDAYS,來根據某段期間內的工作天數計算員工薪資。

公式 語法
NETWORKDAYS NETWORKDAYS(start_date, end_date, ["holidays"], ["makeup_workdays"])

NETWORKDAYS 需要包含下列參數:

Start_date:是必要的,代表開始日期的日期。

End_date:是必要的,代表結束日期的日期。

Holidays:是選擇性的,這是要從工作行事曆中排除之一個或多個日期的選擇性清單,例如國定假日。此清單要是代表日期之序列值的陣列常數。

Makeup_workdays:是選擇性的,這是要從工作行事曆中要包含之一個或多個日期的選擇性清單,例如補班日。此清單要是代表日期之序列值的陣列常數。

範例 1:

數字欄位套用公式「NETWORKDAYS(E1,E2,['2017/10/04','2017/10/09','2017/10/10'])」

假設 E1 的日期值為 2017/10/01,E2 的日期值為 2017/10/31,指定不計算在內的日期為「2017/10/04、2017/10/09、2017/10/10」,則從開始日期至結束日其不包括週末以及指定的三天假日所計算出來的工作日數會是「19」天。

範例2:

數字欄位套用公式「NETWORKDAYS(E1,E2,['2017/10/04','2017/10/09','2017/10/10'],['2017/10/28','2017/10/29'])」

假設 E1 的日期值為 2017/10/01,E2 的日期值為 2017/10/31,指定不計算在內的日期為「2017/10/04、2017/10/09、2017/10/10」,並指定「2017/10/28 (六)、2017/10/29 (日)」為工作日,則從開始日期至結束日其不包括週末以及指定的三天假日,但是包括指定工作日所計算出來的工作日數會是「21」天。

NETWORKDAYS.INTL 函數

套用在數字欄位,使用參數指出哪幾天和多少天是週末,以傳回兩個日期之間的所有工作日數。 工作日不包括週末與任何指定的假日,但包含指定的工作日。

公式 語法
NETWORKDAYS.INTL NETWORKDAYS.INTL(start_date,end_date,[weekend_no],["holidays"], ["makeup_workdays"])

NETWORKDAYS.INTL 需要包含下列參數:

Start_date和End_date:是必要的, 這是要計算差距的日期。 Start_date 可以早於、等於或晚於 end_date。

Weekend_no:是選擇性的,若週末日為非週六及週日時,可參考下方表格來帶入相對應Weekend數字。

Holidays:是選擇性的,這是要從工作行事曆中排除之一個或多個日期的選擇性清單,例如國定假日。此清單要是代表日期之序列值的陣列常數。

Makeup_workdays:是選擇性的,這是要從工作行事曆中要包含之一個或多個日期的選擇性清單,例如補班日。此清單要是代表日期之序列值的陣列常數。

範例:

數字欄位套用公式「NETWORKDAYS.INTL(E1,E2,11,['2017/06/16'])」

假設 E1 的日期值為 2017/06/01,E2 的日期值為 2017/06/30,指定週末日為星期日一天而已,並指定不計算在內的日期為「2017/06/16」,則從開始日期至結束日期,不包括週末(僅星期日)及指定不計算的日期,所計算出來的工作日數會是「25」天。

Weekend 參數對應表:

Weekend數字 代表週末日
1或省略 星期六、星期日
2 星期日、星期一
3 星期一、星期二
4 星期二、星期三
5 星期三、星期四
6 星期四、星期五
7 星期五、星期六
11 僅星期日
12 僅星期一
13 僅星期二
14 僅星期三
15 僅星期四
16 僅星期五
17 僅星期六

支援的公式列表

下表列出所有 Ragic 支援的公式。公式請一律用大寫表示!

公式 敘述
SUM(value1,[value2],...) 傳回欄位值的總和,也可以直接採用 value+value2+... 的形式來呈現
AVG(value1, value2,...) 傳回所有欄位值的平均值,這個公式在子表格也可以使用,但是子表格的平均值包含所有欄位值,並不只有子表格其中一列的欄位值。
AVERAGE(value1, value2,...) 傳回所有欄位值的平均值,這個公式在子表格也可以使用,但是子表格的平均值包含所有欄位值,並不只有子表格其中一列的欄位值。
MIN(value) 傳回所有的欄位值中最小的值,這個公式在子表格也可以使用。
MAX(value) 傳回所有的欄位值中最大的值,這個公式在子表格也可以使用。
MODE.SNGL(value1,[value2],...) 傳回所有欄位值中最常見的值,這個公式在一般欄位、子表格及全域常數都可以使用。
MODE.MULT(value1,[value2],...) 傳回所有欄位值中最常見的值,當有多個眾數時,可以回傳多個結果,這個公式在一般欄位、子表格及全域常數都可以使用。
ABS(value) 傳回絕對值
CEILING(value,[significance]) 傳回進位後的數字,到最接近之指定基數的倍數。significance 為選擇性的,未指定則進位到最接近的整數值。範例:CEILING(2.5) 會傳回 3;CEILING(1.5, 0.1) 則會回傳 1.5。
FLOOR(value,[significance]) 傳回捨去後的數字,到最接近之指定基數的倍數。significance 為選擇性的,未指定則捨去到最接近的整數值。範例:FLOOR(2.5) 會傳回 2;FLOOR(1.58, 0.1) 則會回傳 1.5。
ROUND(value) 傳回四捨五入後最接近的整數值
ROUND(value,N) 傳回四捨五入到小數點第 N 位的數值
ROUNDUP(value,N) 傳回無條件進位到小數點第 N 位的數值
ROUNDDOWN(value,N) 傳回無條件捨去到小數點第 N 位的數值
MROUND(value,multiple) 傳回四捨五入到最接近的 multiple 的倍數
SQRT(value) 傳回該值的平方根
COUNT(value1,value2,...) 傳回欄位值的總數,用於一般欄位時不會計入空值;用於子表格欄位時則會計入空值
LEFT(value,length) 取出某一字串由左往右的字元,若長度為 3,則會取出由左往右的 3 個字元
RIGHT(value,length) 取出某一字串由右往左的字元,若長度為 3,則會取出由右往左的 3 個字元
MID(value,start,[length]) 取出某一字串的指定字元數,起始字元為 0。例如:欄位 A1 的值為 ABCD,另一欄位套用 MID(A1,1,2),回傳的結果為 BC
FIND(find_text,within_text,[start_num]) 在某個文字字串內找到另一個文字字串,並傳回該文字字串在第一個文字字串中的起始位置
LEN(value) 取出某一字串的長度(字元數)
TODAY() 傳回目前日期。如需做為每日公式重算的參照欄位,建議使用 TODAYTZ() 代替 TODAY()
TODAYTZ() 傳回根據帳號設定中公司所在時區的目前日期
NOW() 傳回目前日期和時間
NOWTZ() 傳回根據帳號設定中公司所在時區的目前日期和時間
EDATE(start_date, months) 傳回代表日期的連續數字,為指定時間(start_date)之前或之後幾個月份(months)該日期的數字
EOMONTH(start_date, months) 傳回代表指定日期(start_date)之前或之後月份(months)最後一天日期的連續數字
YEAR() 傳回日期欄位的年份
MONTH() 傳回日期欄位的月份
DAY() 傳回日期欄位的日
DATE(year,month,day) 結合三個參照數字欄位的值,回傳一個日期。為避免混淆,年份的欄位請使用四位數的值
WEEKDAY() 傳回一週內的第幾天,以數字顯示從第 1 天(星期天)到第 7 天(星期六)
PI() 傳回圓周率,約略等於 3.14159
RAND() 傳回介於 0 到 1 之間的隨機數值
UPPER(value)/TOUPPERCASE(value) 在不更動原始值的情況下,用大寫字母傳回該值
LOWER(value)/TOLOWERCASE(value) 在不更動原始值的情況下,用小寫字母傳回該值
PROPER(value) 將英文首字母轉換為大寫,並將非首字母改為小寫
SUBSTITUTE(text,old_text,new_text,[instance_num]) 將文字字串中的 old_text 部分以 new_text 取代
TEXT() 以格式代碼來套用格式,藉此變更數字顯示的方式。詳細請參考這篇
POWER(value,power) 傳回該值的次方值
MOD(value,divisor) 傳回該值除以除數後的餘數,此結果會跟除數帶有相同的符號
GCD(value1,[value2],...) 傳回這些數值的最大公因數,最大公因數是指能夠整除這些值的最大整數
LCM(value1,[value2],...) 傳回這些數值的最小公倍數,最小公倍數是指這些數值共通的最小整數倍正整數,使用這個公式來協助計算帶有不同分母的分數
FIRST(value) 傳回子表格此欄位中的第一筆資料
FIRSTA(value) 傳回子表格此欄位中非空值的第一筆資料
LAST(value) 傳回子表格此欄位中的最後一筆資料
LASTA(value) 傳回子表格此欄位中非空值的最後一筆資料
IF(value==condition,[value_if_true],[value_if_false]) 依據條件回傳值,符合某一個情況回傳 TRUE,如果不是此情況則回傳 FALSE。查看詳細內容
IFS() 檢查多個條件符合,並傳回第一個為 TRUE 的條件的對應值。查看詳細內容
LOOKUP(value,lookup_list,[result_list]) 在 lookup_list 搜尋值,然後傳回值所在 result_list 的位置。查看詳細內容
AND(logical1, [logical2], ...) 當條件全部滿足時傳回 TRUE,在一個或多個條件不滿足時傳回 FALSE。查看詳細內容
OR(logical1, [logical2], ...) 當任一個條件滿足時傳回 TRUE,在全部條件都不滿足時傳回 FLASE。查看詳細內容
NOT(logical) 當條件不滿足時傳回 TRUE,條件滿足時則傳回 FALSE。查看詳細內容
COUNTIF(criterai_range,criteria) 回傳計算子表格中每一列符合判定標準的值總(次)數。查看詳細內容
COUNTIFS(criteria_range1,criteria1,[criteria_range2,criteria2]...) 回傳計算附加的範圍內符合其相關標準的值總(次)數。查看詳細內容
SUMIF(range,criteria,[sum_range]) 回傳計算子表格中每一列符合判定標準的值總和。查看詳細內容
SUMIFS(sum_range,criteria_range1,criteria1,[criteria_range2, criteria2],...) 回傳計算每一列符合多個判定標準的值總和。查看詳細內容
UPDATEIF(condition,value_if_true) 只有當條件符合的時候才更新欄位值。查看詳細內容
REPT(value,number_times) 回傳以指定次數重複的值。
COUNTA(value) 回傳計算子表格中每一列如果不是空值的值總(次)數。
SUBTABLEROW(value,nth_row) 只能套用在一般獨立欄位,回傳子表格中指定之第幾筆資料的值。
RUNNINGBALANCE(value, [allow_backend_formula_recalculation=false]) 回傳子表格中指定欄中該列與前面資料列加總的值,如果填 true 則該公式能被後端公式重算。(子表格資料需照順序新增)
WORKDAY(start_date,days,["holidays"], [makeup_workdays]) 會傳回代表日期 (起始日期) 不包含週末及指定假日(以及指定哪幾天是工作日)之前或之後指定工作日數的日期。查看詳細內容
WORKDAY.INTL(start_date,days,[weekend_no],["holidays"], [makeup_workdays]) 使用參數指出哪幾天和多少天是週末(及指定哪幾天是工作日),以傳回代表日期 (起始日期) 之前或之後指定工作日數的日期。查看詳細內容
NETWORKDAYS(start_date,end_date,["holidays"], [makeup_workdays])) 會傳回 start_date 與 end_date 間不包含假日(週末、指定假日)以及指定哪幾天是工作日的全部工作日數。查看詳細內容
NETWORKDAYS.INTL(start_date,end_date,[weekend_no],["holidays"], [makeup_workdays]) 使用參數指出哪幾天和多少天是週末(及指定哪幾天是工作日),以傳回兩個日期之間的所有工作日數。查看詳細內容
CHAR(number) 使用 CHAR 將您從其他類型電腦上所取得之檔案的字碼頁代碼轉換成字元。例如 CHAR(10) 會回傳換行,CHAR(32) 會回傳空格
LARGE(arg, nth, ["arg2"]) 指定查詢子表格中某一欄的數值之指定的序數大小相對應值,並回傳符合條件子表格列資料之指定欄位值。例如 LARGE(C1,1,D1) 會查詢子表格資料 C1 欄位中第一大的數值,並回傳同一列子表格資料之 D1 的欄位值。此公式沒有眾數的概念,即如果有同樣大小的值,將會照順序排序而不會被列為同等大小。如需回傳子表格中的最小值,可以合併使用 COUNT()。例如 LARGE(C1,COUNT(C1),D1),意即查詢子表格 C1 欄位最小的數值,並回傳同列 D1 的欄位值
UNIQUE() 列出參照子表格欄位中所有不重複的欄位值。查看詳細內容
UNIQUE().length 計算參照子表格欄位中不重複的值的數量。查看詳細內容
VLOOKUP() 回傳子表格中符合指定條件的值。查看詳細內容
MAXIFS(max_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) 根據指定的一組條件或準則傳回指定之儲存格範圍的最大值
MINIFS(min_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) 根據指定的一組條件或準則傳回指定之儲存格範圍的最小值
SPELLNUMBER(number, [lang], [option]) 在正式的文件中或是某些情況下會有使用一般文字的數字來代替阿拉伯數字的情況。例如:以「壹佰」來表示 100。

如有這樣的需求即可使用 SPELLNUMBER 公式來轉換。詳細的寫法可以參考這篇

ISOWEEKNUM(date) 計算該日期為該年的第幾週,星期一為該週第一天。
WEEKNUM(serial_number,[return_type]) 計算該日期為該年的第幾週,每週起始日可以自訂。詳細的寫法可以參考這篇
DATEVALUE(date_text, date_format) 套用在日期(時間)欄位,將參照的字串轉成日期(時間)值回傳,「date_text」要是固定的日期字串或參照的字串欄位,「date_format」要是參照的日期字串格式。例如 A1 字串的欄位值是「2019/02/01」,希望可以將此轉成日期欄位值的話,可在日欄位套用公式「DATEVALUE(A1,"yyyy/MM/dd")」來取得轉換後的結果
HOUR() 此公式支援三種用法:
1. 參數帶入 0-1,傳回 24 小時的比例。例如:HOUR(0.5)=12。
2. 參數帶入日期欄位,傳回該欄位的小時。例如:A9 欄位值為 18:11:19,HOUR(A9)=18。
3. 參數帶入日期字串,傳回字串中的小時。例如:HOUR("2020/10/13 17:34:56")=17
MINUTE() 此公式支援三種用法:
1. 參數帶入 0-1,傳回 60 分鐘的比例。例如:MINUTE(0.5)=30。
2. 參數帶入日期欄位,傳回該欄位的分鐘。例如:A9 欄位值為 18:11:19,MINUTE(A9)=11。
3. 參數帶入日期字串,傳回字串中的分鐘。例如:MINUTE("2020/10/13 17:34:56")=34
SECOND() 此公式支援三種用法:
1. 參數帶入 0-1,傳回 60 秒的比例。例如:SECOND(0.75)=45。
2. 參數帶入日期欄位,傳回該欄位的秒。例如:A9 欄位值為18:11:19,SECOND(A9)=19。
3. 參數帶入日期字串,傳回字串中的秒。例如:SECOND("2020/10/13 17:34:56")=56。
TIME(hour, minute, second) 傳回特定時間的小數,所傳回的小數點數字是介於 0 到 0.99988426 之間的值,代表自 0:00:00 到 23:59:59 的時間。

Hour 代表小時的數字,範圍從 0 到 32767。任何比 23 大的值將會除於 24,且餘數視為小時值。例如:TIME(27,0,0) = TIME(3,0,0) = 0.125 或 3:00 AM。

Minute 代表分鐘的數字,範圍從 0 到 32767。任何大於 59 的值將會轉換成小時和分鐘。例如:TIME(0,750,0) = TIME(12,30,0) = 0.520833 或 12:30 PM。

Second 代表秒鐘的數字,範圍從 0 到 32767。任何大於 59 的值將會轉換成小時、分鐘和秒鐘。例如:TIME(0,0,2000) = TIME(0,33,22) = 0.023148 或 12:33:20 AM。

ISBLANK() 檢查參照的欄位是否為空值,可以直接參照指定欄位或用於條件公式中,例如:ISBLANK(A2) 或 IF(ISBLANK(A2), 'Y', 'N')
PMT(rate, nper, pv, [fv], [type]) 此公式用來計算貸款每期需要投入的金額。

rate (必填):利率
nper (必填):付款期數
pv (必填):現金或本金
fv (選填):最後一次付款完成後,所能獲得的未來值。 若在公式省略 fv,則預設其值為 0,代表款項還清
type (選填):類型。 填入 0 或 1,0 或省略為計算期末;1 為期初。

PRODUCT() 會乘上所有指定欄位的數值並且忽略空值及非數字的值,除了可以指定一般欄位相乘外,參照子表格欄位則可以將該欄位的所有數值相乘。
TRIM() 移除欄位值首尾的全形、半形空格,同時中間如果有連續的全形、半形空格,只保留第一個空格。範例:TRIM(" a  c") 會得到 "a c"(半a全半半半c,僅保留a全c)
INCLUDES_ALL(多選/多圖片/多檔案欄位, value1, value2,...) 所有選項值中都包含列出的每一個 value(可以是任何欄位型態或值),則回傳 true。使用範例可以參考這篇
NOT_INCLUDES_ALL(多選/多圖片/多檔案欄位, value1, value2,..) 所有選項值中都沒有包含列出的每一個 value(可以是任何欄位型態或值),則回傳 true,結果等同於 INCLUDES_ANY 的相反值。使用範例可以參考這篇
INCLUDES_ANY(多選/多圖片/多檔案欄位, value1, value2,...) 所有選項值中至少包含其中一個列出的 value(可以是任何欄位型態或值),則回傳 true。使用範例可以參考這篇
NOT_INCLUDES_ANY(多選/多圖片/多檔案欄位, value1, value2,...) 所有選項值中只要沒有包含其中一個列出的 value(可以是任何欄位型態或值),則回傳 true,結果等同於 INCLUDES_ALL 的相反值。使用範例可以參考這篇
ITEMS_COUNT(多選/多圖片/多檔案欄位) 回傳多選欄位值的數量。例如:多選欄位選了三個選項,則回傳 3;檔案上傳欄位若有兩個檔案,則回傳 2。

字串公式

使用字串公式十分簡單:如果 A6 的值為「台北市」,而 A7 的值為「士林區福林路 1 號」,若希望把這兩個字串起來,則可以將公式寫為「 A6+A7」,結果則會回傳「台北市士林區福林路 1 號」。如果希望兩個字串間要有空格則可以寫成 「 A6+" "+A7」。

想要了解更多字串類型的公式應用,可以參考這篇說明

備註:如果在公式中要表示「\」的話需要寫成「\\」。

條件公式

Ragic也支援條件公式。要特別注意欄位種類可能會改變公式在某些情況下的計算方式。

有兩種情況公式中條件的參照欄位後面需要加上 .RAW

1. 當條件式公式的條件是參照兩個欄位,並且用運算符號「=」來判斷兩個欄位值是否相等時,需要在設定條件時將這兩個參照欄位後面加上 .RAW,如果是只參照一個欄位,並利用運算符號「=」來判斷等於一個固定的值,則不需要。

2. 當套用公式的欄位是數字欄位,要做數字運算,但是條件是參照字串欄位(文字、選項、日期等),並用運算符號「=」來判斷等於一個固定的字串時,設定條件時參照的字串欄位要加上 .RAW。

何時要加上 .RAW 的詳細內容可以參考這篇

日期欄位會被以天數來計算。

你也可以利用多層的條件判斷來寫出 IF 公式。

IF 函數:判斷值

IF 公式依據條件情況回傳值,例如如果符合某一個情況則回傳 TRUE,如果不是此情況則回傳 FALSE。

公式 語法
IF IF(value==condition,[value_if_true],[value_if_false])

範例:

IF(A2==10,10,0),如果 A2 等於 10,這個值在這個欄位將會是 10。若 A2 出現其他的值,則會回傳 0。

IF(A1==1,'true','false'),如果 A1 等於 1,則會回傳「true」。若 A1 出現其他的值,則回傳「false」。

IF(A2>=60,'yes','no'),如果 A1 等於或大於 60,則會回傳「Yes」,否則回傳「No」。

備註:

Ragic仍然支援IF功能的舊語法。

Value=='condition'?'[value_if_true]':'[value_if_false]'

範例: A1=='open'?'O':'C'

如果 A1 是 open, 則出現 O,如果不是則出現 C。

IF 函數:何時要加上 .RAW?

1. 參照兩個欄位且判斷相等的條件

如果你的條件是利用「=」的運算符號來判斷兩個欄位是否相等的話,請在填寫條件的地方,將這兩個參照欄位後面加上.RAW

語法
IF(field1.RAW=field2.RAW,[value_if_true],[value_if_false])

範例:

IF(A1.RAW=A2.RAW,1,0),如果 A1 的欄位值等於 A2 的欄位值,回傳 1;否則回傳 0。

IF(A1.RAW=A2.RAW,'Open','Closed'),如果 A1 的欄位值等於 A2 的欄位值,回傳「Open」;否則回傳「Closed」。

2. 在 IF 中與字串做相等比較的判斷條件

語法
IF(string_field1.RAW="string",[numeric_value_if_true],[numeric_value_if_false])

範例:

IF(A1.RAW="Yes",1,0),如果 A1 的欄位值等於字串「Yes」,回傳 1;否則回傳 0。

如果你只參照一個數字欄位,並利用運算符號「=」來判斷是否等於一個固定的值,不需要另外加上 .RAW。

範例:

IF(A1=1,"YES","NO"),如果 A1 的欄位值等於 1,回傳「YES」;否則回傳「NO」。

3. 當公式中要區別空值與 0

例如公式為 IF(A8.RAW='',"TRUE","FALSE"),需判斷某個欄位是不是空的,而且那個欄位值可能會是 0 的時候,應加上 .RAW。

4. 參照的自由輸入欄位值為數字,想要將該數字以字串形式回傳

例如 A1「號碼」 是自由輸入欄位,值是 10001,A2「會員編號」是連結欄位,希望透過公式帶入 A1 的值,則可以在 A2 設定公式 IF(A1!="",A1.RAW) 。

IF 函數:擷取字串

如想要在 IF() 公式中擷取其他欄位的字串,像是公式 LEFT() 、 RIGHT() 、 MID () 等, 你必須先轉換該欄位為字串形式,系統才能正確擷取。轉換方式為在參照欄位後方加上「+""」。

範例:

假設你想要參照 A5 欄位的前兩位文字進行判斷,可以使用如下公式:IF(A1="Yes",A5,LEFT(A5+"",2)),如果欄位 A1 為 Yes ,則帶入 A5 欄位值;若 欄位 A1 不是 Yes ,則顯示 A5 欄位的首兩位文字。

IF 函數:参照 TODAY() 或 NOW() 的處理方式

目前因為系統限制,不支援將 TODAY() 或 NOW() 直接加入至 IF() 進行運算,你必須要另外新增一個欄位先取得 TODAY() 或 NOW() 的值後再進行運算。

範例:

假設要將 A1 作為判斷依據,評估資料是否還有效,那麼你可以將 TODAY() 放在 A2 欄位,並套用公式:IF(A1>A2,"Valid","Expired"),如果欄位 A1 的值大於 TODAY() ,則顯示「Valid」;若欄位 A1 的值小於 TODAY() ,則顯示「Expired」。

假設要將 A1 與 TODAY() 比較,可以將整個運算,例如 A1-TODAY() 放在 A2 欄位,並套用公式:IF(A2>0,"Valid","Expired"),如果欄位 A2 的值大於 0,則顯示「Valid」;若欄位 A1 的值小於 TODAY() ,則顯示「Expired」。

注意:TODAY() 或 NOW() 並不會每日自動重算,因此舊有資料的 TODAY() 或 NOW() 欄位會顯示為上次更新資料的時間。如果你希望可以每日自動重算以顯示最新的資料狀態,可以考慮寫程式讓公式每天重新計算

IF 函數:日期欄位

1. 可以在非日期欄位套用 IF 比較日期欄位大小

例如 A1、A2 為日期欄位,A2 套用 TODAY(),A4 選項欄位套用 IF(A1>A2,"已逾期","未逾期")

2. 不能在非日期欄位套用 IF 來運算日期欄位值,必須另建數字欄位來做加減運算

同上例,但 A4 的公式改為 IF(A1-1>A2,"已逾期,"未逾期") 會執行錯誤,在這情況下要另外建立兩個數字欄位: C1、C2,C1 套用 A1-1,C2 套用 A2,A4 公式改為 IF(C1>C2,"已逾期,"未逾期")

LOOKUP 函數

你也可以使用 LOOKUP 公式在你希望附加條件的欄位上,增加針對各個特殊條件的處理。

公式 語法
LOOKUP LOOKUP(value,[lookup_list],[result_list])

在 lookup_list 搜尋值,然後傳回值所在 result_list 的位置。

是在 lookup_list 內搜尋的值。

lookup_list是一個陣列,如[0,100,500],LOOKUP 功能在這清單內搜尋值。

result_list是自選的,它和 lookup_list 相同,如['Small','Medium','Large']。如果 result_list 參數被省略,LOOKUP 功能會傳回在 lookup_list 的值。如果 LOOKUP 功能不能找到確切符合的值,它會選擇回傳在 result_list 內,小於或等於值之中最大的值。如果值小於所有在 result_list 裡的值,則 LOOKUP 功能會傳回空的條件。

範例:

LOOKUP(A1,[0,45,65],['Small','Medium','Large']),如果該欄位 A1 的值在 0~44 之間,則該欄位值就會是 Small,若值在 45~64 之間則會是 Medium,若值大於等於 65 則會是 Large。

多欄位範例:

LOOKUP(A1,[0,45,65],[A3+A4,B5,B6]),如果 A1 在 0~44 之間,值是 A3+A4;在 45~64 之間值是B5;等於或超過 65,則值將會是 B6。

AND 函數

當條件全部滿足時傳回 TRUE,在一個或多個條件不滿足時傳回 FALSE。

公式 語法
AND AND(logical1,[logical2],...)

AND 包含下列參數:

logical1:是必要的,這是第一項需要判斷回傳值為 TRUE 或 FALSE 的條件。

logical2:是非必要的,其他條件在被判斷時,也會影響回傳值為 TRUE 或 FALSE。

OR 函數

當任一個條件滿足時傳回 TRUE,在全部條件都不滿足時傳回 FALSE。

公式 語法
OR OR(logical1,[logical2],...)

OR 包含下列參數:

logical1:是必要的,其他邏輯條件像是logical2則非必要,這是第一項需要判斷回傳值為 TRUE 或 FALSE 的條件。

NOT 函數

當條件不滿足時傳回 TRUE,條件滿足時則傳回 FALSE。

公式 語法
NOT NOT(logical)

範例:

NOT(A2>10),如果 A2 欄位值小於或等於 10 的時候,系統會回傳「true」。欄位值大於 10 的時候,系統則會回傳「false」。

COUNTIF 函數

利用 COUNTIF 來計算子表格中每一列符合判定標準的總數。例如,算出收據上的特定一項物品的總數。

公式 語法
COUNTIF COUNTIF(criteria_range,criteria)

COUNTIF 有下列參數:

criteria_range:是必要的,範圍必須是在子表格內的儲存格並確認其值是否符合標準。

criteria:是必要的,用一個數字、表達式、參考其他欄位的值,或是文字串來決定哪些儲存格會被列入計算。例如,你可以用一個數字"8"、一個比較式">8"、一個子表格的欄位"A4"或是一個字詞"apple"來表示。

COUNTIF 只能參考單一個子表格的內容,並被設在獨立的欄位中。

COUNTIF 只能設一個標準。如果你有多個標準,可以使用COUNTIFS。

範例:

設在 A9 的公式 COUNTIF(A4,'蘋果',A4) 會回傳子表格內每一行 A4 欄位下產品名稱是「蘋果」的總數。

COUNTIFS 函數

公式 語法
COUNTIFS COUNTIFS(criteria_range1,criteria1,[criteria_range2,criteria2]...)

COUNTIFS 有下列參數:

criteria_range1:是必要的,範圍必須是在子表格內的欄位並確認其值是否符合相關的標準。

criteria1:是必要的,用一個數字、表達式、參考其他欄位的值,或是文字串來決定哪些儲存格會被列入計算。例如,你可以用一個數字"8"、一個比較式">8"、一個欄位"A4"或是一個字詞"apple"來表示。

criteria_range2, criteria2,...:是選擇性的,計算附加的範圍內符合其相關標準的值。

COUNTIFS 只能參考單一個子表格的內容,並被設在獨立的欄位中。

SUMIF 函數

利用 SUMIF 來算子表格中每一列符合判定標準的值其總和。例如,算出收據上的特定商品的總金額。

公式 語法
SUMIF SUMIF(range,criteria[sum_range])

SUMIF 有下列參數:

range:是必要的,範圍必須是在子表格內的欄位並確認其值是否符合相關的標準。

criteria:是必要的,用一個數字、表達式、參考其他欄位的值,或是文字串來決定哪些儲存格會被列入計算。例如,你可以用一個數字"8"、一個比較式">8"、一個字串不等式"!='apple'" (外面引號與裡面引號要為不同引號,例如外面一組雙引號裡面一組單引號)、一個欄位"A4"或是一個字詞"apple"來表示。

sum_range:是選擇性的,如果您要加總的不是 range引數中指定的儲存格,這便是要加總的實際儲存格。如果省略 sum_range 引數,便會加總 range 引數中所指定的儲存格 (即是套用準則的相同儲存格)。

SUMIF 只能參考單一個子表格的內容,並被設在獨立的欄位中。

SUMIF 只能設一個標準。如果你有多個標準,可以使用 SUMIFS。

範例:

在 A9 套用 SUMIF(A4,'蘋果',B4),會回傳子表格內每一行如果 A4 欄位下產品名稱是「蘋果」時,其 B4 值的總和。

SUMIFS 函數

利用 SUMIFS 來算子表格中每一列符合多個判定標準的值其總和。例如,算出收據上在特定存貨位置的特定商品的總金額。

公式 語法
SUMIFS SUMIFS(sum_range,criteria_range1,criteria1,criteria_range2, criteria2,...)

SUMIFS 有下列參數:

sum_range:是必要的,範圍必須是在子表格內的欄位並確認其值是否符合相關的標準。

criteria_range1:是必要的,criteria_range1 和 criteria1 設定了其中範圍內的特定尋找標準。一旦範圍內的項目被找出,其相對應的值就會在 sum_range 被加進去。

criteria1:是必要的,此標準會定義出哪些在 criteria_range1 內的儲存格會被加入。可以一個數字、表達式、參考其他欄位的值,或是文字串來決定哪些儲存格會被列入計算。例如,你可以用一個數字「8」、一個比較式「 > 8」、一個字串不等式「!='apple'」、指定與子表格欄位A4比較「 > A4」、「 < A4」 、「A4」 ,或是指定字串「apple」來表示。

criteria_range2,criteria2,...:是選擇性的,計算附加的範圍內符合其相關標準的值。 需特別留意的是,在 SUMIFS 中,條件(criteria)必須下在不同的欄位。如果您是需要將條件下在同一欄位中,例如加總當該欄位等於 a 或是等於 b 的情況時,您必須要使用多個 SUMIF() 相加。另外,SUMIFS 只能參考單一個子表格的內容,並被設在獨立的欄位中。

範例:在 A52 設定公式 SUMIFS(C45, B45, " > A50 ", B45 ," < A51 ") 會將子表格中訂單日(B45)大於起始日(A50)以及小於結束日(A51)的資料的金額做加總算出日期區間內訂單金額的總和。

The UPDATEIF 函式

可以利用 UPDATEIF 的條件公式,讓該欄位在條件不成立的情況下保有原本的欄位值,並只在條件成立的情況下更新欄位值。

公式 語法
UPDATEIF UPDATEIF(條件,欄位值_如果_成立)

範例

UPDATEIF(A2==10,10),如果A2等於10的時候,套有此公式的欄位值會被更新成10。 如果 A2 的欄位值不是 10 的任何情況下,,套有此公式的欄位會保有之前所儲存的值,並不會改變。

UPDATEIF(A2=='同住家地址',A1),如果 A2 的欄位值為「同住家地址」的話,此欄位(送貨地址)的值則會是 A1 的值(住家地址),其他情況下,該欄位值會維持原本的欄位值,例如空值或之前儲存的值。

多層條件的公式

如果是在你有多個條件的情況下,條件公式可以分層寫出。

範例:

IF(A1==1,'Bad',IF(A1==2,'Good',IF(A1==3,'Excellent','No Valid Score')))

上面這個公式代表:

如果A1的值為 1, 回傳結果"Bad"

如果A1的值為 2, 回傳結果"Good"

如果A1的值為 3, 回傳結果"Excellent"

如果A1的值為非上情況,則為"No Valid Score"。

範例:

IF(

AND(A1.RAW=='YES',A2.RAW=='Jimmy'),

C3*C7,

IF(

AND(A1.RAW=='YES',A2.RAW=='John'),

C3*C8,

IF(

AND(A1.RAW=='YES',A2.RAW=='Jane'),

C3*C9,

C3*C10

)

)

)

上面這個公式代表:

如果A1的值為"YES",A2的值為"Jimmy",回傳的結果為C3*C7

如果A1的值為"YES",A2的值為"John",回傳的結果為C3*C8

如果A1的值為"YES",A2的值為"Jane",回傳的結果為C3*C9

如果A1的值為非上述情況,則為C3*C10。

IFS 函數

除了上述的巢狀公式外,你也可以使用 IFS() 來撰寫多個條件的條件公式

公式 語法
IFS() IFS(value=condition1,value_if_true1,value=condition2,value_if_true2,...,true,default value)

IFS 公式需要包含下列幾項參數:

value=condition1 是必要的,此為第一個檢查條件

value_if_true1 是必要的,此為當符合第一個檢查條件時回傳的值

value=condition2 是必要的,此為第二個檢查條件

value_if_true2 是必要的,此為當符合第二個檢查條件時回傳的值

*檢查條件最少為兩組,可依實際需求增加數量

true 是選擇性的,若你需要設定預設值,則必須輸入此參數,若無此需求則可省略

default value 是選擇性的,此為若沒有任何符合的檢查條件時,系統必須回傳的預設值

範例

IFS(A1=1,"Bad",A1=2,"Good",A1=3,"Excellent",true,"No Valid Score")

上面這個公式同樣代表:

如果A1的值為 1, 回傳結果"Bad"

如果A1的值為 2, 回傳結果"Good"

如果A1的值為 3, 回傳結果"Excellent"

如果A1的值為非以上情況,則為"No Valid Score"。

多選欄位公式

公式 語法
INCLUDES_ALL INCLUDES_ALL(多選/多圖片/多檔案欄位, value1, value2,...)
NOT_INCLUDES_ALL NOT_INCLUDES_ALL(多選/多圖片/多檔案欄位, value1, value2,...)
INCLUDES_ANY INCLUDES_ANY(多選/多圖片/多檔案欄位, value1, value2,...)
NOT_INCLUDES_ANY NOT_INCLUDES_ANY(多選/多圖片/多檔案欄位, value1, value2,...)
ITEMS_COUNT ITEMS_COUNT(多選/多圖片/多檔案欄位)

以 INCLUDES_ALL 為例:

首先在 D2 套用 INCLUDES_ALL(D1,A1,A2,B4)

A1 = 自由輸入欄位,值為 「A」

A2 = 多選欄位,值為 B、C

B4 = 子表格的自由輸入欄位,有兩筆資料,第一筆的值為「D」,第二筆為 「E」

D1 = 多選欄位,值為 A、B、C、D、E

則 D2 回傳「true」

公式重算

在 Ragic 中公式是在參照欄位被編輯時觸發,並將運算結果儲存下來。如果改變了公式,但沒有重新編輯參照欄位,新公式就不會被觸發,既存的資料也不會依據新公式重新計算。這樣設計的原因是先前根據舊公式所計算出來的資料還是有效的,不應該因為更新了公式而自動更改已經儲存的資料。像是一張計算稅收的表單,因為最近稅率改變而更改公式,但先前儲存的稅收資料還是應該要以舊稅率來計算沒錯。

某些情況下可能會需要用最新的公式將舊資料都重算一遍。你可以進入設計模式,到想要重新執行的公式中,看到兩個選項:「套用這個公式到所有資料(重算單一公式)」、「套用表單上所有公式到所有資料(重算所有公式)」,根據需求選擇想要重算的方式。如果你是在設計模式下修改、新增公式,記得要先儲存設計再按公式重算喔!

如果常常更改特定公式或是有用到 TODAY(),可以考慮寫程式來執行公式每天重新計算。但要注意的是,透過程式公式重算,超過五千筆資料時預設不計入資料修改紀錄

儲存時觸發原始或相關表單的全部公式重算

在輸入資料並儲存時,若希望能觸發有相關連結的表單公式重算的話,你可以在表單頁設計模式左側工具列中的表單設定 下的表單設定勾選儲存時觸發原始表單(預設已勾選)相關表單的全部公式重算

關於原始表單及相關表單的說明,請參考下圖範例:

原始表單:A、B為 C 的原始表單。任何表單只要有子表格產生新表單,它們即為新表單的原始表單;任何表單只要有顯示從其他表單的連結,它們即為其他表單的原始表單。

相關表單:B、C為 A 的相關表單;A、C 為 B 的相關表單。兩張表單若不是多版本表單且共享同樣的子表格,它們即為相關表單;而子表格產生的新表單也是屬於它們的相關表單。

注意:目前相關表單公式重算上限為 1000 筆資料,若需重算的資料超過系統限制,則會自動略過執行,所有相關表單資料都不會進行公式重算。

以下是針對 原始表單(母表單)子表單相關表單的設計概念示意圖:

在敘述欄位中使用公式

公式同樣能在敘述欄位使用,但該欄位只會顯示出計算的結果,其值不會存進系統裡面

這對每次點進表單頁都需要看到公式即時重算結果的人相當有用,可以參照 BBCode [formula]

例如:要利用一個人的生日來計算年齡,只需要在欄位描述中使用公式 [formula](TODAY() - A1)/365.25[/formula],如此一來他的年齡就會依據今天的日期重算了!

Ragic 支援的數學符號(Math 物件)

關於 Ragic 支援的 Math 物件,請參考這篇

建議公式

如果新增公式的建議,歡迎來信至 Ragic Support

回最上面 目錄

馬上註冊
免費試用 Ragic!

用 Google 帳號註冊

立即科技 Ragic, Inc.
02-7728-8692
台北市中正區南昌路二段81號9樓