Ragic与Excel一样都可以撰写公式进行运算,但Ragic的公式都是自己从头开发的,因此支持的公式或写法不一定会相同,尤其撰写公式时会直接参照字段首部。
公式不只是能运算数字而已,也能计算字符串及日期,系统会自动识别需要用什么类别的公式运算,但为了保险起见,把要做公式运算的字段先选对字段输入型态(例如数字还是日期)会比较好。
在表单页面的设计模式下,点选字段首部后选择左手边设计面板的公式,你就可以开始输入此字段的公式。
下面是销售订单的演算范例,字段F9(金额)的公式为 D9*E9(售价*数量)。这里要小心,公式要输入的格子号码是首部所在的格子。
在有设置公式的字段右上方会显示fx()的图符。
点击该图符的话,会将该公式的所有参照字段框选出来,以便快速查找。
请特别留意,目前多选字段并不能设置为公式的参照字段。
更多公式可以查看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(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 来排除周末或假日,但包含指定的工作日。
公式 | 句法 |
---|---|
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
套用在数字字段,会传回 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(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 (必填):利率 |
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公式依据条件情况回传值,例如如果符合某一个情况则回传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。
如果你的条件是利用"="的运算符号来判断两个字段是否相等的话,请在填写条件的地方,将这两个参照字段后面加上.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”。
句法 |
---|
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"。
例如:公式为 IF(A8.RAW='',"TRUE","FALSE"),需判断某个字段是不是空的,而且那个字段值可能会是 0 的时候,应加上 .RAW
例如:A1“号码”是自由输入字段,值是 10001,A2“会员编号”是链接字段,希望透过公式来带入 A2 的值,此时 A2 的公式应是 IF(A1!="",A1.RAW) 才能正确带出。
如想要在IF()公式中抽取其他字段的字符串,像是公式 LEFT() 、 RIGHT() 、 MID () 等, 你必须先转换该字段为字符串形式,系统才能正确抽取。转换方式为在参照字段后方加上“+""”。
范例
假设你想要参照 A5 字段的前两位字进行判断,可以使用如下公式:
IF(A1="Yes",A5,LEFT(A5+"",2))
意即,如果字段 A1 为 Yes ,则带入 A5 字段值;若 字段 A1 不是 Yes ,则显示 A5 字段的首两位字。
目前因为系统限制, 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() 可以每日自动重算以显示最新的数据状态,可以考虑写程序来让公式每天重新计算。
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 | AND(logical1,[logical2],...) |
AND公式需要包含下列几项参数:
logical1是必要的,这是第一项需要判断回传值为TRUE或FALSE的条件。
logical2是非必要的,其他条件在被判断时,也会影响回传值为TRUE或FALSE。
当任一个条件满足时传回TRUE,在全部条件都不满足时传回FLASE。
公式 | 句法 |
---|---|
OR | OR(logical1,[logical2],...) |
OR公式需要包含下列几项参数:
logical1是必要的,其他逻辑条件像是logical2则非必要,这是第一项需要判断回传值为TRUE或FALSE的条件。
利用 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(criteria_range1,criteria1,[criteria_range2,criteria2]...) |
COUNTIFS 函数句法中有下列参数:
criteria_range1是必要的。范围必须是在子表格内的字段并确认其值是否符合相关的标准。
criteria1是必要的。用一个数字、表达式、参阅其他字段的值,或是字串来决定哪些单元格会被列入计算。例如,你可以用一个数字"8"、一个比较式">8"、一个字段"A4"或是一个字词"apple"来表示。
criteria_range2, criteria2,...是选择性的。计算附加的范围内符合其相关标准的值。
COUNTIFS 只能参阅单一个子表格的内容,并被设在独立的字段中。
利用 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值的总和。
利用 SUMIF 来算子表格中每一列符合多个判定标准的值其总和。例如,算出收据上在特定存货位置的特定商品的总金额。
公式 | 句法 |
---|---|
SUMIFS | SUMIFS(sum_range,criteria_range1,criteria1,criteria_range2, criteria2,...) |
The SUMIFS 函数句法中有下列参数:
sum_range是必要的。范围必须是在子表格内的字段并确认其值是否符合相关的标准。
criteria_range1是必要的。criteria_range1和 criteria1设置了其中范围内的特定查找标准。一旦范围内的项目被找出,其相对应的值就会在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(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 Support建议我们。