Excel VBA会被淘汰吗?这些场景无可替代!
一句话核心价值点:教你用短小精悍的VBA,解决函数和透视表搞不定的重复活儿,让2026年的办公效率翻倍,轻松又好玩。
目录
批量改名表,省下半小时
场景:每月做部门报表,12张表要按“2026年1月-销售部”格式重命名,手动改到眼花还易错。
VBA代码(15行):
Sub 批量改表名() Dim ws As Worksheet, i As Integer For i = 1 To Worksheets.Count Set ws = Worksheets(i) ws.Name = "2026年" & i & "月-" & ws.Range("A1").Value Next i MsgBox "表名已换成2026年月+部门格式!"End Sub
原理:用For循环遍历所有工作表,Worksheets.Count知道有几张表,ws.Range("A1")抓每张表A1的部门名,拼成新名字直接赋值给ws.Name。函数和透视表只能改单张表名,没法按规律批量动,VBA像请了个自动盖章员,唰唰全换好。
跨表抓数,不怕结构乱
场景:要从12个月的业绩表(有的列顺序不同)里抓“张三”的销售额,函数得每个表写一遍,结构一变就失效。
VBA代码(18行):
Sub 跨表抓业绩() Dim ws As Worksheet, tarWs As Worksheet, rng As Range Set tarWs = Worksheets("汇总") For Each ws In Worksheets If ws.Name <> "汇总" Then Set rng = ws.UsedRange.Find("张三", , xlValues) If Not rng Is Nothing Then tarWs.Cells(tarWs.Rows.Count, 1).End(xlUp).Offset(1) = _ ws.Name & ":" & rng.EntireRow.Cells(3).Value End If End If Next ws MsgBox "张三的业绩已从各表抓齐!"End Sub
原理:Find方法像侦探找“张三”,不管他在哪列都能定位;EntireRow.Cells(3)取所在行的第3列值(假设是销售额)。函数和透视表依赖固定列号,结构一乱就歇菜,VBA能按内容找,像带了灵活扫描仪,乱表也不怕。
智能填序,规则随心变
场景:要给订单按“地区+优先级”排序号,比如“华北-A001”“华南-B002”,函数要嵌套多层,改规则得重写。
VBA代码(20行):
Sub 智能填序号() Dim ws As Worksheet, lastRow As Long, i As Long Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row For i = 2 To lastRow ws.Cells(i, 4) = ws.Cells(i, 1) & "-" & ws.Cells(i, 2) & _ Format(i - 1, "000") Next i MsgBox "序号已按地区+优先级+流水生成!"End Sub
原理:Format(i - 1, "000")把数字变成三位码(001、002),&拼接地区(A1)、优先级(B1)和序号。函数嵌套多了会卡,改规则要拆公式,VBA像调饮料配方,换个原料(规则)改一行就行,灵活得像变形金刚。
一键排版,表格秒变整齐
场景:导出的数据歪歪扭扭,列宽不一、字体乱,手动调要逐列拉,几十列能调出腱鞘炎。
VBA代码(22行):
Sub 一键排版() With ActiveSheet.UsedRange .Columns.AutoFit '自动调列宽 .HorizontalAlignment = xlCenter '水平居中 .Font.Name = "微软雅黑" '统一字体 .Font.Size = 10 '统一字号 .Rows.RowHeight = 18 '统一行高 .Borders.LineStyle = xlContinuous '加边框 End With MsgBox "表格已排得整整齐齐!"End Sub
原理:AutoFit让列宽刚好装下内容,With语句一口气设对齐、字体、行高、边框。透视表能调样式但改不了单格细节,函数根本碰不到格式,VBA像请了专业美工,点一下就给表格穿西装打领带。
循环发邮件,告别复制苦
场景:要给50个客户发个性化邮件,正文要插各自订单号,手动复制粘贴到手软,还易发错。
VBA代码(28行):
Sub 循环发邮件() Dim olApp As Object, olMail As Object, ws As Worksheet Set olApp = CreateObject("Outlook.Application") Set ws = Worksheets("客户表") For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row Set olMail = olApp.CreateItem(0) With olMail .To = ws.Cells(i, 2).Value .Subject = "2026年1月订单通知-" & ws.Cells(i, 1).Value .Body = "您好" & ws.Cells(i, 1).Value & ",您的订单号是" & _ ws.Cells(i, 3).Value & ",请注意查收。" .Send End With Next i MsgBox "50封邮件已按客户信息发出!"End Sub
原理:CreateObject("Outlook.Application")调用邮箱,For循环读客户表的姓名、邮箱、订单号,自动填到邮件里发送。函数和透视表连邮箱边都碰不着,VBA像配了私人秘书,批量发还不丢个性。
动态筛选导出,精准拿结果
场景:要从10万行数据里筛“2026年Q1+金额>1万”的记录,函数筛完复制慢,透视表导出还得再整理。
VBA代码(25行):
Sub 动态筛选导出() Dim wsData As Worksheet, wsTar As Worksheet, rng As Range Set wsData = Worksheets("数据") Set wsTar = Worksheets.Add Set rng = wsData.UsedRange rng.AutoFilter Field:=1, Criteria1:=">=2026-01-01", Operator:=xlAnd, Criteria2:="<=2026-03-31" rng.AutoFilter Field:=3, Criteria1:=">10000" rng.SpecialCells(xlCellTypeVisible).Copy wsTar.Range("A1") wsData.AutoFilterMode = False MsgBox "Q1大额数据已导出到新表!"End Sub
原理:AutoFilter按条件筛日期和金额,SpecialCells(xlCellTypeVisible)只复制看得见的内容,避免把隐藏行带进去。函数和透视表筛完得手动拷,VBA像装了精准过滤器,筛完直接落新表,干净利落。
金句:
- • 函数和透视表是工具,VBA是把工具连成生产线的巧手。
- • 重复活儿交给VBA,你才有空喝杯茶想更好的招。
- • 不是VBA不会老,是它专啃那些别人啃不动的硬骨头。
2026年了,表格里的麻烦事只会多不会少,函数和透视表能帮基础忙,但碰到要“批量动、跨表找、灵活变、自动排、循环发、精准筛”的场景,VBA还是那个能帮你省时间的好搭档。别怕代码,10行就能开干,每天试一个小场景,你会发现办公也能玩出节奏感。
更多干货点我头像进主页,每天更新
总结
- 1. VBA核心优势在于解决批量操作、跨表处理、灵活规则调整类的办公场景,是函数和透视表无法替代的;
- 2. 文中6个实用VBA代码覆盖了表格重命名、数据抓取、格式排版、邮件发送等高频办公需求,代码简洁且可直接复用;
- 3. 2026年VBA仍有不可替代的价值,核心是能将重复的机械操作自动化,大幅提升办公效率。