一、概述
VBA是Microsoft Office套件中的一种内嵌式编程语言,能够通过宏自动化执行Excel任务。本实例源代码展示了如何编程获取Excel中指定单元格区域的内容、行号,这对于自动化数据处理和执行复杂计算非常有用。通过本实例,用户可以掌握如何利用VBA的ThisWorkbook、Cells、Range对象,并通过示例宏代码来实现这一功能。此外,实例还说明了如何使用这些行号来执行如筛选、计算等进一步的操作。
二、开启宏代码编辑器
启动微软exel软件,在空白页面按:Alt + F11,进入宏代码编辑器界面
三、新建模块
在左上角“VBAProject”上点右键,选择:插入》模块
四、编写代码
在右边窗口编辑代码,代码功能详见注释。
' step 1.在EXCEL编辑窗口中按Alt+F11打开宏代码编辑器
' step 2.菜单“插入 -> 模块”
' step 3.编写代码
Sub MergeAndAnalyzeExcelFiles()
' 定义变量
Dim folderPath As String
Dim fileName As String
Dim masterWorkbook As Workbook
Dim sourceWorkbook As Workbook
Dim masterSheet As Worksheet
Dim dataSheet As Worksheet
Dim lastRow As Long
Dim outputRow As Long
Dim i As Integer
' 选择工作簿
Set masterWorkbook = ThisWorkbook
Set masterSheet = masterWorkbook.Sheets(1)
' 清空旧数据
masterSheet.Cells.ClearContents
' 设置表头
masterSheet.Cells(1, 1).Value = "姓名"
masterSheet.Cells(1, 2).Value = "出差天数"
masterSheet.Cells(1, 3).Value = "本月绩效系数"
masterSheet.Cells(1, 4).Value = "绩效比例"
' 数据写入开始行号
outputRow = 2
' 选择数据文件所在目录
folderPath = ThisWorkbook.Path + "\"
Set shellApp = CreateObject("Shell.Application")
Set folder = shellApp.BrowseForFolder(0, "请选择文件夹", 0, ThisWorkbook.Path)
If Not folder Is Nothing Then
folderPath = folder.Self.Path + "\"
Else
MsgBox "用户取消了选择"
Exit Sub
End If
' 清理临时对象
Set shellApp = Nothing
' 获取第一个Excel数据文件
fileName = Dir(folderPath & "*.xls*")
' 遍历文件夹内所有Excel数据文件
Do While fileName <> ""
If fileName <> ThisWorkbook.Name Then
Set sourceWorkbook = Workbooks.Open(folderPath & fileName)
Set dataSheet = sourceWorkbook.Sheets(1) ' 数据在第一个工作簿
' 找到工作簿最后一行的行号
lastRow = dataSheet.Cells(dataSheet.Rows.Count, 1).End(xlUp).Row
' 遍历表格找到 姓名、出差天数、本月绩效系数
For i = 1 To lastRow
' 获取当前行第1列的数据
Dim dataValue As String
dataValue = dataSheet.Cells(i, 1).Value
dataValue = Replace(dataValue, " ", "")
dataValue = Replace(dataValue, " ", "")
' 判断并复制 姓名 到统计表中
If dataValue = "姓名" Then
masterSheet.Cells(outputRow, 1).Value = dataSheet.Cells(2, 2).Value
End If
' 判断并复制 出差天数 到统计表中
If dataValue = "出差天数" Then
masterSheet.Cells(outputRow, 2).Value = dataSheet.Cells(i, 2).Value
End If
' 判断并复制 出差天数 到统计表中
If dataValue = "本月绩效系数" Or dataValue = "绩效系数" Then
masterSheet.Cells(outputRow, 3).Value = dataSheet.Cells(i, 2).Value
End If
Next i
outputRow = outputRow + 1
sourceWorkbook.Close SaveChanges:=False
End If
' 获取下一个EXCEL数据文件
fileName = Dir()
Loop
' 生成合计数据
masterSheet.Cells(outputRow + 1, 1).Value = "合计"
Dim totalValue As Double
totalValue = Application.WorksheetFunction.Sum(masterSheet.Range("B2:B" & outputRow - 1))
masterSheet.Cells(outputRow + 1, 2).Value = totalValue
totalValue = Application.WorksheetFunction.Sum(masterSheet.Range("C2:C" & outputRow - 1))
masterSheet.Cells(outputRow + 1, 3).Value = totalValue
' 设置绩效比例
For i = 2 To outputRow - 1
masterSheet.Cells(i, "D").Value = masterSheet.Cells(i, 3).Value / totalValue
Next i
' 设置以%形式显示比例数据
Range("D2:D" & outputRow + 1).NumberFormat = "0.00%"
MsgBox "数据处理完成!共处理 " & outputRow - 2 & " 条记录"
End Sub
五、运行宏代码
①关闭宏代码编辑器,返回excel编辑页面
②按:Alt + F8,选择要执行的宏代码,点“执行”