VBA知识点大全-日常分享

VBA 实战:从数据处理到自动化办公的高效解决方案

在日常办公中,Excel 的 VBA(Visual Basic for Applications)功能如同隐藏的 “效率加速器”,能将重复繁琐的操作转化为一键执行的自动化流程。下面通过两个典型案例,带大家领略 VBA 的实战魅力

案例一:批量数据清洗与格式标准化

某电商运营人员需要处理上万条订单数据,要求将分散在不同工作表的客户信息整合,并对手机号、邮箱等字段进行格式校验。传统手动操作不仅耗时,还容易出错。利用 VBA 编写数据整合程序,能大幅提升效率。

Sub 数据整合与清洗()    '定义变量    Dim ws As Worksheet, newWs As Worksheet    Dim lastRow As Long, i As Long    Dim phoneRegex As Object, emailRegex As Object    '创建正则表达式对象    Set phoneRegex = CreateObject("VBScript.RegExp")    Set emailRegex = CreateObject("VBScript.RegExp")    '设置手机号正则规则(以1开头的11位数字)    With phoneRegex        .Pattern = "^1\d{10}$"        .Global = False    End With    '设置邮箱正则规则    With emailRegex        .Pattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"        .Global = False    End With    '检查是否存在"清洗后数据"工作表,不存在则创建    On Error Resume Next    Set newWs = ThisWorkbook.Worksheets("清洗后数据")    If newWs Is Nothing Then        Set newWs = ThisWorkbook.Worksheets.Add        newWs.Name = "清洗后数据"    End If    On Error GoTo 0    '表头设置    newWs.Range("A1").Value = "姓名"    newWs.Range("B1").Value = "手机号"    newWs.Range("C1").Value = "邮箱"    newWs.Range("D1").Value = "订单金额"    '遍历所有工作表(除了目标工作表)    For Each ws In ThisWorkbook.Worksheets        If ws.Name <> "清洗后数据" Then            lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row            '从第2行开始处理数据(假设第1行是表头)            For i = 2 To lastRow                '跳过空行                If ws.Range("A" & i).Value <> "" Then                    newWs.Cells(newWs.Rows.Count, "A").End(xlUp).Offset(1, 0).Value = ws.Range("A" & i).Value                    '校验手机号格式                    If phoneRegex.Test(ws.Range("B" & i).Value) Then                        newWs.Cells(newWs.Rows.Count, "B").End(xlUp).Value = ws.Range("B" & i).Value                    Else                        newWs.Cells(newWs.Rows.Count, "B").End(xlUp).Value = "格式错误"                    End If                    '校验邮箱格式                    If emailRegex.Test(ws.Range("C" & i).Value) Then                        newWs.Cells(newWs.Rows.Count, "C").End(xlUp).Value = ws.Range("C" & i).Value                    Else                        newWs.Cells(newWs.Rows.Count, "C").End(xlUp).Value = "格式错误"                    End If                    '处理订单金额,保留两位小数                    newWs.Cells(newWs.Rows.Count, "D").End(xlUp).Value = Round(ws.Range("D" & i).Value, 2)                End If            Next i        End If    Next ws    '美化表格格式    With newWs.Range("A1:D" & newWs.Cells(newWs.Rows.Count, "A").End(xlUp).Row)        .Borders.LineStyle = xlContinuous        .HorizontalAlignment = xlCenter        .VerticalAlignment = xlCenter        .Font.Bold = True    End With    MsgBox "数据整合与清洗完成!", vbInformationEnd Sub

案例二:自动化生成月度报告

财务人员每月需根据 Excel 数据生成 PDF 格式的财务报告,包含数据汇总表、趋势图表和文字分析。通过 VBA 编程,可实现数据更新后一键生成完整报告。

Sub 生成月度财务报告()    '定义变量    Dim wsData As Worksheet, wsReport As Worksheet    Dim chartObj As ChartObject    Dim pdfPath As String    '设置数据工作表和报告工作表    Set wsData = ThisWorkbook.Worksheets("财务数据")    Set wsReport = ThisWorkbook.Worksheets("月度报告")    '更新数据汇总表    UpdateSummaryTable wsData, wsReport    '更新趋势图表    UpdateTrendCharts wsData, wsReport    '添加文字分析(可根据实际数据动态生成)    AddAnalysisText wsReport    '设置PDF保存路径    pdfPath = ThisWorkbook.Path & "\" & "月度财务报告_" & Format(Now, "yyyyMM") & ".pdf"    '导出为PDF    wsReport.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath, _        Quality:=xlQualityStandard, IncludeDocProperties:=True, _        IgnorePrintAreas:=False, OpenAfterPublish:=False    MsgBox "月度财务报告已生成至:" & vbCrLf & pdfPath, vbInformationEnd Sub'更新数据汇总表Sub UpdateSummaryTable(wsData As Worksheet, wsReport As Worksheet)    '这里编写数据汇总逻辑,例如求和、平均值等计算    '假设数据在wsData的A列到D列,从第2行开始    Dim lastRow As Long    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row    '计算总收入    wsReport.Range("B3").Value = WorksheetFunction.Sum(wsData.Range("D2:D" & lastRow))    '计算支出合计    wsReport.Range("B4").Value = WorksheetFunction.Sum(wsData.Range("C2:C" & lastRow))    '计算利润    wsReport.Range("B5").Value = wsReport.Range("B3").Value - wsReport.Range("B4").ValueEnd Sub'更新趋势图表Sub UpdateTrendCharts(wsData As Worksheet, wsReport As Worksheet)    '假设图表已存在,更新数据源    Dim chartObj As ChartObject    Set chartObj = wsReport.ChartObjects("收入趋势图")    '设置图表数据源(假设日期在A列,收入在D列)    Dim lastRow As Long    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row    chartObj.Chart.SetSourceData Source:=wsData.Range("A1:A" & lastRow & ",D1:D" & lastRow)End Sub'添加文字分析Sub AddAnalysisText(wsReport As Worksheet)    '根据数据动态生成分析文字    Dim profit As Double    profit = wsReport.Range("B5").Value    wsReport.Range("B8").Value = "本月财务分析:"    wsReport.Range("B9").Value = "本月总收入为" & Format(wsReport.Range("B3").Value, "¥0.00") & ",总支出为" & Format(wsReport.Range("B4").Value, "¥0.00") & "。"    If profit > 0 Then        wsReport.Range("B10").Value = "本月实现盈利" & Format(profit, "¥0.00") & ",经营状况良好。"    Else        wsReport.Range("B10").Value = "本月亏损" & Format(Abs(profit), "¥0.00") & ",需关注成本控制。"    End If
End Sub

投票知识是否有用?(2选1)
  • 非常有用 2
  • 没用 2
4人参与 投票已截止
广东省
浏览 140
收藏
5
分享
5 +1
2
+1
全部评论 2
 
能不能把格式优化一下呢 这一坨怎么看?
· 广东省
回复
 
王禹成

创作者俱乐部成员

有可以配套练习的源文件吗
· 浙江省
回复