简介:这份WPS官方函数公式视频教程面向办公人员、数据分析初学者及需要提升表格处理效率的职场用户,系统讲解WPS表格中高频函数与实用技巧。内容覆盖VLOOKUP、IF、SUMIF、SUMIFS、COUNTIF、COUNTIFS、INDEX、MATCH、LOOKUP、MID、LEFT、TEXT、RANK、SUBTOTAL、IFS、DATEDIF等数十个函数,并延伸至跨表匹配、多条件求和、不完全匹配查询、身份证信息提取、销售统计及云同步多人实时编辑等真实场景,帮助读者从入门到进阶建立完整的数据分析思路。资源包内含1个PDF文件,大小约331KB,以图文目录形式串联374个实例与视频链接,便于按需检索和对照学习。目前已有1001人学习下载,适合希望利用碎片时间系统掌握WPS函数公式、提升日常办公与数据管理效率的读者参考使用。
1. 从一张被公式拖垮的报表说起:这套 WPS 函数视频到底值不值得刷
上周帮一个做运营的朋友看报表,她每个月要花整整两天做同一件事:从三张表里把订单号、客户名、金额对到一起,再按区域和月份分别求和。我问她为什么不用 VLOOKUP 和 SUMIFS,她说“看过教程,但一到自己写就报 #N/A,干脆手动复制”。这不是个例。函数这东西,看别人写觉得简单,自己动手就翻车,核心原因是缺一套从单函数到组合场景的完整参照。这套 WPS 官方函数公式视频教程,收录了 374 个实例,覆盖 VLOOKUP、IF、SUMIF 三大基础函数,也包含 DATEDIF、SUBTOTAL、INDIRECT、XIRR 这类进阶和财务专用函数,每个视频 1 到 4 分钟,短平快。它适合两类人:一是被重复劳动困住的办公族,想用函数把两天的活压到两小时;二是已经会写单个函数、但一组合就出错的半熟手,需要一套系统的查漏补缺材料。下面我按“先搞懂逻辑、再动手复现、最后避开坑”的顺序,把这套资源拆开讲。
2. 三大核心函数的底层逻辑:VLOOKUP、IF、SUMIF 到底怎么选
2.1 VLOOKUP 的查找逻辑与参数拆解
VLOOKUP 是这套教程里出现频率最高的函数,没有之一。它的完整语法是VLOOKUP(查找值, 查找区域, 返回列号, 匹配方式)。四个参数里,前三个决定“找什么、在哪找、返回哪一列”,第四个参数决定“精确找还是模糊找”。很多人翻车就翻在第四个参数上:写 0 或 FALSE 是精确匹配,写 1 或 TRUE 是近似匹配。日常对账、配表场景,99% 的情况应该用精确匹配。
我一般会这样拆解它的执行过程:先在查找区域的第一列里,从上到下扫描,找到与查找值相等的单元格;找到后,锁定这一行;然后往右数到第 N 列,把那个单元格的值取出来。如果第一列里没有相等的值,精确匹配模式下直接返回 #N/A。理解了这个“先定位行、再偏移列”的机制,就能明白为什么查找值必须在查找区域的第一列——这是 VLOOKUP 的硬约束,不是可以绕过的设置。
# 模拟 VLOOKUP 精确匹配的查找过程 def vlookup_simulate(lookup_value, table, col_index): """ lookup_value: 要查找的值 table: 二维列表,第一列是查找列 col_index: 返回第几列(从1开始) """ for row in table: if row[0] == lookup_value: # 精确匹配第一列 return row[col_index - 1] # 返回对应列的值 return "#N/A" # 没找到就报错 # 示例数据:订单表 orders = [ ["A001", "张三", 1200], ["A002", "李四", 850], ["A003", "王五", 2300], ] print(vlookup_simulate("A002", orders, 3)) # 输出 850 print(vlookup_simulate("A009", orders, 3)) # 输出 #N/A上面这段代码不是让你在 WPS 里跑,而是帮你把 VLOOKUP 的“黑匣子”打开。参数 col_index 从 1 开始数,对应表格里“返回列号”的概念。实际写公式时,查找区域建议用绝对引用(比如$A$2:$C$100),否则往下拖拽时区域会跟着偏移,这是新手最常见的翻车点之一。
2.2 IF 与 SUMIF 的配合场景
IF 函数本身很简单:IF(条件, 真值, 假值)。但它真正的价值在于和别的函数嵌套。教程里有一个很典型的场景:根据销售额判断是否达标,达标返回“完成”,不达标返回“未完成”。公式是=IF(C2>=10000,"完成","未完成")。如果还要再分档,就嵌套第二层 IF,比如=IF(C2>=10000,"优秀",IF(C2>=5000,"合格","待改进"))。嵌套层数不建议超过三层,再多就该换 IFS 函数了,教程里也有 IFS 的专门讲解。
SUMIF 解决的是“按条件求和”的问题,语法是SUMIF(条件区域, 条件, 求和区域)。注意这三个参数的顺序:先给条件区域,再给条件,最后给要求和的实际数值区域。很多人会下意识把求和区域放前面,结果算出来是错的。举个例子,要统计“华东区”的订单总额,条件区域是省份列,条件是“华东”,求和区域是金额列。如果条件区域和求和区域是同一列,第三个参数可以省略,但我不建议省,写全了以后回头检查更清楚。
# 模拟 SUMIF 的条件求和逻辑 def sumif_simulate(condition_range, condition, sum_range): """ condition_range: 条件判断的区域 condition: 判断条件 sum_range: 实际求和的数值区域 """ total = 0 for i in range(len(condition_range)): if condition_range[i] == condition: # 条件匹配 total += sum_range[i] # 累加对应数值 return total regions = ["华东", "华南", "华东", "华北", "华东"] amounts = [1200, 850, 2300, 600, 1800] print(sumif_simulate(regions, "华东", amounts)) # 输出 5300这段代码把 SUMIF 的“逐行判断、匹配则累加”过程还原出来了。实际使用时,条件不一定是等号,还可以写">5000"这样的比较运算,教程里有多条件求和的 SUMIFS 专门讲这个。选型上我的习惯是:单条件求和用 SUMIF,多条件用 SUMIFS,判断逻辑用 IF,查找匹配用 VLOOKUP。四个函数覆盖了日常办公 80% 的数据处理需求。
3. 从单函数到组合拳:把教程里的案例拆成可复现的操作
3.1 跨表匹配的完整操作流程
教程里有一个“VLOOKUP 秒速配两表数据”的视频,时长 1 分 07 秒,讲的就是跨表匹配。我把它拆成可照着做的步骤。假设有两张表:一张是“订单明细”,有订单号和金额;另一张是“客户信息”,有订单号和客户名。现在要在订单明细里把客户名匹配过来。
第一步,确认两张表的关联字段。这里就是订单号,它必须同时存在于两张表中,且在“客户信息”表里,订单号要位于查找区域的第一列。如果不在第一列,要么调整列顺序,要么用 INDEX+MATCH 组合替代,教程里也有 INDEX 和 MATCH 的单独讲解。
第二步,在订单明细表的客户名列写入公式。假设订单号在 A 列,金额在 B 列,客户信息表在 Sheet2 的 A 到 B 列,公式写成=VLOOKUP(A2,Sheet2!$A$2:$B$100,2,0)。这里 Sheet2! 表示跨工作表引用,$A$2:$B$100 是绝对引用,2 表示返回第二列即客户名,0 表示精确匹配。
第三步,双击填充柄往下填充,检查有没有 #N/A。如果有,先排查订单号两边是不是有空格,用 TRIM 函数清一下;再排查数据类型是不是一致,一边是文本一边是数值也会匹配不上。
# 模拟跨表匹配的完整流程 def cross_table_match(order_ids, customer_table): """ order_ids: 订单明细里的订单号列表 customer_table: 客户信息表,每行是 [订单号, 客户名] """ result = [] for oid in order_ids: matched = "#N/A" for row in customer_table: if row[0] == oid: matched = row[1] break result.append(matched) return result order_ids = ["A001", "A003", "A005"] customer_table = [["A001", "张三"], ["A002", "李四"], ["A003", "王五"]] print(cross_table_match(order_ids, customer_table)) # 输出 ['张三', '王五', '#N/A']这段代码模拟了跨表匹配的逐行查找过程。实际在 WPS 里操作时,最关键的是绝对引用的范围要覆盖所有可能的数据行,但又不能太大导致性能下降。我一般会多留 50 行余量,比如数据到 200 行,区域就写到 $A$2:$B$250。
3.2 日期与文本函数的组合应用
教程里 DATEDIF、MID、TEXT 这几个函数被放在一起讲,因为它们经常组合使用。一个典型场景是从身份证号里提取出生日期,再计算年龄。身份证号的第 7 到 14 位是出生日期,格式是 YYYYMMDD。先用 MID 提取:=MID(A2,7,8),得到“19900101”这样的字符串。然后用 TEXT 转成日期格式:=TEXT(MID(A2,7,8),"0000-00-00"),得到“1990-01-01”。最后用 DATEDIF 算年龄:=DATEDIF(TEXT(MID(A2,7,8),"0000-00-00"),TODAY(),"Y")。
这个组合公式看起来长,但拆开就是三个独立步骤。DATEDIF 的第三个参数“Y”表示返回整年数,换成“M”返回月数,“D”返回天数。注意 DATEDIF 在 WPS 里是隐藏函数,输入时不会有参数提示,但可以直接用。教程里还有用 TODAY 函数计算间隔天数的案例,逻辑类似,只是把结束日期换成 TODAY() 动态获取当天日期。
from datetime import datetime def extract_age(id_number): """从身份证号提取年龄""" birth_str = id_number[6:14] # MID 提取第7-14位 birth_date = datetime.strptime(birth_str, "%Y%m%d") # TEXT 转日期 today = datetime.now() age = today.year - birth_date.year if (today.month, today.day) < (birth_date.month, birth_date.day): age -= 1 # DATEDIF 的整年逻辑 return age print(extract_age("199001011234")) # 根据当前日期输出年龄这段代码把 MID、TEXT、DATEDIF 三个函数的协作过程用 Python 还原了一遍。实际写 WPS 公式时,如果身份证号列有空格或不可见字符,MID 提取会出错,先用 TRIM 或 CLEAN 清理一下。教程里 CLEAN 函数专门讲删除不可打印字符,就是这个用途。
4. 避坑与排查:函数报错、匹配失败、性能卡顿的常见问题
4.1 VLOOKUP 返回 #N/A 的四类原因
#N/A 是 VLOOKUP 最常见的报错,教程里用了四个视频专门讲这个。我按排查优先级列一下。第一类,查找值确实不存在。这是最直接的原因,用 COUNTIF 确认一下查找值在目标列里有没有出现。第二类,两边数据类型不一致。一边是文本格式的数字,一边是数值格式的数字,看起来一样但匹配不上。解决办法是用 VALUE 函数统一转数值,或用 TEXT 函数统一转文本。第三类,查找值或目标列有空格。肉眼看不出来,用 LEN 函数对比字符长度就能发现。第四类,查找区域没有锁定,拖拽后偏移了。检查公式里的区域引用有没有加 $ 符号。
4.2 条件求和结果偏大或偏小的排查
SUMIF 和 SUMIFS 算出来的数不对,通常不是函数本身的问题,而是条件区域和求和区域的行数不一致。比如条件区域选了 A2:A100,求和区域选了 B2:B90,后面 10 行就对不上。另一个常见原因是条件写法有歧义,比如条件是“>100”,但实际数据里有文本型的“100”,会被排除在外。我一般会先用 COUNTIF 统计一下满足条件的单元格数量,和 SUMIF 的结果交叉验证,数量对不上就说明条件有问题。
4.3 大量函数导致表格卡顿的处理
当一个工作表里有几千个 VLOOKUP 或 SUMIFS 时,每次重算都会卡。教程里没有专门讲性能优化,但这是实际使用中绕不开的问题。我的做法是:第一,把已经算好的公式区域复制后“选择性粘贴为数值”,减少实时计算量;第二,用辅助列把复杂的嵌套公式拆成几步,每一步的结果单独存放,最后再汇总;第三,如果数据量确实大,考虑用数据透视表替代部分条件求和公式,透视表的计算引擎比逐行函数快得多。
4.4 日期函数返回意外结果的检查点
DATEDIF 和 TODAY 组合算间隔天数时,如果开始日期晚于结束日期,DATEDIF 会返回 #NUM! 错误。另外,WPS 的日期系统默认是 1900 日期系统,如果表格是从其他系统导入的,日期可能被识别为文本,导致计算结果是 0 或错误值。检查方法是选中日期单元格,看编辑栏里显示的是日期还是文本。如果是文本,用 DATEVALUE 函数转换一下。
5. 进阶技巧:用 SUBTOTAL 和 INDIRECT 处理动态区域
5.1 SUBTOTAL 的 9 和 109 到底差在哪
SUBTOTAL 是教程里比较容易被忽略但实际很实用的函数。它的第一个参数是功能代码,比如 9 代表 SUM,1 代表 AVERAGE,4 代表 MAX。关键在于:9 会把手动隐藏的行也计算进去,109 会忽略手动隐藏的行。如果配合筛选功能使用,筛选掉的行在 9 和 109 下都不会被计算,但手动隐藏的行只有 109 会忽略。这个区别在做报表时很关键,我一般默认用 109,避免手动隐藏的明细行干扰汇总结果。
# 模拟 SUBTOTAL 的 109 逻辑:忽略隐藏行 def subtotal_109(values, hidden_flags): """ values: 数值列表 hidden_flags: 布尔列表,True 表示该行被隐藏 """ total = 0 for v, hidden in zip(values, hidden_flags): if not hidden: # 只累加未隐藏的行 total += v return total amounts = [1200, 850, 2300, 600, 1800] hidden = [False, True, False, False, True] print(subtotal_109(amounts, hidden)) # 输出 5300,忽略了850和18005.2 INDIRECT 实现跨表动态引用
INDIRECT 函数的作用是把文本字符串转换成单元格引用。比如=INDIRECT("Sheet2!A1")等价于=Sheet2!A1。它的进阶用法是配合下拉菜单,实现动态切换引用的工作表。假设有 12 张按月命名的表,在汇总表里做一个下拉菜单选择月份,然后用=INDIRECT(B1&"!A1")就能动态取到对应月份表的 A1 单元格。教程里 INDIRECT 的视频只有 1 分 12 秒,但把这个逻辑讲清楚了。
需要注意的是,INDIRECT 引用的工作表必须存在,否则返回 #REF! 错误。另外,INDIRECT 不能引用已关闭的工作簿,所以跨文件动态引用时,目标文件必须保持打开状态。这个限制在实际使用中经常被忽略,导致公式莫名其妙报错。
5.3 用 EVALUATE 做文本表达式计算
教程里有一个“强大的计算器 EVALUATE 函数”的视频,时长 1 分钟。EVALUATE 在 WPS 里是宏表函数,不能直接在单元格里写,需要定义名称才能用。操作步骤是:选中单元格,在“公式”选项卡里点“定义名称”,名称写“计算”,引用位置写=EVALUATE(Sheet1!$A2),然后在单元格里写=计算,就能把 A2 里的文本表达式(比如“1+2*3”)算出结果。这个技巧在处理一些从系统导出的文本算式时特别有用,但注意 EVALUATE 依赖宏环境,文件保存时要选支持宏的格式。
| 函数 | 适用场景 | 关键参数 | 常见错误 |
|---|---|---|---|
| VLOOKUP | 跨表匹配、精确查找 | 第四参数写 0 | #N/A、区域未锁定 |
| SUMIFS | 多条件求和 | 求和区域放最前 | 区域行数不一致 |
| SUBTOTAL | 筛选后汇总 | 109 忽略隐藏行 | 功能代码写错 |
| INDIRECT | 动态跨表引用 | 文本拼接表名 | 目标表不存在或未打开 |
| DATEDIF | 日期间隔计算 | 第三参数 Y/M/D | 开始日期晚于结束日期 |
这套教程的价值不在于每个函数都讲得有多深,而在于它把 374 个实例按函数类型铺开了,遇到具体问题时能快速定位到对应的短视频。我的习惯是:先把 VLOOKUP、IF、SUMIF、SUMIFS 这四个高频函数的视频过一遍,动手在自己的数据上复现一遍;然后把 #N/A 排查的四个视频看完,把常见的匹配失败原因记下来;最后按需查漏补缺,遇到哪个函数不会就搜哪个。从那以后我每次写跨表公式,都强制先检查查找区域有没有锁定、两边数据类型是否一致,这两个检查点帮我省掉了大量返工时间。希望帮到你。
本文还有配套的精品资源,点击获取