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

公式

Ragic中的公式使用

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

公式不只是能運算數字而已,也能計算字串及日期,系統會自動辨識需要用什麼類別的公式運算,但為了保險起見,把要做公式運算的欄位先選對欄位輸入型態(例如數字還是日期)會比較好。

表單頁設計模式下,點選欄位標頭後選擇左手邊設計面板的公式,你就可以開始輸入此欄位的公式。

下面是銷售訂單的演算範例,欄位F9(金額)的公式為 D9*E9(售價*數量)。這裡要小心,公式要輸入的格子號碼是標頭所在的格子

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

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

請特別留意,目前多選欄位並不能設定為公式的參照欄位。

更多公式可以查看Ragic支援的公式列表。

Ragic中的運算符號

符號會決定如何將你的公式執行運算。以一般的運算來說,會有一定的順序(例如乘法會優先於加或減),但跟一般的數學運算一樣,你可以利用括號()來改變運算的順序。

但請小心,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的公式是直接參照欄位標頭的。這使得運算較為簡單,特別是子表格,可以花較少的心力寫較複雜的公式。

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

E13小計的數額是由F9欄位標頭的數額而來的。

除了上述的例子,還有其他能將公式用在子表格上的時候。例如你需要計算子表格中有多少筆資料,你就可以新增一個欄位並利用子表格的欄位標頭來寫COUNT()公式。

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

計算子表格中不重複的值

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

UNIQUE():列出參照欄位中所有不重複的欄位值。如沒有設定分隔符號的話預設分隔符號為",",結果就如下圖的UNIQUE()欄位,也可以自訂分隔符號,寫法就必須改成UNIQUE(欄位,"分隔符號")。例如UNIQUE(A1,"/"),UNIQUE(A1," ")或是UNIQUE(A1,", ")。產出的結果分別就會是:Angie/Lillian/Amy/Rex,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",來顯示目前年齡,年齡的欄位值記得選擇數字,Ragic才知道要用數字的方式來做公式運算。


時間欄位的公式計算

會需要都是時間欄位(格式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/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/16 及 2017/06/19 假日,但是包括指定工作日"2017/06/24"的第九天計算出來的結果會是 2017/06/29

WORKDAY.INTL 函數

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

公式 語法
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/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"(日)為工作日

則從開始日期至結束日其不包括週末以及指定的三天假日,但是包括指定工作日"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"

則從開始日期至結束日其不包括週末(僅星期日)以及指定的 "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) 傳回比等同或大於該值的最接近整數值
FLOOR(value) 傳回比等同或小於該值的最接近整數值
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]) IF公式依據條件情況回傳值,符合某一個情況回傳TRUE,如果不是此情況則回傳FALSE。查看詳細內容

IFS() 檢查多個條件符合,並傳回第一個為 TRUE 的條件的對應值。查看詳細內容
LOOKUP(value,lookup_list,[result_list]) 在lookup_list搜尋值,然後傳回值所在result_list的位置。查看詳細內容

AND(logical1, [logical2], ...) 當條件全部滿足時傳回TRUE,在一個或多個條件不滿足時傳回FALSE。查看詳細內容

OR(logical1, [logical2], ...) 當任一個條件滿足時傳回TRUE,在全部條件都不滿足時傳回FLASE。查看詳細內容

COUNTIF(criterai_range,criteria, count_range) 回傳計算子表格中每一列符合判定標準的值總(次)數。查看詳細內容

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,[true]) 回傳子表格中指定欄中該列與前面資料列加總的值,如果有填 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)

字串公式

使用字串的公式十分簡單:如果C1的值為 Michael,而C2的值為 Scott,若希望把這兩個字串起來,中間要包含一個空格的話,則可以將公式寫為 C1+" "+C2,結果則會回傳 "Michael Scott"。如下圖示範:

想要了解更多字串類型的公式應用,可以參考字串公式這一章。

條件公式

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])

範例

簡單的例子1: IF(A1.RAW=A2.RAW,1,0)

如果A1的欄位值等於A2的欄位值,回傳1;否則回傳0。


簡單的例子2: 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])

範例

簡單的例子1: 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「會員編號」是連結欄位,希望透過公式來帶入 A2 的值,此時 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()的處理方式

目前因為系統限制, Ragic 並不支援將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" 。

須特別留意的是, Ragic 資料庫中的 TODAY()或NOW() 並不會每日自動重算,因此舊有資料的 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,在全部條件都不滿足時傳回FLASE。

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

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

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

COUNTIF 函數

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

公式 語法
COUNTIF COUNTIF(criteria_range,criteria,count_range)

COUNTIF 函數語法中有下列參數:

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

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

count_range是必要的。意即當criteria_range符合criteria時,需要計數的欄位。

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

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

範例:

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

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,'apple',B4) 會回傳子表格內每一行如果A4欄位下產品名稱是apple時,其B4值的總和。

  

SUMIFS 函數

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

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

The SUMIFS 函數語法中有下列參數:

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

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

criteria1是必要的。此標準會定義出哪些在criteria_range1內的儲存格會被加入。可以一個數字、表達式、參考其他欄位的值,或是文字串來決定哪些儲存格會被列入計算。例如,你可以用一個數字"8"、一個比較式">8"、指定與子表格欄位A4比較">A4"、"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"。

公式重算

當你在資料庫中輸入資料時,資料會依據你所寫的公式做計算,一旦你儲存了你的資料,此值就會被儲存並不會改變

也就是說,即使你在設計模式下改變了你的公式,原本既已儲存的資料也不會依據新的公式重新被計算。

會這樣的原因是因為你先前根據舊公式所計算出來的資料還是有效的,不應該因為你更新了公式而自動更改已經儲存的資料。

舉個例子來說,如果你有一張計算稅收的表單,因為最近稅率漲了而你更改公式,但先前儲存的稅收資料還是應該要以舊的稅率來計算沒錯。

但某些情況,你有可能會需要用最新的公式將舊的資料都重新算一遍。你可以在表單設計模式下,到你想要重新計算公式的欄位公式中,下面有兩個選項讓你用新的公式將所有資料更新,或是讓所有新的公式更新所有資料(如果你更新了不只一個公式)。

如果你是在設計模式下修改、新增公式,記得要先儲存設計再按公式重算喔!

如果你常常更改一個公式或是公式中的變數,你也可以考慮利用寫程式來將你的公式每天重新計算

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

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

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

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

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

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

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

在欄位描述中使用公式

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

這對每次點進表單頁都需要看到公式即時重算結果的人來說非常有用。你可以使用BBCodes 的[formula]來幫助你完成這件事。

範例:假如今天你要利用一個人的生日來計算他的年齡的話,在欄位描述中使用公式[formula](TODAY() - A1)/365.25[/formula],如此一來他的年齡就會每天根據今天的日期重算。

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

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

建議公式

如果你需要使用未被支援的公式,歡迎來信至Ragic Support建議我們。

回最上面 目錄
瞭解更多:
我們為什麼要開發Ragic?
免費課程
使用說明
Ragic定價
Ragic應用
最新訊息:
部落格
Facebook
YouTube
立即科技 Ragic, Inc.
02-7728-8692
台北市中正區南昌路二段81號9樓
info@ragic.com