良哥分享:手把手教你写office宏代码

一、概述

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,选择要执行的宏代码,点“执行”
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值