原创作者:李锐
微信公众号:VBA应用大全(VbaApp)
一句话核心价值点:把零散的VBA代码拆成好用的“积木块”,让2026年还在跟表格死磕的职场人,重复操作一键顺、长代码不抓瞎,零基础也能搭出清晰好改的效率工具。
场景槽点:每月底要把销售部、市场部等8个分表业绩贴到总表,手动复制粘贴常漏行、列错位,2026年了还因汇总错被主管问“昨晚又熬夜了?”
VBA代码:
Sub 合并指定表区域() Dim 总表 As Worksheet, 分表 As Worksheet Dim 总表Rng As Range, 分表Rng As Range Set 总表 = Worksheets("总表") '模块1:清总表旧数据 Set 总表Rng = 总表.Range("A2:D" & 总表.Cells(总表.Rows.Count, "A").End(xlUp).Row) 总表Rng.ClearContents '模块2:循环加各分表数据 For Each 分表 In Worksheets(Array("销售部", "市场部", "运营部", "客服部")) Set 分表Rng = 分表.Range("A2:D" & 分表.Cells(分表.Rows.Count, "A").End(xlUp).Row) 分表Rng.Copy 总表.Cells(总表.Cells(总表.Rows.Count, "A").End(xlUp).Row + 1, "A") Next 分表 MsgBox "2026年1月汇总完成,没漏吧?"End Sub原理唠嗑:把“清旧数据”“加新数据”拆成俩模块,像拼乐高先搭底座再叠块。循环Worksheets(Array())精准抓指定表,不用全扫一遍;Cells(Rows.Count,"A").End(xlUp)找最后一行,自动适配数据量。分块后改某步(比如加财务部)只改模块2里的表名,不用动整串代码,汇总再也不慌。
场景槽点:做2026年Q1部门周报表,10个表要统一“标题加粗+行高20+列宽12”,手动刷到第5个表手酸,还总忘调某列宽度,主管看表皱眉头。
VBA代码:
Sub 统一多表格式() Dim ws As Worksheet '模块1:定义格式标准 Dim 标题格式 As Variant: 标题格式 = Array(True, 20, 12) '加粗、行高、列宽 '模块2:循环套格式到目标表 For Each ws In Worksheets(Array("周报1", "周报2", "周报3", "周报4", "周报5")) With ws .Rows(1).Font.Bold = 标题格式(0) '标题加粗 .Rows.RowHeight = 标题格式(1) '所有行高20 .Columns.ColumnWidth = 标题格式(2) '所有列宽12 End With Next ws MsgBox "Q1周报表格式齐活,2026年的整齐从格式开始~"End Sub原理唠嗑:把“格式参数”“套格式动作”封成模块,改格式只动标题格式数组——想换行高25就改第二个数,不用翻遍代码找RowHeight。循环指定表避免动无关表,像给一群人发统一工服,尺寸提前定好,一套就齐,比手动刷快10倍还不犯错。
场景槽点:2026年客户信息表沾了“空格”“重复项”“手机号少位”,手动删空格要逐列选,去重怕误删,改完一检查还有漏,耗一下午。
VBA代码:
Sub 一键洗数据() Dim ws As Worksheet Set ws = Worksheets("客户信息") '模块1:清空格 ws.Cells.Replace What:=" ", Replacement:="", LookAt:=xlPart '模块2:去重复 ws.Range("A:D").RemoveDuplicates Columns:=Array(1, 2, 3, 4), Header:=xlYes '模块3:补手机号位数 Dim rng As Range, cell As Range Set rng = ws.Range("D2:D" & ws.Cells(ws.Rows.Count, "D").End(xlUp).Row) For Each cell In rng If Len(cell.Value) < 11 Then cell.Value = String(11 - Len(cell.Value), "0") & cell.Value Next cell MsgBox "客户信息洗干净了,2026年不用再跟脏数据较劲!"End Sub原理唠嗑:把“清空格”“去重”“补位数”拆成独立模块,像洗水果先泡再冲最后削皮。替换空格用Cells.Replace全表扫,去重指定列避免删错关联数据,补位数用Len查长度、String补0。步骤分开改某步(比如补12位号)只动模块3,不用重写,清洗效率翻几番。
场景槽点:做2026年库存动态查询,输入产品名要实时显库存/入库/出库,函数得嵌套一堆INDEX+MATCH,慢还常#N/A,数据透视表改筛选就崩。
VBA代码:
Sub 动态查库存() Dim wsData As Worksheet, wsQuery As Worksheet Dim key As String, lastRow As Long, i As Long Set wsData = Worksheets("库存数据") Set wsQuery = Worksheets("查询页") key = wsQuery.Range("B1").Value '输入框产品名 lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row '模块1:找匹配行 For i = 2 To lastRow If wsData.Cells(i, "A").Value = key Then '模块2:填查询结果 wsQuery.Range("B2") = wsData.Cells(i, "B").Value '库存 wsQuery.Range("B3") = wsData.Cells(i, "C").Value '入库 wsQuery.Range("B4") = wsData.Cells(i, "D").Value '出库 Exit For End If Next i If i > lastRow Then MsgBox "2026年没找到这产品哦~"End Sub原理唠嗑:VBA能直接抓单元格值、循环比对,比函数灵活——函数要固定列,VBA可按需取任意列;数据透视表依赖预结构,VBA能实时读最新数据。把“找行”“填结果”分模块,改查询列(比如加供应商)只扩模块2的赋值,不用重构,动态查询稳得像定海神针。
场景槽点:2026年要给500份合同标“到期提醒”,手动标要逐个看日期算天数,漏标还得返工,函数得写超长IF,自己都看不懂。
VBA代码:
Sub 批量标到期提醒() Dim ws As Worksheet Set ws = Worksheets("合同列表") Dim lastRow As Long, i As Long, daysLeft As Integer lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '模块1:算剩余天数 For i = 2 To lastRow daysLeft = ws.Cells(i, "C").Value - Date 'C列是到期日 '模块2:按天数标颜色 Select Case daysLeft Case Is < 0: ws.Cells(i, "D").Value = "已过期": ws.Cells(i, "D").Interior.Color = RGB(255, 0, 0) Case 0 To 7: ws.Cells(i, "D").Value = "本周到期": ws.Cells(i, "D").Interior.Color = RGB(255, 255, 0) Case 8 To 30: ws.Cells(i, "D").Value = "本月到期": ws.Cells(i, "D").Interior.Color = RGB(0, 255, 0) Case Else: ws.Cells(i, "D").Value = "正常" End Select Next i MsgBox "500份合同标完,2026年到期管理不用愁!"End Sub原理唠嗑:把“算天数”“标状态”拆模块,像做饭先切菜再炒菜。Date取当天,Select Case按区间判状态,比IF嵌套清楚10倍。顺序执行模块,改提醒天数(比如15天内标黄)只改Case 0 To 7的范围,批量操作有条理,再也不会漏标。
学VBA别贪多,把常用动作封成模块,今天加个汇总块,明天加个格式块,慢慢攒出自己的“效率工具箱”。零基础也能一步步搭出清晰代码,2026年的办公,咱们用“搭积木”的思路搞定重复活~
更多干货点我头像进主页,每天更新


原创作者: 李锐
微信公众号:VBA应用大全(VbaApp)

干货教程 · 信息分享
