一、基础操作代码
1. 单元格操作
' 读写单元格值
Range("A1").Value = "数据" ' 写入值
MsgBox Range("A1").Value ' 读取值
' 批量填充公式
Range("B1:B10").Formula = "=A1*2"
' 合并单元格
Range("A1:C1").Merge
2. 工作表操作
' 新增工作表
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "新表"
' 删除工作表
Application.DisplayAlerts = False ' 关闭警告
Sheets("旧表").Delete
Application.DisplayAlerts = True
' 隐藏/显示工作表
Sheets("Sheet1").Visible = xlSheetHidden ' 隐藏
Sheets("Sheet1").Visible = xlSheetVisible ' 显示
二、数据处理与算法
1. 数据清洗
' 删除空行
Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
' 去重复值
Range("A1:C100").RemoveDuplicates Columns:=Array(1,2), Header:=xlYes
2. 数据查找与匹配
' VLOOKUP 替代方案
Dim result As Variant
result = Application.VLookup(Range("A1"), Range("D1:F100"), 3, False)
If Not IsError(result) Then Range("B1").Value = result
3. 数组高效计算
Dim arrData() As Variant
arrData = Range("A1:C100").Value ' 将数据读入数组
For i = 1 To UBound(arrData)
arrData(i, 3) = arrData(i, 1) * arrData(i, 2) ' 数组运算
Next i
Range("A1:C100").Value = arrData ' 写回单元格
三、高级自动化
1. 文件批量处理
Sub MergeCSVFiles()
Dim path As String, fileName As String
path = "C:\data\*.csv"
fileName = Dir(path)
Do While fileName <> ""
Workbooks.Open fileName:=path & fileName
' 复制数据到汇总表...
fileName = Dir()
Loop
End Sub
2. 发送邮件
Sub SendEmail()
Dim OutlookApp As Object, Mail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set Mail = OutlookApp.CreateItem(0)
With Mail
.To = "test@example.com"
.Subject = "Excel 报表"
.Body = "请查收附件。"
.Attachments.Add ThisWorkbook.FullName
.Send
End With
End Sub
四、用户交互界面
1. 输入框 (InputBox)
Dim userInput As String
userInput = InputBox("请输入内容:")
If userInput <> "" Then Range("A1").Value = userInput
2. 自定义窗体 (UserForm)
' 创建 UserForm 并添加按钮、文本框等控件
' 按钮点击事件示例:
Private Sub CommandButton1_Click()
Sheets("Sheet1").Range("A1").Value = TextBox1.Text
Unload Me
End Sub
五、系统级控制
1. 注册表操作(谨慎使用)
' 读取注册表
Dim regValue As String
regValue = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Version")
2. API 调用(高级)
' 调用 Windows API 弹窗
Private Declare PtrSafe Function MessageBox Lib "user32" Alias "MessageBoxA" _
(ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long
Sub ShowAPIMsg()
MessageBox 0, "这是 API 弹窗", "提示", 64
End Sub
六、实战案例模板
1. 自动化报表生成器
Sub GenerateReport()
' 1. 数据清洗
Sheets("原始数据").Range("A1:F1000").RemoveDuplicates Columns:=1, Header:=xlYes
' 2. 计算指标
Sheets("汇总").Range("B2").Formula = "=SUM(原始数据!C:C)"
' 3. 生成图表
Charts.Add
ActiveChart.SetSourceData Source:=Sheets("汇总").Range("A1:B10")
' 4. 导出为 PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Report.pdf"
End Sub
七、调试与优化
1. 错误处理
Sub SafeRun()
On Error GoTo ErrorHandler
' 主代码逻辑
Exit Sub
ErrorHandler:
MsgBox "错误号: " & Err.Number & vbCrLf & "描述: " & Err.Description
' 恢复现场或记录日志
End Sub
2. 性能优化
Sub FastRun()
Application.ScreenUpdating = False ' 关闭屏幕刷新
Application.Calculation = xlCalculationManual ' 手动计算
' 执行代码...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
学习资源推荐
1. 官方文档:Microsoft VBA 文档(
https://docs.microsoft.com/zh-cn/office/vba/api/overview/excel)
2. 书籍:《Excel VBA 编程实战宝典》
3. 论坛:ExcelHome(http://www.excelhome.net/) 或 Stack Overflow(
https://stackoverflow.com/)