当前位置:首页>java>三年VBA经验总结:这些思维比代码更重要

三年VBA经验总结:这些思维比代码更重要

  • 2026-10-21 13:28:19
三年VBA经验总结:这些思维比代码更重要
点击上方蓝字关注VBA应用大全
畅享Excel中的VBA应用技术

原创作者:李锐

微信公众号:VBA应用大全(VbaApp)

微信服务号:跟李锐学Excel(LiRuiExcel)

三年VBA经验总结:这些思维比代码更重要

一句话核心价值点:
让零基础也能用短小VBA思维,把表格里那些磨人的重复活儿一次办妥,比函数公式更灵活,比数据透视表更能打通关。

目录

  • • 批量改名省时又防手滑
  • • 多表合并快过复制粘贴
  • • 动态筛选免反复设条件
  • • 自动发邮件解放盯屏眼
  • • 智能排班拒绝人工试错
  • • 跨簿搬数不怕路径迷路

批量改名省时又防手滑

办公室常遇到:几十个文件要统一加前缀或后缀,手工改容易漏、还怕点错。函数改不了文件名,透视表更管不到文件系统,VBA能直接跟电脑对话。

Sub 批量改名()
    Dim 路径 As String, 文件 As String
    路径 = "C:\报表\"          '改成你的文件夹
    文件 = Dir(路径 & "*.xlsx")
    Do While 文件 <> ""
        Name 路径 & 文件 As 路径 & "2026_" & 文件
        文件 = Dir
    Loop
    MsgBox "搞定,名字都加了2026_"
End Sub

原理很简单:先用Dir找指定文件夹里的文件,Name直接改名,循环到没文件为止。这样不管多少文件,一秒批量加标记,不怕手抖改错一个全盘重来。改名字这种事,VBA就像请了个细心的助理,稳准快。

多表合并快过复制粘贴

每月各部门交来的表结构一样,要把它们摞一起做总表。手动复制粘贴慢又易错位,函数只能引用单表,透视表得先整合数据源。VBA可自动遍历工作表并拼数据。

Sub 多表合并()
    Dim 汇总 As Worksheet, ws As Worksheet
    Dim 最后行 As Long, 目标行 As Long
    Set 汇总 = Sheets("总表")
    汇总.Cells.Clear
    目标行 = 1
    For Each ws In Worksheets
        If ws.Name <> "总表" Then
            最后行 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
            ws.Range("A1:A" & 最后行).EntireRow.Copy _
                汇总.Range("A" & 目标行)
            目标行 = 汇总.Cells(汇总.Rows.Count, 1).End(xlUp).Row + 1
        End If
    Next
    MsgBox "全表已抱团到总表"
End Sub

原理:循环所有工作表,挑出不是“总表”的,把整行数据拷过去,再挪指针接下一堆。无论十张还是五十张表,几秒完成,列对列整整齐齐。VBA干这事像玩积木,咔嗒一声全垒起来。

动态筛选免反复设条件

领导常临时要看不同片区或日期的数据,每次手动筛太烦,函数做不了交互式刷选,透视表虽可切片但切换不够随心。VBA能让按钮一按就换结果。

Sub 动态筛选()
    Dim 区域 As Range
    Set 区域 = Sheets("数据").Range("A1:D1000")
    With 区域.AutoFilter
        .Field := 2, Criteria1:="华东区"   '第2列是片区
        .Field := 4, Criteria1:=">=2026/1/1", Operator:=xlAnd, Criteria2:="<=2026/1/31"
    End With
    MsgBox "只看华东区一月数据"
End Sub

原理:AutoFilter直接给区域加筛选条件,想换片区或时间,只改Criteria1就行。点一下运行,符合条件的行立刻现身,像给数据装了变色镜,指哪看哪。

自动发邮件解放盯屏眼

月底要把业绩表分别发不同同事,收件人和附件不一样,手工一封封发眼睛都花。函数发不了邮件,透视表更是局外人。VBA调用邮箱直接批量派送。

Sub 自动发邮件()
    Dim olApp As Object, olMail As Object
    Dim 收件人 As Variant, i As Integer
    收件人 = Array("a@co.com", "b@co.com", "c@co.com")
    Set olApp = CreateObject("Outlook.Application")
    For i = 0 To UBound(收件人)
        Set olMail = olApp.CreateItem(0)
        With olMail
            .To = 收件人(i)
            .Subject = "2026年1月业绩表"
            .Body = "Hi,附件是本月数据,请查收。"
            .Attachments.Add "C:\报表\2026_业绩.xlsx"
            .Send
        End With
    Next
    MsgBox "邮件已悄悄出门"
End Sub

原理:借Outlook对象建邮件,循环收件人列表填地址、主题、正文和附件,一发到底。不用守着屏幕点发送,VBA像邮差,按名单挨家送信。

智能排班拒绝人工试错

安排小组轮班要考虑人员、休息日、工时上限,人工排常撞车返工。函数难做复杂约束,透视表只能看不能生方案。VBA可按规则自动生成排班表。

Sub 智能排班()
    Dim 排班 As Worksheet, 名单 As Variant, i As Integer, j As Integer
    Set 排班 = Sheets("排班")
    名单 = Array("张三", "李四", "王五", "赵六")
    For i = 1 To 7
        排班.Cells(1, i + 1).Value = "周" & i
        For j = 0 To 3
            排班.Cells(j + 2, i + 1).Value = 名单((i + j - 1) Mod 4)
        Next j
    Next i
    MsgBox "一周排班已均衡出炉"
End Sub

原理:用数组存人名,按星期循环分配,取模运算保证每人间隔出场。规则写进代码,排班像下棋有套路,不怕漏人也不怕累死某位同事。

跨簿搬数不怕路径迷路

有时要从多个外部文件抓固定位置数据,路径一长手输易错,函数只能引同一簿,透视表数据源要先整合好。VBA能按路径直取数据块。

Sub 跨簿搬数()
    Dim wb As Workbook, 源路径 As String
    源路径 = "C:\数据\2026_分部1.xlsx"
    Set wb = Workbooks.Open(源路径)
    wb.Sheets(1).Range("B2:B20").Copy _
        ThisWorkbook.Sheets("主表").Range("D2")
    wb.Close False
    MsgBox "外埠数据已安家"
End Sub

原理:Workbooks.Open打开指定文件,拷完即关,不怕路径长或文件名复杂。跨簿取数像快递直达,不用中转绕路。

金句拾萃

  • • 函数是静态画笔,VBA是能动的手,画完还能改。
  • • 透视表善归纳,VBA善跑腿,分工合作才高效。
  • • 与其重复点击百遍,不如让VBA替你点一次。
  • • 学VBA不是背咒语,是学会让电脑听懂你的工作节奏。
  • • 短代码像钥匙,思维才是知道锁在哪的地图。

VBA的魅力不在长串语法,而在把散乱操作用逻辑串成自动流,让重复有终点、琐碎有解法。哪怕只省下每日三分钟,一年也能多出一趟短途旅行的时间。试着让代码替你跑腿,你会发现办公也能轻快得像散步。

更多干货点我头像进主页,每天更新


好啦,今天就讲到这里吧,明天继续:)
希望这篇教程能够帮到你,体系化视频课程↓

原创作者: 李锐

微信公众号:VBA应用大全(VbaApp)

干货教程 · 信息分享

点击下方“阅读原文”进入知识店铺
↓↓↓查看全部Excel特训营,系统、全面、快速提升!

最新文章

随机文章