计算字段公式
下表提供有关您可以通过使用 Microsoft.SharePoint.SPFieldCalculated 类的 Formula 在计算字段中实现的多种公式的信息。
条件公式
您可以使用下面的公式测试语句的条件并返回 Yes 或 No 值、测试备用值(如 OK 或 Not OK),或返回空白或短划线来表示空值。
确定某数是大于还是小于另一个数
使用 IF 函数执行此比较。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
15000 | 9000 | =[Column1]>[Column2] | Column1 是否大于 Column2?(Yes) |
15000 | 9000 | =IF([Column1]<=[Column2], "OK", "Not OK") | Column1 是否小于或等于 Column2?(Not OK) |
比较列内容后返回一个逻辑值
对于本身是逻辑值的结果(Yes 或 No),使用 AND、OR 和 NOT 函数。
Column1 | Column2 | Column3 | 公式 | 说明(可能的结果) |
---|---|---|---|---|
15 | 9 | 8 | =AND([Column1]>[Column2], [Column1]<[Column3]) | 15 是否大于 9 且小于 8?(No) |
15 | 9 | 8 | =OR([Column1]>[Column2], [Column1]<[Column3]) | 15 是否大于 9 或小于 8?(Yes) |
15 | 9 | 8 | =NOT([Column1]+[Column2]=24) | 15 加 9 是否等于 24?(No) |
对于本身是另一个计算的结果,或对于 Yes 或 No 之外的任何其他值,使用 IF、AND 和 OR 函数。
Column1 | Column2 | Column3 | 公式 | 说明(可能的结果) |
---|---|---|---|---|
15 | 9 | 8 | =IF([Column1]=15, "OK", "Not OK") | 如果 Column1 中的值等于 15,则返回“OK”。(OK) |
15 | 9 | 8 | =IF(AND([Column1]>[Column2], [Column1]<[Column3]), "OK", "Not OK") | 如果 15 大于 9 且小于 8,则返回“OK”。(Not OK) |
15 | 9 | 8 | =IF(OR([Column1]>[Column2], [Column1]<[Column3]), "OK", "Not OK") | 如果 15 大于 9 或小于 8,则返回“OK”。(OK) |
空白或短划线显示为零
若要显示零,需执行简单的计算。若要显示空白或短划线,需使用 IF 函数。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
10 | 10 | =[Column1]-[Column2] | 第一个数减去第二个数。(0) |
15 | 9 | =IF([Column1]-[Column2],"-",[Column1]-[Column2]) | 当值为零时返回短划线。(-) |
隐藏列中的错误值
若要显示短划线、#N/A 或 NA 来替换错误值,需使用 ISERROR 函数。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
10 | 0 | =[Column1]/[Column2] | 导致错误 (#DIV/0) |
10 | 0 | =IF(ISERROR([Column1]/[Column2]),"NA",[Column1]/[Column2]) | 当值错误时,返回 NA |
10 | 0 | =IF(ISERROR([Column1]/[Column2]),"-",[Column1]/[Column2]) | 当值错误时,返回短划线 |
日期和时间公式
可以使用下面的公式来执行基于日期和时间的计算,如向日期中添加许多天、月或年,计算两个日期的差,以及将时间转换为十进制值。
添加日期
若要向日期中添加许多天,需使用加法 (+) 运算符。
注意: |
---|
在处理日期时,计算列的返回类型必须设置为日期和时间。 |
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
6/9/2007 | 3 | =[Column1]+[Column2] | 向 6/9/2007 中添加 3 天 (6/12/2007) |
12/10/2008 | 54 | =[Column1]+[Column2] | 向 12/10/2008 中添加 54 天 (2/2/2009) |
若要向日期中添加多个月,需使用 DATE、YEAR、MONTH 和 DAY 函数。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
6/9/2007 | 3 | =DATE(YEAR([Column1]),MONTH([Column1])+[Column2],DAY([Column1])) | 向 6/9/2007 中添加 3 个月 (9/9/2007) |
12/10/2008 | 25 | =DATE(YEAR([Column1]),MONTH([Column1])+[Column2],DAY([Column1])) | 向 12/10/2008 中添加 25 个月 (1/10/2011) |
若要向日期中添加多年,需使用 DATE、YEAR、MONTH 和 DAY 函数。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
6/9/2007 | 3 | =DATE(YEAR([Column1])+[Column2],MONTH([Column1]),DAY([Column1])) | 向 6/9/2007 中添加 3 年 (6/9/2010) |
12/10/2008 | 25 | =DATE(YEAR([Column1])+[Column2],MONTH([Column1]),DAY([Column1])) | 向 12/10/2008 中添加 25 年 (12/10/2033) |
若要向日期中添加天、月和年的组合,需使用 DATE、YEAR、MONTH 和 DAY 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
6/9/2007 | =DATE(YEAR([Column1])+3,MONTH([Column1])+1,DAY([Column1])+5) | 向 6/9/2007 中添加 3 年、1 个月和 5 天 (7/14/2010) |
12/10/2008 | =DATE(YEAR([Column1])+1,MONTH([Column1])+7,DAY([Column1])+5) | 向 12/10/2008 中添加 1 年、7 个月和 5 天 (7/15/2010) |
计算两个日期之间的差
可使用 DATEDIF 函数执行此计算。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
01-Jan-1995 | 15-Jun-1999 | =DATEDIF([Column1], [Column2],"d") | 返回两个日期之间的天数 (1626) |
01-Jan-1995 | 15-Jun-1999 | =DATEDIF([Column1], [Column2],"ym") | 返回两个日期之间的月数,忽略年部分 (5) |
01-Jan-1995 | 15-Jun-1999 | =DATEDIF([Column1], [Column2],"yd") | 返回两个日期之间的天数,忽略年部分 (165) |
计算两个时间之间的差
若要以标准时间格式(小时:分钟:秒)来显示结果,需使用减号运算符 (-) 和 TEXT 函数。为使此方法有效,小时数不得超过 24,分钟数和秒数不得超过 60。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
06/09/2007 10:35 AM | 06/09/2007 3:30 PM | =TEXT([Column2]-[Column1],"h") | 两个时间之间的小时数 (4) |
06/09/2007 10:35 AM | 06/09/2007 3:30 PM | =TEXT([Column2]-[Column1],"h:mm") | 两个时间之间的小时数和分钟数 (4:55) |
06/09/2007 10:35 AM | 06/09/2007 3:30 PM | =TEXT([Column2]-[Column1],"h:mm:ss") | 两个时间之间的小时数、分钟数和秒数 (4: 55:00) |
若要表示基于某个时间单位的总结果,需使用 INT 函数,或 HOUR、MINUTE 或 SECOND 函数。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
06/09/2007 10:35 AM | 06/10/2007 3:30 PM | =INT(([Column2]-[Column1])*24) | 两个时间之间的总小时数 (28) |
06/09/2007 10:35 AM | 06/10/2007 3:30 PM | =INT(([Column2]-[Column1])*1440) | 两个时间之间的总分钟数 (1735) |
06/09/2007 10:35 AM | 06/10/2007 3:30 PM | =INT(([Column2]-[Column1])*86400) | 两个时间之间的总秒数 (104100) |
06/09/2007 10:35 AM | 06/10/2007 3:30 PM | =HOUR([Column2]-[Column1]) | 在差不超过 24 时两个时间之间的小时数 (4) |
06/09/2007 10:35 AM | 06/10/2007 3:30 PM | =MINUTE([Column2]-[Column1]) | 在差不超过 60 时两个时间之间的分钟数 (55) |
06/09/2007 10:35 AM | 06/10/2007 3:30 PM | =SECOND([Column2]-[Column1]) | 在差不超过 60 时两个时间之间的秒数 (0) |
转换时间
若要将小时数从标准时间格式转换为十进制数,需使用 INT 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
10:35 AM | =([Column1]-INT([Column1]))*24 | 自 12:00 AM 开始的小时数 (10.583333) |
12:15 PM | =([Column1]-INT([Column1]))*24 | 自 12:00 AM 开始的小时数 (12.25) |
若要将小时数从十进制数转换为标准时间格式(小时:分钟:秒),需使用除法运算符和 TEXT 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
23:58 | =TEXT(Column1/24, "hh:mm:ss") | 自 12:00 AM 开始的小时数、分钟数和秒数 (00:59:55) |
2:06 | =TEXT(Column1/24, "h:mm") | 自 12:00 AM 开始的小时数和分钟数 (0:05) |
插入 Julian 日期
Julian 日期指的是当前年份与从年初开始的天数相组合的日期格式。例如,2007 年 1 月 1 日表示为 2007001;2007 年 12 月 31 日表示为 2007365。此格式不基于 Julian 日历。
若要将日期转换为 Julian 日期,需使用 TEXT 和 DATEVALUE 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
6/23/2007 | =TEXT([Column1],"yy")&TEXT(([Column1]-DATEVALUE("1/1/"& TEXT([Column1],"yy"))+1),"000") | Julian 格式的日期,两位数年份 (07174) |
6/23/2007 | =TEXT([Column1],"yyyy")&TEXT(([Column1]-DATEVALUE("1/1/"&TEXT([Column1],"yy"))+1),"000") | Julian 格式的日期,四位数年份 (2007174) |
若要将日期转换为天文学中使用的 Julian 日期,需使用常数 2415018.50。该公式仅适用于 1901 年 3 月 1 之后的日期,并且需使用 1900 日期系统。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
6/23/2007 | =[Column1]+2415018.50 | Julian 格式的日期,用于天文学中 (2454274.50) |
日期显示为星期数
若要将日期转换为星期数文本,需使用 TEXT 和 WEEKDAY 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
19-Feb-2007 | =TEXT(WEEKDAY([Column1]), "dddd") | 计算日期的星期数并返回这一天的全名 (Monday) |
3-Jan-2008 | =TEXT(WEEKDAY([Column1]), "ddd") | 计算日期的星期数并返回这一天的缩写名 (Thu) |
数学公式
您可以使用下面的公式执行大量的数学计算,比如加减乘除某些数字;计算数字平均值或中间值;舍入数字;以及对值进行计数。
数字相加
若要将某行中两列或多列中的数字相加,需使用加法运算符 (+) 或 SUM 函数。
Column1 | Column2 | Column3 | 公式 | 说明(可能的结果) |
---|---|---|---|---|
6 | 5 | 4 | =[Column1]+[Column2]+[Column3] | 将前三列中的值相加 (15) |
6 | 5 | 4 | =SUM([Column1],[Column2],[Column3]) | 将前三列中的值相加 (15) |
6 | 5 | 4 | =SUM(IF([Column1]>[Column2], [Column1]-[Column2], 10), [Column3]) | 如果 Column1 大于 Column2,则将其差值与 Column3 相加。否则,将 10 与 Column3 相加 (5) |
数字相减
若要将某行中两列或多列中的数字相减,需使用减法运算符 (-) 或具有负数的 SUM 函数。
Column1 | Column2 | Column3 | 公式 | 说明(可能的结果) |
---|---|---|---|---|
15000 | 9000 | -8000 | =[Column1]-[Column2] | 15000 减去 9000 (6000) |
15000 | 9000 | -8000 | =SUM([Column1], [Column2], [Column3]) | 将前三列中的数字(包括负值)相加 (16000) |
以百分比形式计算两数之间的差
需使用减法 (-) 和除法 (/) 运算符以及 ABS 函数。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
2342 | 2500 | =([Column2]-[Column1])/ABS([Column1]) | 转换为百分比(6.75% 或 0.06746) |
数字相乘
若要将某行中两列或多列中的数字相乘,需使用乘法运算符 (*) 或 PRODUCT 函数。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
5 | 2 | =[Column1]*[Column2] | 将前两列中的数字相乘 (10) |
5 | 2 | =PRODUCT([Column1], [Column2]) | 将前两列中的数字相乘 (10) |
5 | 2 | =PRODUCT([Column1],[Column2],2) | 将前两列中的数字及数字 2 相乘 (20) |
数字相除
若要将某行中两列或多列中的数字相除,需使用除法运算符 (/)。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
15000 | 12 | =[Column1]/[Column2] | 15000 除以 12 (1250) |
15000 | 12 | =([Column1]+10000)/[Column2] | 15000 加 10000 然后用所得总数除以 12 (2083) |
计算数字的平均值
平均值 (average) 也被称为平均值 (mean)。若要计算某行中两列或多列中数字的平均值,需使用 AVERAGE 函数。
Column1 | Column2 | Column3 | 公式 | 说明(可能的结果) |
---|---|---|---|---|
6 | 5 | 4 | =AVERAGE([Column1], [Column2],[Column3]) | 前三列中数字的平均值 (5) |
6 | 5 | 4 | =AVERAGE(IF([Column1]>[Column2], [Column1]-[Column2], 10), [Column3]) | 如果 Column1 大于 Column2,则计算其差值与 Column3 的平均值。否则,计算值 10 与 Column3 的平均值(2.5) |
计算数字的中间值
中间值是已排列好顺序的一组数字中间的值。使用 MEDIAN 函数可计算一组数字的中间值。
A | B | C | D | E | F | 公式 | 说明(结果) |
---|---|---|---|---|---|---|---|
10 | 7 | 9 | 27 | 0 | 4 | =MEDIAN(A, B, C, D, E, F) | 前 6 列中数字的中间值 (8) |
计算某范围内的最小或最大数
若要计算某行中两列或多列中的最小或最大数,需使用 MIN 和 MAX 函数。
Column1 | Column2 | Column3 | 公式 | 说明(可能的结果) |
---|---|---|---|---|
10 | 7 | 9 | =MIN([Column1], [Column2], [Column3]) | 最小数 (7) |
10 | 7 | 9 | =MAX([Column1], [Column2], [Column3]) | 最大数 (10) |
对值计数
若要对数字值计数,需使用 COUNT 函数。
Column1 | Column2 | Column3 | 公式 | 说明(可能的结果) |
---|---|---|---|---|
Apple | 12/12/2007 | =COUNT([Column1], [Column2], [Column3]) | 对包含数字值的各列计数。不包括日期、时间、文本和空值 (0) | |
$12 | #DIV/0! | 1.01 | =COUNT([Column1], [Column2], [Column3]) | 对包含数字值的各列计数,但排除错误和逻辑值 (2) |
按百分比增加或减少数字
使用百分号 (%) 运算符来执行此计算。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
23 | 3% | =[Column1]*(1+5%) | 将 Column1 中的数字增加 5% (24.15) |
23 | 3% | =[Column1]*(1+[Column2]) | 按 Column2 中的百分比值 3% 增大 Column1 中的数字:(23.69) |
23 | 3% | =[Column1]*(1-[Column2]) | 按 Column2 中的百分比值 3% 减小 Column1 中的数字:(22.31) |
幂计算
使用 exponentiation (^) 运算符或 POWER 函数执行此计算。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
5 | 2 | =[Column1]^[Column2] | 计算 5 的平方 (25) |
5 | 3 | =POWER([Column1], [Column2]) | 计算 5 的立方 (125) |
舍入数字
若要向上舍入数字,需使用 ROUNDUP、ODD 或 EVEN 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
20.3 | =ROUNDUP([Column1],0) | 将 20.3 向上舍入为最近的整数 (21) |
-5.9 | =ROUNDUP([Column1],0) | 将 -5.9 向上舍入为最近的整数 (-5) |
12.5493 | =ROUNDUP([Column1],2) | 将 12.5493 向上舍入为最近的百位小数,即包含两位小数 (12.55) |
20.3 | =EVEN([Column1]) | 将 20.3 向上舍入为最近的偶数 (22) |
20.3 | =ODD([Column1]) | 将 20.3 向上舍入为最近的奇数 (21) |
若要向下舍入数字,需使用 ROUNDDOWN 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
20.3 | =ROUNDDOWN([Column1],0) | 将 20.3 向下舍入为最近的整数 (20) |
-5.9 | =ROUNDDOWN([Column1],0) | 将 -5.9 向下舍入为最近的整数 (-6) |
12.5493 | =ROUNDDOWN([Column1],2) | 将 12.5493 向下舍入为最近的百位小数,即包含两位小数 (12.54) |
若要将数字舍入为最近的数字或分数,需使用 ROUND 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
20.3 | =ROUND([Column1],0) | 向下舍入 20.3,因为小数部分小于 .5 (20) |
5.9 | =ROUND([Column1],0) | 向上舍入 5.9,因为小数部分大于 .5 (6) |
-5.9 | =ROUND([Column1],0) | 向下舍入 -5.9,因为小数部分小于 -.5 (-6) |
1.25 | =ROUND([Column1], 1) | 将数字舍入为最近的十位小数(包含一位小数)。因为要舍入部分为 0.05 或更大数,所以向上舍入该数字(结果为 1.3) |
30.452 | =ROUND([Column1], 2) | 将该数字舍入为最近的百位小数(包含两位小数)。因为要舍入部分 0.002 小于 0.005,所以向下舍入该数字(结果为 30.45) |
若要将数字舍入为 0 以上的有效数字,需使用 ROUND、ROUNDUP、ROUNDDOWN、INT 和 LEN 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
5492820 | =ROUND([Column1],3-LEN(INT([Column1]))) | 将该数字舍入为包含 3 个有效数字 (5490000) |
22230 | =ROUNDDOWN([Column1],3-LEN(INT([Column1]))) | 将最小数字向下舍入为包含 3 个有效数字 (22200) |
5492820 | =ROUNDUP([Column1], 5-LEN(INT([Column1]))) | 将最大数字向上舍入为包含 5 个有效数字 (5492900) |
文本公式
可以使用下面的公式处理文本,如合并或串联多个列中的值、比较列的内容、移除字符或空格,以及重复字符。
更改文本的大小写
若要更改文本的大小写,需使用 UPPER、LOWER 或 PROPER 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
nina Vietzen | =UPPER([Column1]) | 将文本更改为大写 (NINA VIETZEN) |
nina Vietzen | =LOWER([Column1]) | 将文本更改为小写 (nina vietzen) |
nina Vietzen | =PROPER([Column1]) | 将文字更改为词首大写 (Nina Vietzen) |
合并名和姓
若要合并名和姓,需使用“and”运算符 (&) 或 CONCATENATE 函数。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
Carlos | Carvallo | =[Column1]&[Column2] | 合并这两个字符串 (CarlosCarvallo) |
Carlos | Carvallo | =[Column1]&" "&[Column2] | 合并这两个字符串,并用空格分隔它们 (Carlos Carvallo) |
Carlos | Carvallo | =[Column2]&", "&[Column1] | 合并这两个字符串,并用逗号和空格分隔它们 (Carvallo, Carlos) |
Carlos | Carvallo | =CONCATENATE([Column2], ",", [Column1]) | 合并这两个字符串,并用逗号分隔它们 (Carvallo,Carlos) |
合并不同列中的文本和数字
若要合并文本和数字,需使用 CONCATENATE 函数、“and”运算符 (&) 或 TEXT 函数和“and”运算符。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
Yang | 28 | =[Column1]&" sold "&[Column2]&" units." | 将上面的内容合并为一个短语 (Yang sold 28 units.) |
Dubois | 40% | =[Column1]&" sold "&TEXT([Column2],"0%")&" of the total sales." | 将上面的内容合并为一个短语 (Dubois sold 40% of the total sales.) 注意 TEXT 函数会追加 Column2 的格式化值而不是基础值 0.4。 |
Yang | 28 | =CONCATENATE([Column1]," sold ",[Column2]," units.") | 将上面的内容合并为一个短语 (Yang sold 28 units.) |
将文本与日期或时间合并
若要将文本与日期或时间合并,需使用 TEXT 函数和“and”运算符 (&)。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
Billing Date | 5-Jun-2007 | ="Statement date: "&TEXT([Column2], "d-mmm-yyyy") | 将文本与日期合并 (Statement date: 5-Jun-2007) |
Billing Date | 5-Jun-2007 | =[Column1]&" "&TEXT([Column2], "mmm-dd-yyyy") | 将不同列中的文本和日期合并为一列 (Billing Date Jun-05-2007) |
比较列的内容
若要将某一列与另一列或列值相比较,需使用 EXACT 和 OR 函数。
Column1 | Column2 | 公式 | 说明(可能的结果) |
---|---|---|---|
BD122 | BD123 | =EXACT([Column1],[Column2]) | 比较前两列的内容 (No) |
BD122 | BD123 | =EXACT([Column1], "BD122") | 将 Column1 的内容与字符串 "BD122" 相比较 (Yes) |
确定列值或其一部分是否与特定文本匹配
若要确定列值或其一部分是否与特定文本匹配,需使用 IF、FIND、SEARCH 和 ISNUMBER 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
Vietzen | =IF([Column1]="Vietzen", "OK", "Not OK") | 确定 Column1 是否为 Vietzen (OK) |
Vietzen | =IF(ISNUMBER(FIND("v",[Column1])), "OK", "Not OK") | 确定 Column1 是否包含字母 v (OK) |
BD123 | =ISNUMBER(FIND("BD",[Column1])) | 确定 Column1 是否包含 BD (Yes) |
对非空列计数
若要对非空列计数,需使用 COUNTA 函数。
Column1 | Column2 | Column3 | 公式 | 说明(可能的结果) |
---|---|---|---|---|
Sales | 19 | =COUNTA([Column1], [Column2]) | 计算非空列的数目 (2) | |
Sales | 19 | =COUNTA([Column1], [Column2], [Column3]) | 计算非空列的数目 (2) |
从文本中移除字符
若要从文本中移除字符,需使用 LEN、LEFT 和 RIGHT 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
Vitamin A | =LEFT([Column1],LEN([Column1])-2) | 从左端开始返回 7 (9-2) 个字符 (Vitamin) |
Vitamin B1 | =RIGHT([Column1], LEN([Column1])-8) | 从右端开始返回 2 (10-8) 个字符 (B1) |
从列的开头和结尾处移除空格
若要从某列中移除空格,需使用 TRIM 函数。
Column1 | 公式 | 说明(可能的结果) |
---|---|---|
Hello there! | =TRIM([Column1]) | 从开头和结尾处移除空格 (Hello there!) |
重复列中的某个字符
若要重复列中的某个字符,需使用 REPT 函数。
公式 | 说明(可能的结果) |
---|---|
=REPT(".",3) | 重复句点 3 次 (...) |
=REPT("-",10) | 重复短划线 10 次 (----------) |