函数类型统计函数字符串函数数值函数逻辑函数日期函数选择查找函数
功能:统计参数中包含数字的单元格个数(文本、空值、逻辑值不计入)。
语法:COUNT(值1, [值2], ...)
案例:
A1:A5 分别为: 10, "苹果", 20, "", TRUE=COUNT(A1:A5) → 结果:2 (只统计10和20)功能:统计非空单元格个数(数字、文本、逻辑值都算,空值不算)。
语法:COUNTA(值1, [值2], ...)
案例:
A1:A5 分别为: 10, "苹果", 20, "", TRUE=COUNTA(A1:A5) → 结果:4 (""为空,不计入)功能:统计空白单元格个数。
语法:COUNTBLANK(区域)
案例:
A1:A5 分别为: 10, "", 20, "", ""=COUNTBLANK(A1:A5) → 结果:3功能:按多条件统计满足条件的单元格个数。
语法:COUNTIFS(条件区域1, 条件1, [条件区域2, 条件2], ...)
案例:
A列: 部门 B列: 销售额 C列: 月份销售部 8000 1月市场部 5000 1月销售部 9000 2月=COUNTIFS(A2:A4, "销售部", C2:C4, "1月") → 结果:1功能:对数字求和。
语法:SUM(数字1, [数字2], ...)
案例:
=SUM(10, 20, 30) → 60=SUM(A1:A10) → A1到A10的总和功能:按多条件求和。
语法:SUMIFS(求和区域, 条件区域1, 条件1, ...)
案例:
=SUMIFS(B2:B10, A2:A10, "销售部", C2:C10, ">5000")→ 统计A列为"销售部"且C列大于5000的对应B列之和功能:计算算术平均值。
语法:AVERAGE(数字1, [数字2], ...)
案例:
=SUM(10, 20, 30) → 20功能:按多条件计算平均值。
语法:AVERAGEIFS(求平均区域, 条件区域1, 条件1, ...)
案例:
=AVERAGEIFS(B2:B10, A2:A10, "销售部", C2:C10, ">=1月")功能:返回一组数据中的最大值。
语法:MAX(数字1, [数字2], ...)
案例:
=MAX(10, 50, 30, 80) → 80功能:从数据库/列表中按条件返回最大值。
语法:DMAX(数据库区域, 字段, 条件区域)
案例:
数据库区域 A1:C10(含标题行)条件区域 E1:E2(E1写"部门",E2写"销售部")=DMAX(A1:C10, "销售额", E1:E2)→ 返回销售部中的最大销售额功能:返回一组数据中的最小值。
语法:MIN(数字1, [数字2], ...)
案例:
=MIN(10, 50, 30, 80) → 10功能:从数据库中按条件返回最小值。
语法:DMIN(数据库区域, 字段, 条件区域)
案例:
=DMIN(A1:C10, "销售额", E1:E2)→ 返回销售部中的最小销售额功能:返回一组数据的中位数(排序后中间值,偶数个时取中间两数平均)。
语法:MEDIAN(数字1, [数字2], ...)
案例:
=MEDIAN(1, 3, 5, 7, 9) → 5=MEDIAN(1, 3, 5, 7) → 4 ((3+5)/2)功能:先乘积后求和,常用于加权平均或多条件统计。
语法:SUMPRODUCT(数组1, [数组2], [数组3], ...)
案例:
价格: A1:A3 = {10, 20, 30}数量: B1:B3 = {5, 3, 2}=SUMPRODUCT(A1:A3, B1:B3) → 10×5 + 20×3 + 30×2 = 50+60+60 = 170多条件用法:=SUMPRODUCT((A2:A10="销售部")*(B2:B10>5000)*C2:C10)→ 统计销售部且销售额>5000的C列总和功能:计算样本方差(基于样本,分母为 n-1)。
语法:VAR.S(数字1, [数字2], ...)
案例:
=VAR.S(2, 4, 6, 8) → 结果约 6.67功能:返回数据分布的偏度(衡量不对称性),正数右偏,负数左偏。
语法:SKEW(数字1, [数字2], ...)
案例:
=SKEW(1, 2, 3, 4, 100) → 结果约 1.93(明显右偏,因为100拉高了右侧)功能:计算正态分布的概率密度或累积概率。
语法:NORM.DIST(x, 均值, 标准差, 累积)
累积 = TRUE:返回累积分布函数 P(X ≤ x)累积 = FALSE:返回概率密度函数 f(x)案例:
均值=50,标准差=10=NORM.DIST(60, 50, 10, TRUE) → 约 0.8413(60分及以下约占84.13%)=NORM.DIST(60, 50, 10, FALSE) → 约 0.0242(60分处的概率密度值)功能:返回字符串的字符数(中英文每个字符都算1个)。
语法:LEN(文本)
案例:
=LEN("Hello") → 5=LEN("你好世界") → 4=LEN(A1) → A1单元格的字符数功能:返回字符串的字节数(中文双字节算2,英文单字节算1)。
语法:LENB(文本)
案例:
=LENB("Hello") → 5=LENB("你好") → 4 (每个汉字2字节)=LENB("Hi你好") → 6 (2+4)技巧:提取中文姓名(假设A1为"张三123")
=LEFTB(A1, LENB(A1)-LEN(A1))→ 返回"张三"
功能:从字符串左侧截取指定个数的字符。
语法:LEFT(文本, [截取个数])
案例:
=LEFT("Excel函数", 3) → "Excel"=LEFT("2024年", 4) → "2024"功能:从字符串右侧截取指定个数的字符。
语法:RIGHT(文本, [截取个数])
案例:
=RIGHT("Excel函数", 2) → "函数"=RIGHT("订单号A001", 4) → "A001"功能:从字符串中间指定位置截取指定长度的字符。
语法:MID(文本, 开始位置, 截取个数)
案例:
=MID("身份证号110101199001011234", 7, 8) → "19900101" (提取出生日期)=MID("ABC-DEF-GHI", 5, 3) → "DEF"功能:将字符串全部转为大写。
语法:UPPER(文本)
案例:
=UPPER("excel") → "EXCEL"=UPPER("Hello123") → "HELLO123"功能:将字符串全部转为小写。
语法:LOWER(文本)
案例:
=LOWER("EXCEL") → "excel"=LOWER("Hello World") → "hello world"补充:
PROPER("hello world")→"Hello World"(首字母大写)
功能:查找某字符串在文本中的起始位置,区分大小写,不支持通配符。找不到返回错误。
语法:FIND(查找文本, 所在文本, [开始位置])
案例:
=FIND("e", "Excel") → 2=FIND("E", "Excel") → 1=FIND("函数", "Excel函数") → 6=FIND("-", "2024-07-16") → 5功能:查找某字符串在文本中的起始位置,不区分大小写,支持通配符(?代表单个字符,*代表任意字符)。
语法:SEARCH(查找文本, 所在文本, [开始位置])
案例:
=SEARCH("e", "Excel") → 1 (不区分大小写)=SEARCH("Ex*", "Excel函数") → 1=SEARCH("??函数", "Excel函数") → 3 (??匹配"ce")FIND vs SEARCH 对比:
• FIND:区分大小写,不支持通配符 • SEARCH:不区分大小写,支持通配符
功能:将字符串中指定的旧文本替换为新文本,可指定替换第几个。
语法:SUBSTITUTE(文本, 旧文本, 新文本, [替换第几个])
案例:
=SUBSTITUTE("苹果-苹果-香蕉", "苹果", "橙子") → "橙子-橙子-香蕉"=SUBSTITUTE("苹果-苹果-香蕉", "苹果", "橙子", 2) → "苹果-橙子-香蕉" (只替换第2个)=SUBSTITUTE("2024/07/16", "/", "-") → "2024-07-16"功能:根据位置替换字符串中的部分内容。
语法:REPLACE(旧文本, 开始位置, 替换字符数, 新文本)
案例:
=REPLACE("110101199001011234", 7, 8, "********") → "110101********1234" (身份证号打码)=REPLACE("Hello World", 7, 5, "Excel") → "Hello Excel"SUBSTITUTE vs REPLACE 对比:
• SUBSTITUTE:按内容替换 • REPLACE:按位置替换
功能:将多个字符串连接成一个。Excel 2016+ 推荐使用 CONCAT 或 TEXTJOIN。
语法:CONCATENATE(文本1, [文本2], ...)
案例:
=CONCATENATE("姓", "名") → "姓名"=CONCATENATE(A1, "-", B1) → A1和B1用"-"连接更简洁写法(推荐):=A1 & "-" & B1TEXTJOIN(Excel 2016+):
=TEXTJOIN("-", TRUE, A1:A5)用"-"连接A1:A5,忽略空值。
功能:比较两个字符串是否完全相同(区分大小写)。
语法:EXACT(文本1, 文本2)
案例:
=EXACT("Excel", "excel") → FALSE=EXACT("Excel", "Excel") → TRUE=A1=B1 → 不区分大小写=EXACT(A1, B1) → 区分大小写功能:删除字符串中多余的空格(保留单词间单个空格,删除首尾空格)。
语法:TRIM(文本)
案例:
=TRIM(" Hello World ") → "Hello World"=TRIM(" Excel 函数 ") → "Excel 函数"补充清理函数:
• CLEAN(文本):删除非打印字符• TRIM(CLEAN(A1)):组合使用,彻底清理
邮箱: "zhangsan@company.com"=LEFT(A1, FIND("@", A1)-1) → "zhangsan"手机号: "13812345678"=REPLACE(A1, 4, 4, "****") → "138****5678"文件名: "report.xlsx"=LEFT(A1, FIND(".", A1)-1) → "report"日期: "2024/07/16"=SUBSTITUTE(A1, "/", "-") → "2024-07-16"=IF(ISNUMBER(--A1), "是数字", "非数字")结合LEN: =IF(LEN(A1)=LENB(A1), "纯英文/数字", "含中文")功能:返回一个大于等于0且小于1的随机小数。每次工作表重新计算时都会变化。
语法:RAND()
案例:
=RAND() → 0.372891...(每次计算都不同)=RAND()*100 → 0~100之间的随机小数=RAND()*50+50 → 50~100之间的随机小数固定随机值:选中单元格 →
Ctrl+C→Ctrl+Alt+V→ 选择"值"粘贴。
功能:返回指定范围内的随机整数(包含上下界)。
语法:RANDBETWEEN(最小值, 最大值)
案例:
=RANDBETWEEN(1, 100) → 1到100之间的随机整数=RANDBETWEEN(50, 200) → 50到200之间的随机整数=RANDBETWEEN(-10, 10) → -10到10之间的随机整数生成随机日期:
=RANDBETWEEN(DATE(2024,1,1), DATE(2024,12,31))
功能:返回数字的绝对值(去掉正负号)。
语法:ABS(数字)
案例:
=ABS(-10) → 10=ABS(10) → 10=ABS(A1-B1) → 两数差的绝对值(常用于计算误差)功能:返回两数相除后的余数(取模运算)。
语法:MOD(被除数, 除数)
案例:
=MOD(17, 5) → 2 (17÷5=3余2)=MOD(20, 4) → 0 (整除余数为0)判断奇偶:=IF(MOD(A1, 2)=0, "偶数", "奇数")注意:MOD 的结果符号与除数相同。
=MOD(-17, 5)→3(Excel 中);=MOD(17, -5)→-3。
功能:返回某数的乘幂(即指数运算)。
语法:POWER(底数, 指数)
案例:
=POWER(2, 3) → 8 (2的3次方)=POWER(10, 2) → 100=POWER(9, 0.5) → 3 (开平方,等同于=SQRT(9))也可用
^运算符代替:2^3= 8
功能:返回所有参数的乘积。
语法:PRODUCT(数字1, [数字2], ...)
案例:
=PRODUCT(2, 3, 4) → 24=PRODUCT(A1:A5) → A1到A5的乘积=PRODUCT(A1, 1.1) → A1的值乘以1.1(常用于涨价10%)功能:将数字向上舍入到最接近的指定基数的倍数。
语法:CEILING(数字, 基数)
案例:
=CEILING(17, 5) → 20 (向上舍入到5的倍数)=CEILING(23, 10) → 30=CEILING(4.2, 1) → 5=CEILING(100, 50) → 100计算包装箱数(每箱装6个):=CEILING(25, 6) → 30 (需要30个位置,即5箱)功能:将数字向下舍入到最接近的指定基数的倍数。
语法:FLOOR(数字, 基数)
案例:
=FLOOR(17, 5) → 15 (向下舍入到5的倍数)=FLOOR(23, 10) → 20=FLOOR(4.9, 1) → 4计算完整组数(每组5人):=FLOOR(23, 5) → 20 (可组成4个完整组)CEILING vs FLOOR 对比:
• CEILING:向上取整(往大取) • FLOOR:向下取整(往小取) • 两者都要求基数为正数(Excel 中)。
功能:按指定小数位数进行四舍五入。
语法:ROUND(数字, 小数位数)
案例:
=ROUND(3.14159, 2) → 3.14=ROUND(1234.567, 0) → 1235=ROUND(1234.567, -1) → 1230 (负数表示对整数位四舍五入)=ROUND(1234.567, -2) → 1200功能:按指定小数位数向上舍入(远离零)。
语法:ROUNDUP(数字, 小数位数)
案例:
=ROUNDUP(3.14159, 2) → 3.15=ROUNDUP(3.1, 0) → 4=ROUNDUP(-3.1, 0) → -4 (远离零,即更负)=ROUNDUP(1234, -2) → 1300功能:按指定小数位数向下舍入(靠近零)。
语法:ROUNDDOWN(数字, 小数位数)
案例:
=ROUNDDOWN(3.999, 2) → 3.99=ROUNDDOWN(3.9, 0) → 3=ROUNDDOWN(-3.9, 0) → -3 (靠近零)=ROUNDDOWN(1234, -2) → 1200ROUND / ROUNDUP / ROUNDDOWN 对比:
函数 3.6 → 0位 -3.6 → 0位 ROUND 4 -4 ROUNDUP 4 -4 ROUNDDOWN 3 -3
SQRT(数字) | =SQRT(16) | |
EXP(数字) | =EXP(1) | |
LN(数字) | =LN(10) | |
LOG(数字, [底数]) | =LOG(100, 10) | |
SIGN(数字) | =SIGN(-5) | |
INT(数字) | =INT(3.9)=INT(-3.9) → -4 | |
TRUNC(数字, [小数位]) | =TRUNC(3.999, 2) |
=RANDBETWEEN(1000, 9999) & "-" & RANDBETWEEN(1000, 9999)→ "4821-7392"(随机订单号格式)原价: 99.99,税率: 6.5%=CEILING(99.99 * 1.065, 0.01) → 106.49重量: 2.3kg,单价: 10元/kg=ROUNDUP(2.3, 0) * 10 → 30金额: 1234.56=ROUNDDOWN(1234.56, 0) → 1234或 =INT(1234.56) → 1234=IF(MOD(A1, 3)=0, "是", "否")=DATE(2024, RANDBETWEEN(1, 12), RANDBETWEEN(1, 28))→ 2024年随机一天逻辑函数以下是逻辑函数和日期时间函数的详细用法与案例:
功能:所有条件都为**真(TRUE)**时返回 TRUE,任一条件为假则返回 FALSE。
语法:AND(逻辑1, [逻辑2], ...)
案例:
=AND(5>3, 10>8) → TRUE=AND(A1>60, B1>60, C1>60) → 三科都及格才返回 TRUE=AND(A1>=DATE(2024,1,1), A1<=DATE(2024,12,31)) → 判断日期是否在2024年内功能:任一条件为**真(TRUE)**时返回 TRUE,全部条件为假才返回 FALSE。
语法:OR(逻辑1, [逻辑2], ...)
案例:
=OR(5>10, 8>3) → TRUE=OR(A1="优秀", A1="良好") → 任一满足即 TRUE=OR(A1>90, B1>90, C1>90) → 至少有一科超过90分功能:对逻辑值取反。
语法:NOT(逻辑)
案例:
=NOT(TRUE) → FALSE=NOT(5>10) → TRUE=NOT(ISBLANK(A1)) → A1非空时返回 TRUE功能:根据条件判断返回不同结果。
语法:IF(条件, 条件为真时的值, 条件为假时的值)
案例:
=IF(A1>=60, "及格", "不及格")=IF(A1>=90, "优秀", IF(A1>=80, "良好", IF(A1>=60, "及格", "不及格")))=IF(AND(A1>0, A1<100), "有效", "无效")=IF(OR(A1="男", A1="女"), "性别有效", "请重新输入")功能:公式计算出错时返回指定值,否则返回公式正常结果。
语法:IFERROR(值, 错误时的值)
案例:
=IFERROR(A1/B1, "除数不能为0")=IFERROR(VLOOKUP(A1, B:C, 2, 0), "未找到")=IFERROR(DATEDIF(A1, B1, "D"), "日期错误")IFNA:仅对
#N/A错误生效,其他错误仍显示。=IFNA(VLOOKUP(A1, B:C, 2, 0), "查无此人")
功能:判断值是否为文本,是则返回 TRUE。
语法:ISTEXT(值)
案例:
=ISTEXT("Hello") → TRUE=ISTEXT(123) → FALSE=IF(ISTEXT(A1), "文本类型", "非文本")功能:判断值是否为数字,是则返回 TRUE。
语法:ISNUMBER(值)
案例:
=ISNUMBER(123) → TRUE=ISNUMBER("123") → FALSE=IF(ISNUMBER(A1), A1*1.1, "请输入数字")其他常用 IS 函数:
函数 功能 ISBLANK(值)是否为空单元格 ISLOGICAL(值)是否为逻辑值 TRUE/FALSE ISERROR(值)是否为任意错误 ISEVEN(值)是否为偶数 ISODD(值)是否为奇数
功能:返回当前日期(不含时间)。每次打开/计算工作表时自动更新。
语法:TODAY()
案例:
=TODAY() → 2026/7/16=TODAY()+7 → 一周后的日期=IF(A1<TODAY(), "已过期", "未过期")功能:返回当前日期和时间。每次计算时自动更新。
语法:NOW()
案例:
=NOW() → 2026/7/16 17:36=NOW()-TODAY() → 当天已过去的时间(小数形式)=TEXT(NOW(), "yyyy-mm-dd hh:mm") → 格式化显示功能:从日期中分别提取年、月、日。
语法:YEAR(日期) / MONTH(日期) / DAY(日期)
案例:
日期 A1 = 2024/5/20=YEAR(A1) → 2024=MONTH(A1) → 5=DAY(A1) → 20=DATE(YEAR(A1), MONTH(A1)+1, DAY(A1)) → 下月同日功能:从时间中分别提取时、分、秒。
语法:HOUR(时间) / MINUTE(时间) / SECOND(时间)
案例:
时间 B1 = 14:35:28=HOUR(B1) → 14=MINUTE(B1) → 35=SECOND(B1) → 28功能:根据年、月、日三个数字组合成日期。
语法:DATE(年, 月, 日)
案例:
=DATE(2024, 7, 16) → 2024/7/16=DATE(2024, 13, 1) → 2025/1/1 (自动进位)=DATE(2024, 0, 1) → 2023/12/1 (自动退位)=DATE(YEAR(TODAY()), 12, 31) → 今年最后一天功能:根据时、分、秒三个数字组合成时间。
语法:TIME(时, 分, 秒)
案例:
=TIME(14, 30, 0) → 14:30:00=TIME(25, 0, 0) → 1:00:00 (自动进位到次日)=A1 + TIME(2, 30, 0) → A1日期时间加2.5小时功能:计算两个日期之间的间隔(年、月、日)。这是一个隐藏函数,Excel 中不会自动提示,但可用。
语法:DATEDIF(开始日期, 结束日期, 单位代码)
"Y" | |
"M" | |
"D" | |
"YM" | |
"YD" | |
"MD" |
案例:
开始日期 A1 = 1990/5/20,结束日期 B1 = 2024/7/16=DATEDIF(A1, B1, "Y") → 34 (已满34年)=DATEDIF(A1, B1, "M") → 409 (总月数)=DATEDIF(A1, B1, "D") → 12479(总天数)=DATEDIF(A1, B1, "YM") → 1 (34年又1个月)=DATEDIF(A1, B1, "MD") → 26 (又26天)计算年龄精确到年月日:=YEAR(B1)-YEAR(A1) & "岁" & DATEDIF(A1, B1, "YM") & "个月"注意:
DATEDIF的结束日期必须大于等于开始日期,否则会返回#NUM!错误。
EDATE(日期, 月数) | =EDATE(TODAY(), 3) | |
EOMONTH(日期, 月数) | =EOMONTH(TODAY(), 0) | |
WEEKDAY(日期, [类型]) | =WEEKDAY(TODAY(), 2) | |
WEEKNUM(日期) | =WEEKNUM(TODAY()) | |
WORKDAY(日期, 天数, [节假日]) | =WORKDAY(TODAY(), 10) | |
NETWORKDAYS(开始, 结束, [节假日]) | =NETWORKDAYS(A1, B1) |
签约日期 A1 = 2024/1/1,合同期 B1 = 24(月)到期日 = EDATE(A1, B1)剩余天数 = EDATE(A1, B1) - TODAY()状态 = IF(EDATE(A1, B1) < TODAY(), "已过期", IF(EDATE(A1, B1)-TODAY()<=30, "即将到期", "正常"))入职日期 A1 = 2015/3/10=DATEDIF(A1, TODAY(), "Y") & "年" & DATEDIF(A1, TODAY(), "YM") & "个月" & DATEDIF(A1, TODAY(), "MD") & "天"=IF(AND(ISNUMBER(A1), A1>0, A1<=100), "输入有效", "请输入1-100之间的数字")上班 A1 = 8:30,午休开始 B1 = 12:00,午休结束 C1 = 13:30,下班 D1 = 18:00=(D1-A1)-(C1-B1) → 返回时间差,格式设为 [h]:mm 显示 8:30生日 A1 = 1995/8/20今年生日 = DATE(YEAR(TODAY()), MONTH(A1), DAY(A1))=IF(今年生日<TODAY(), "今年生日已过", "距离生日还有" & 今年生日-TODAY() & "天")匹配查找函数
以下是这些匹配查找函数的详细用法与案例:
功能:根据索引号(1, 2, 3...)从参数列表中返回对应值。
语法:CHOOSE(索引号, 值1, [值2], ...)
案例:
=CHOOSE(2, "苹果", "香蕉", "橙子") → "香蕉"=CHOOSE(MONTH(A1), "Q1", "Q1", "Q1", "Q2", ...) → 根据月份返回季度=CHOOSE(WEEKDAY(A1,2), "周一", "周二", ...) → 根据日期返回星期中文限制:最多 254 个选项;索引号必须是 1~254 的正整数。
功能:在表格首列中查找值,返回该行指定列的值(垂直查找)。
语法:VLOOKUP(查找值, 表格区域, 列序号, [精确匹配])
FALSE0 = 精确匹配;TRUE 或 1 = 近似匹配 |
案例:
员工表 A1:C5(A列工号,B列姓名,C列部门) 1001 张三 销售部 1002 李四 技术部=VLOOKUP(1002, A1:C5, 2, FALSE) → "李四"=VLOOKUP(1002, A1:C5, 3, FALSE) → "技术部"跨表查找:=VLOOKUP(A2, [工资表.xlsx]Sheet1!$A:$D, 4, 0)⚠️ 常见错误:
• 列序号写错(不是工作表列号,而是区域中的相对列号) • 查找值不在区域首列 • 近似匹配(TRUE)时首列必须升序排列 • 只能向右查找,不能向左
功能:在表格首行中查找值,返回该列指定行的值(水平查找)。
语法:HLOOKUP(查找值, 表格区域, 行序号, [精确匹配])
案例:
季度表 A1:D2(A1为空,B1="Q1", C1="Q2"...;A2="销售额", B2=100, C2=150...)=HLOOKUP("Q2", A1:D2, 2, FALSE) → 150VLOOKUP 是"按列首查找,返回某行";HLOOKUP 是"按行首查找,返回某列"。
功能:有两种形式——向量形式(推荐)和数组形式。在单行/单列中查找,返回另一行/列对应值。
语法(向量形式):LOOKUP(查找值, 查找区域, [返回区域])
特点:
案例:
成绩表 A列分数段,B列等级(已按分数升序排列) 0 不及格 60 及格 80 良好 90 优秀=LOOKUP(85, A1:A4, B1:B4) → "良好" (85小于90,返回80对应的"良好")根据姓名查工号(向左查找,VLOOKUP做不到):B列姓名,A列工号=LOOKUP("张三", B1:B5, A1:A5) → 返回张三的工号⚠️ LOOKUP 默认近似匹配,查找区域必须升序,否则结果不可预期。
功能:返回查找值在区域中的相对位置(第几个),而非值本身。
语法:MATCH(查找值, 查找区域, [匹配类型])
1 | |
0 | 精确匹配 |
-1 |
案例:
=MATCH("李四", {"张三","李四","王五"}, 0) → 2=MATCH("技术部", A1:A10, 0) → 技术部在A1:A10中的位置=MATCH(85, {0,60,80,90}, 1) → 3 (85小于等于90,80是第3个)功能:根据行号和列号返回区域中对应单元格的值。
语法:
INDEX(区域, 行号, [列号])INDEX(引用区域, 行号, [列号], [区域号])案例:
数据区域 A1:C5=INDEX(A1:C5, 3, 2) → 第3行第2列的值=INDEX(A1:C5, 3, ) → 第3行整行(Excel 365 返回数组)=INDEX(A:A, 5) → A列第5行的值INDEX+MATCH 可以替代 VLOOKUP,且更灵活:
=INDEX(返回列, MATCH(查找值, 查找列, 0)) | |
=INDEX(返回行, MATCH(查找值, 查找行, 0)) | |
| 向左查找 | =INDEX(A列, MATCH(值, B列, 0)) |
=INDEX(返回列, MATCH(1, (条件1)*(条件2), 0)) |
案例:
A列工号,B列姓名,C列部门,D列工资根据姓名查工资(VLOOKUP无法向左查):=INDEX(D2:D100, MATCH("张三", B2:B100, 0))根据工号查姓名:=INDEX(B2:B100, MATCH(1002, A2:A100, 0))功能:以指定单元格为基点,按偏移量(行、列)返回新的引用区域。
语法:OFFSET(基点, 偏移行数, 偏移列数, [高度], [宽度])
案例:
=OFFSET(A1, 2, 3) → 从A1向下2行、向右3列 → D3=OFFSET(A1, 0, 0, 5, 3) → 返回 A1:C5 区域=OFFSET(A1, MATCH("李四",A:A,0)-1, 1) → 动态定位动态求和最近7天:=SUM(OFFSET(B1, COUNTA(B:B)-7, 0, 7, 1))⚠️ OFFSET 是易失性函数,大量使用会导致工作表计算变慢。
功能:将文本字符串转换为单元格引用。
语法:INDIRECT(引用文本, [引用样式])
TRUE | |
FALSE |
案例:
=INDIRECT("A1") → 返回 A1 的值=INDIRECT("Sheet2!A1") → 返回 Sheet2 的 A1=INDIRECT("A"&B1) → 如果B1=5,则引用A5跨表动态引用:=INDIRECT(A1&"!B2") → A1单元格内容为"Sheet2",则引用Sheet2!B2配合名称管理器:定义名称"销售额"=B2:B10=SUM(INDIRECT("销售额"))⚠️ INDIRECT 也是易失性函数;且如果引用的工作簿未打开,会返回
#REF!。
| 位置 | ||||
| 引用 | ||||
| 引用 |
定义名称: 水果 = {"苹果","香蕉"} 蔬菜 = {"白菜","萝卜"}A1 下拉选择:水果/蔬菜B1 动态下拉: 数据验证 → 序列 → =INDIRECT(A1) A B C D1 一月 二月 三月2 张三 100 200 3003 李四 150 250 350根据姓名和月份查销售额:=INDEX(B2:D3, MATCH("李四", A2:A3, 0), MATCH("二月", B1:D1, 0))→ 250= AVERAGE(OFFSET(B1, 0, COUNTA(1:1)-3, 1, 3))→ 从最后一列向左偏移3列,取宽度3,计算平均值A列姓名,B列部门,C列工资查找"张三"且"销售部"的工资:=INDEX(C2:C100, MATCH(1, (A2:A100="张三")*(B2:B100="销售部"), 0))(Excel 365 直接回车,旧版需 Ctrl+Shift+Enter)=SUM(INDIRECT(A1&"!B:B"))→ A1单元格输入"1月",则汇总"1月"表的B列