面是一个VBA宏示例,用于处理Excel中的数据。这个宏会遍历工作表中的每一行,从第三行开始,将指定的列(I, J, K, L, M, N, O)的值相加,并将结果填写到P列。同时,它会识别B列中的模块,并将同一模块的P列值累加到Q列中。
时间: 2024-09-18 11:02:46 浏览: 29
这是一个简单的VBA宏示例,适用于Microsoft Excel工作簿。该宏的工作流程如下:
```vba
Sub SumRowsAndGroupByModule()
Dim ws As Worksheet ' 工作表对象
Set ws = ThisWorkbook.Worksheets("Sheet1") ' 假设默认工作表名为"Sheet1"
Dim startRow As Long ' 开始遍历的行数
startRow = 3 ' 从第三行开始
Dim dataColumns As Variant ' 存放需要相加的列数组
dataColumns = Array(10, 11, 12, 13, 14, 15) ' 对应于I-J-N-O列
Dim totalCol As Long ' P列的索引
totalCol = 16 ' P列通常对应索引16
Dim moduleCol As Long ' B列的索引
moduleCol = 2 ' B列通常对应索引2
Dim moduleDict As Object ' 用于存储模块及其对应的总和
Set moduleDict = CreateObject("Scripting.Dictionary")
For i = startRow To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' 遍历所有行
Dim rowTotal As Double
rowTotal = 0
' 计算当前行的数据总和并更新P列
For j = LBound(dataColumns) To UBound(dataColumns)
rowTotal = rowTotal + ws.Cells(i, dataColumns(j)).Value
Next j
ws.Cells(i, totalCol).Value = rowTotal
' 分组计算模块内P列的总和
Dim currentModule As String
currentModule = ws.Cells(i, moduleCol).Value
If Not moduleDict.Exists(currentModule) Then
moduleDict.Add currentModule, rowTotal
Else
moduleDict(currentModule) = moduleDict(currentModule) + rowTotal
End If
Next i
' 将模块累计总和填入Q列
Dim qCol As Long
qCol = 17 ' Q列通常对应索引17
For Each module In moduleDict
ws.Cells(ws.Rows(startRow - 1), qCol).Offset(moduleDict(module).Count - 1, 0).Value = module & " : " & moduleDict(module)
Next module
End Sub
```
阅读全文