Excel VBA实现ASCII文件导入后自动计算列平均值需求
修改VBA导入宏以自动计算列平均值(D2至AJ2)
没问题,我帮你调整了原有VBA代码,添加了自动在D2到AJ2单元格生成对应列平均值公式的功能。下面是完整的修改后代码:
Sub Import() Dim FileToOpen As Variant Dim OpenBook As Workbook Dim NameOfWorkbook As String Dim arr As Variant Dim LastRow As Long Dim col As Integer Application.Calculation = xlCalculationManual Application.DisplayStatusBar = False Application.EnableEvents = False Application.ScreenUpdating = False Application.DisplayAlerts = False Sheets.Add(After:=ActiveSheet).Name = "Data1" NameOfWorkbook = ActiveSheet.Name 'Step 1 Import the data FileToOpen = Application.GetOpenFilename(Title:="Import sensor report in ASCII format") If FileToOpen <> False Then Set OpenBook = Application.Workbooks.Open(FileToOpen) arr = OpenBook.Sheets(1).Range("A1").CurrentRegion RowCount = UBound(arr, 1) ColumnCount = UBound(arr, 2) ThisWorkbook.Sheets("Data1").Range("A1").Resize(RowCount, ColumnCount).Value = arr arr = OpenBook.Sheets(1).Range("A3").CurrentRegion RowCount = UBound(arr, 1) ColumnCount = UBound(arr, 2) ThisWorkbook.Sheets("Data1").Range("A3").Resize(RowCount, ColumnCount).Value = arr OpenBook.Close False ' 新增:计算D2到AJ2的平均值公式 With ThisWorkbook.Sheets("Data1") ' 获取数据最后一行(以A列为基准,确保覆盖所有数据行) LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row ' 循环D列(第4列)到AJ列(第36列) For col = 4 To 36 ' 为第2行对应列设置平均值公式,引用从第3行到最后一行的数据 .Cells(2, col).Formula = "=AVERAGE(" & .Cells(3, col).Address(False, False) & ":" & .Cells(LastRow, col).Address(False, False) & ")" Next col End With End If Application.DisplayAlerts = True Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.DisplayStatusBar = True Application.EnableEvents = True End Sub
关键改动说明:
- 新增变量:定义了
LastRow(存储数据最后一行行号)和col(循环列号时使用) - 动态获取最后一行:用
.Cells(.Rows.Count, "A").End(xlUp).Row自动识别数据的最后一行,不管数据行数多少,公式都能精准引用到末尾 - 循环生成公式:从第4列(D列)到第36列(AJ列)遍历,给每个单元格设置
AVERAGE公式,用Address(False, False)生成相对引用的地址(比如D3:D100),确保公式完全匹配对应列的数据范围 - 逻辑位置:把计算逻辑放在关闭源文件之后、恢复Excel系统设置之前,确保数据完全导入后再生成公式,避免出现引用错误
这样修改后,每次完成数据导入,D2到AJ2就会自动填充对应列的平均值公式啦。
内容的提问来源于stack exchange,提问作者Vaeaelen
相关产品推荐
相关产品推荐

