|
|
笑点低的消防车 · 3.32.0 release notes ...· 5 月前 · |
|
|
沉稳的墨镜 · 广州市交通运输局网站 - ...· 1 年前 · |
|
|
时尚的豌豆 · android raw 下的 文件不存在 ...· 1 年前 · |
|
|
豁达的帽子 · 如何在R中按条件选择行(附实例)你可以使用以 ...· 1 年前 · |
Ragic 與 Excel 一樣都可以撰寫公式進行運算,但 Ragic 的公式都是自行開發的,因此支援的公式或寫法不一定相同,尤其撰寫公式時是 直接參照欄位標頭 。
公式不只能運算數字,也能計算字串及日期,系統會自動辨識需要用什麼類別的公式運算。但還是建議把要公式運算的欄位設定成對應的 欄位種類 ,像是數值或是日期欄位會比較好。
在 表單頁 的 設計模式 下,點選欄位標頭後選擇左側列的 公式 ,就可以輸入公式。
例如在「銷售訂單」中的金額的公式為售價*數量,就在該空格中輸入「C9*D9」。要注意公式要參照的儲存格是 標頭所在的位置 。
在有設定公式的欄位右上方會顯示 fx() 圖示。
點擊該圖示的話,會將該公式的所有參照欄位框選出來,以便快速查找。
更多公式可以查看 支援的公式 列表。 注意:多選欄位只能套用列表中的特定公式。
當不知道該輸入甚麼公式時,可以在下方的 公式小幫手 輸入你想要的規則和回傳的資料,便可以藉由 AI 工具協助你寫公式。
注意: 私有主機版 需要新增參數才可以開啟此功能,詳細說明請參考 此章節 。
使用時請注意:
1. 請直接描述公式規則並描述這個欄位要回傳什麼,如「回傳今日日期」。
2. 如要表示文字請在左右兩邊加上雙引號,例如「"交易日"」。
3. 設定後請手動測試與重複驗證結果是否符合需求。
點選下方的 AI 幫我產公式 。
便可以展開 公式小幫手 的介面,輸入規則和回傳的資料點擊 產生公式 。
下方也有一些預設情境讓你可以直接選擇並根據你所設計的表單填入對應的欄位。包含一般公式與 簽核公式 。
例如:希望當「訂單金額」大於「免運金額」時,「是否免運」的欄位可以回傳「是」,若沒有大於則回傳「否」時,可以先選擇下方的如果「A1 大於 A2,傳回 "Y",否則傳回 "N"」,再修改成對應的欄位以及回傳值。
完成後點選 產生公式 ,便會在下方產生對應的公式,點選公式旁的 複製 圖示,系統會自動幫你把產生的公式填入上方的公式欄位。
符號會決定如何執行運算。以一般運算來說,會遵循先乘除後加減的規則。但跟數學運算相同,你可以利用「括號 ()」來改變運算的順序。但 Ragic 不能以冒號: 來加總儲存格範圍的值 。
要執行基本的數學運算,像是加減乘除,請使用以下算數符號。
+ (加號)加法 – (減號) * (星號/米字號) / (斜線) ^ (插入符號)你可以利用以下符號來比較兩個值。你也能在 條件公式 中用這些符號來判斷是否符合邏輯,然後顯示 TRUE 或 FALSE。
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。
SPELLNUMBER(number, [lang], [option]) 在正式的文件中或是某些情況下會有使用一般文字的數字來代替阿拉伯數字的情況。例如:以「壹佰」來表示 100。如有這樣的需求即可使用 SPELLNUMBER 公式來轉換。詳細的寫法可以參考 這篇
TRIM() 移除欄位值首尾的全形、半形空格,同時中間如果有連續的全形、半形空格,只保留第一個空格。範例:TRIM(" a c") 會得到 "a c"(半a全半半半c,僅保留a全c)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」。
(1) 公式所參照的 時間欄位皆不可為空值 ,否則公式將無法觸發(無法用一個時間加上或減去空值來計算時間)。若計算欄位會有空值的情況,建議將欄位格式改為 數字欄位 ,這樣欄位為空值的情況下,也可以順利觸發公式。
範例: A1 為開始時間(格式 HH:mm), A2 為耗費時間(格式 HH:mm),想要透過公式 A2+A1 計算出 A3 結束時間(格式 HH:mm),但如果 A2 在資料中有可能為空值,則 A3 的公式會無法觸發導致欄位也變成空值。若將 A2 的耗費時間改為 數字欄位 (代表計算耗費幾分鐘),即使 A2 為空值的情況下, A3 也可以顯示欄位內容。
(2) 以上時間計算方式只適用於同一天內的時間計算,如果有跨日,例如晚上 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(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」。
備註: 在代入 holidays 或 makeup_workdays 參數時,若不想在每一張表單各自設定,希望全資料庫可以統一日期,可以定義一個「陣列」的全域常數並代入公式中,詳細說明請參考 這篇說明 。
套用在日期欄位,使用參數指出哪幾天和多少天是週末及指定哪幾天是工作日,會傳回起始日期之前或之後指定工作日數的日期。工作日不包含週末、假日,但包含指定工作日。可以用於計算發票到期日、預期遞送時間或工作日數時。
WORKDAY.INTL 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.INTL(A1,A2,2,["2017/06/16","2017/06/19"])」
假設 A1 的日期值為 2017/06/15,A2 的數字為 9,以星期日及星期一作為週末,指定不計算在內的日期為「2017/06/16」跟「2017/06/19」,則從開始日期之後不包括週末及指定假日的第九天計算結果會是「2017/06/29」。
備註: 在代入 holidays 或 makeup_workdays 參數時,若不想在每一張表單各自設定,希望全資料庫可以統一日期,可以定義一個「陣列」的全域常數並代入公式中,詳細說明請參考 這篇說明 。
套用在數字欄位,會傳回 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」天。
數字欄位套用公式「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」天。
備註: 在代入 holidays 或 makeup_workdays 參數時,若不想在每一張表單各自設定,希望全資料庫可以統一日期,可以定義一個「陣列」的全域常數並代入公式中,詳細說明請參考 這篇說明 。
套用在數字欄位,使用參數指出哪幾天和多少天是週末,以傳回兩個日期之間的所有工作日數。 工作日不包括週末與任何指定的假日,但包含指定的工作日。
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」天。
備註: 在代入 holidays 或 makeup_workdays 參數時,若不想在每一張表單各自設定,希望全資料庫可以統一日期,可以定義一個「陣列」的全域常數並代入公式中,詳細說明請參考 這篇說明 。
Weekend 參數對應表:
Weekend數字 代表週末日 星期六、星期日 星期日、星期一 星期一、星期二 星期二、星期三 星期三、星期四 星期四、星期五 星期五、星期六WEEKNUM 需要包含下列參數:
Date :填入要計算的 日期 欄位。
Return_type :用來設定一週的起始星期。如未指定,系統將預設為 1(即星期日為每週的第一天)。其他可用的參數如下表所示。
此函數使用兩種系統:
系統 1 :包含 1 月 1 日的該週是該年的第一週,因此會編號為第 1 週。
系統 2 :包含某年的第一個星期四的該週是該年的第一週,因此編號為第 1 週。 此系統是 ISO 8601 規定的方法,通常也是歐洲地區的週編號系統。
如果沒有特別的需求,建議使用 系統 1 的參數即可。
起始日參數對應表:
Return_type 一週的開始 1 或省略有兩種情況公式中條件的參照欄位後面需要加上 .RAW :
1. 當條件式公式的條件是參照兩個欄位,並且用運算符號「=」來判斷兩個欄位值是否相等時,需要在設定 條件 時將這兩個參照欄位後面加上 .RAW,如果是只參照一個欄位,並利用運算符號「=」來判斷等於一個固定的值,則不需要。
2. 當套用公式的欄位是數字欄位,要做數字運算,但是條件是參照字串欄位(文字、選項、日期等),並用運算符號「=」來判斷等於一個固定的字串時,設定 條件 時參照的字串欄位要加上 .RAW。
何時要加上 .RAW 的詳細內容可以參考 這篇 。
日期欄位會被以天數來計算。
你也可以利用 多層的條件判斷 來寫出 IF 公式。
IF 公式依據條件情況回傳值,例如如果符合某一個情況則回傳 TRUE,如果不是此情況則回傳 FALSE。
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。
如果你的條件是利用「=」的運算符號來判斷兩個欄位是否相等的話,請在填寫 條件 的地方,將這兩個參照欄位後面加上 .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」。
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」。
例如公式為 IF(A8.RAW='',"TRUE","FALSE"),需判斷某個欄位是不是空的,而且那個欄位值可能會是 0 的時候,應加上 .RAW。
例如 A1「號碼」 是自由輸入欄位,值是 10001,A2「會員編號」是連結欄位,希望透過公式帶入 A1 的值,則可以在 A2 設定公式 IF(A1!="",A1.RAW) 。
如想要在 IF() 公式中擷取其他欄位的字串,像是公式 LEFT() 、 RIGHT() 、 MID () 等, 你必須先轉換該欄位為字串形式,系統才能正確擷取。轉換方式為在參照欄位後方加上「+""」。
假設你想要參照 A5 欄位的前兩位文字進行判斷,可以使用如下公式:IF(A1="Yes",A5,LEFT(A5+"",2)),如果欄位 A1 為 Yes ,則帶入 A5 欄位值;若 欄位 A1 不是 Yes ,則顯示 A5 欄位的首兩位文字。
目前因為系統限制,不支援將 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() 欄位會顯示為上次更新資料的時間。如果你希望可以每日自動重算以顯示最新的資料狀態,可以考慮 寫程式讓公式每天重新計算 。
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(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。
當條件全部滿足時傳回 TRUE,在一個或多個條件不滿足時傳回 FALSE。
AND(logical1,[logical2],...)AND 包含下列參數:
logical1:是必要的,這是第一項需要判斷回傳值為 TRUE 或 FALSE 的條件。
logical2:是非必要的,其他條件在被判斷時,也會影響回傳值為 TRUE 或 FALSE。
當任一個條件滿足時傳回 TRUE,在全部條件都不滿足時傳回 FALSE。
OR(logical1,[logical2],...)OR 包含下列參數:
logical1:是必要的,其他邏輯條件像是 logical2 則非必要,這是第一項需要判斷回傳值為 TRUE 或 FALSE 的條件。
當條件不滿足時傳回 TRUE,條件滿足時則傳回 FALSE。
NOT(logical)NOT(A2>10),如果 A2 欄位值小於或等於 10 的時候,系統會回傳「true」。欄位值大於 10 的時候,系統則會回傳「false」。
利用 COUNTIF 來計算子表格中每一列符合判定標準的總數。例如,算出收據上的特定一項物品的總數。
COUNTIF COUNTIF(criteria_range,criteria)COUNTIF 有下列參數:
criteria_range:是必要的,範圍必須是在子表格內的欄位並確認其值是否符合相關的標準。
criteria:是必要的,此標準會定義出哪些在 criteria_range 內的儲存格會被加入。可以一個數字、表達式、參考其他欄位的值,或是文字串來決定哪些儲存格會被列入計算。參考下表:
數字比較式 "> 8"、"< 8"、"!= 8" "apple" 字串不等式 "!='apple'"(外面引號與裡面引號要為不同引號,例如外面一組雙引號裡面一組單引號) 指定子表格欄位 A4 (不用加上一組雙引號或是加上「=」,直接寫該欄位即可) 指定與子表格欄位比較 "> A4"、"< A4"、"!=A4"COUNTIFS 有下列參數:
criteria_range1:是必要的,範圍必須是在子表格內的欄位並確認其值是否符合相關的標準。
criteria1:是必要的,此標準會定義出哪些在 criteria_range1 內的儲存格會被加入。可以一個數字、表達式、參考其他欄位的值,或是文字串來決定哪些儲存格會被列入計算。參考下表:
數字比較式 "> 8"、"< 8"、"!= 8" "apple" 字串不等式 "!='apple'"(外面引號與裡面引號要為不同引號,例如外面一組雙引號裡面一組單引號) 指定子表格欄位 A4 (不用加上一組雙引號或是加上「=」,直接寫該欄位即可) 指定與子表格欄位比較 "> A4"、"< A4"、"!=A4"criteria_range2, criteria2,...:是選擇性的,計算附加的範圍內符合其相關標準的值。
COUNTIFS 只能參考單一個子表格的內容,並被設在獨立的欄位中。
利用 SUMIF 來算子表格中每一列符合判定標準的值其總和。例如,算出收據上的特定商品的總金額。
SUMIF SUMIF(range,criteria[sum_range])SUMIF 有下列參數:
range:是必要的,範圍必須是在子表格內的欄位並確認其值是否符合相關的標準。
criteria:是必要的,此標準會定義出哪些在 range 內的儲存格會被加入。可以一個數字、表達式、參考其他欄位的值,或是文字串來決定哪些儲存格會被列入計算。參考下表:
數字比較式 "> 8"、"< 8"、"!= 8" "apple" 字串不等式 "!='apple'"(外面引號與裡面引號要為不同引號,例如外面一組雙引號裡面一組單引號) 指定子表格欄位 A4 (不用加上一組雙引號或是加上「=」,直接寫該欄位即可) 指定與子表格欄位比較 "> A4"、"< A4"、"!=A4"sum_range:是選擇性的,如果您要加總的不是 range 引數中指定的儲存格,這便是要加總的實際儲存格。如果省略 sum_range 引數,便會加總 range 引數中所指定的儲存格 (即是套用準則的相同儲存格)。
SUMIF 只能參考單一個子表格的內容,並被設在獨立的欄位中。
SUMIF 只能設一個標準。如果你有多個標準,可以使用 SUMIFS。
在 A9 套用 SUMIF(A4,'蘋果',B4),會回傳子表格內每一行如果 A4 欄位下產品名稱是「蘋果」時,其 B4 值的總和。
SUMIFS 有下列參數:
sum_range:是必要的,範圍必須是在子表格內的欄位並確認其值是否符合相關的標準。
criteria_range1:是必要的,criteria_range1 和 criteria1 設定了其中範圍內的特定尋找標準。一旦範圍內的項目被找出,其相對應的值就會在 sum_range 被加進去。
criteria1:是必要的,此標準會定義出哪些在 criteria_range1 內的儲存格會被加入。可以一個數字、表達式、參考其他欄位的值,或是文字串來決定哪些儲存格會被列入計算。參考下表:
數字比較式 "> 8"、"< 8"、"!= 8" "apple" 字串不等式 "!='apple'"(外面引號與裡面引號要為不同引號,例如外面一組雙引號裡面一組單引號) 指定子表格欄位 A4 (不用加上一組雙引號或是加上「=」,直接寫該欄位即可) 指定與子表格欄位比較 "> A4"、"< A4"、"!=A4"criteria_range2,criteria2,...:是選擇性的,計算附加的範圍內符合其相關標準的值。 需特別留意的是,在 SUMIFS 中,條件(criteria)必須下在不同的欄位。如果您是需要將條件下在同一欄位中,例如加總當該欄位等於 a 或是等於 b 的情況時,您必須要使用多個 SUMIF() 相加。另外,SUMIFS 只能參考單一個子表格的內容,並被設在獨立的欄位中。
範例:在 A52 設定公式 SUMIFS(C45, B45, " > A50 ", B45 ," < A51 ") 會將子表格中訂單日(B45)大於起始日(A50)以及小於結束日(A51)的資料的金額做加總算出日期區間內訂單金額的總和。
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"。
AND(A1.RAW=='YES',A2.RAW=='Jimmy'), C3*C7, AND(A1.RAW=='YES',A2.RAW=='John'), C3*C8, 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(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 為例:
首先在 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(),可以考慮透過 Daily Workflow 來執行公式每天重新計算 。
注意: 透過 Workflow 公式重算,會有以下兩種情況不計入 資料修改紀錄 。
1. 公式重算後,沒有任何一個欄位的欄位值被修改。
2. 因效能考量,系統會自動判斷運算筆數,如超過 3500 筆 ,就不會寫入修改紀錄(實際上資料有正常執行重算,只是不會顯示於修改紀錄)。
在輸入資料並儲存時,若希望能觸發有相關連結的表單公式重算的話,你可以在 表單頁設計模式 左側工具列中的 表單設定 下的 表單設定 勾選 儲存時觸發原始表單(預設已勾選) 或 相關表單的全部公式重算 。
關於原始表單及相關表單的說明,請參考下圖範例:
原始表單:A、B為 C 的原始表單。任何表單只要有 子表格產生新表單 ,它們即為 新表單 的原始表單;任何表單只要有 顯示從其他表單的連結 ,它們即為 其他表單 的原始表單。
相關表單:B、C為 A 的相關表單;A、C 為 B 的相關表單。兩張表單若不是多版本表單且共享同樣的子表格,它們即為相關表單;而子表格產生的新表單也是屬於它們的相關表單。
注意 :目前相關表單公式重算上限為 1000 筆資料,若需重算的資料超過系統限制,則會自動略過執行,所有相關表單資料都不會進行公式重算。
以下是針對 原始表單(母表單) 、 子表單 、 相關表單 的設計概念示意圖:
公式 同樣能在敘述欄位使用,但該欄位 只會顯示出計算的結果,其值不會存進系統裡面 。
這對每次點進表單頁都需要看到公式即時重算結果的人相當有用,可以參照 BBCode [formula] 。
例如:要利用一個人的生日來計算年齡,只需要在欄位描述中使用公式 [formula](TODAY() - A1)/365.25[/formula],如此一來他的年齡就會依據今天的日期重算了!
關於 Ragic 支援的 Math 物件,請參考 這篇 。
如果新增公式的建議,歡迎來信至 Ragic Support 。