如何用列表表格数据过滤另一表格并编写VBA代码?(不擅数组函数)
无需数组公式的VBA筛选统计方案
核心逻辑
- 提取列表表格里的目标名称
- 逐个遍历名称,在待筛选表格中匹配并累加对应金额
- 将统计结果写入汇总报表
VBA代码实现
Sub GenerateSummaryReport() Dim wsList As Worksheet, wsData As Worksheet, wsSummary As Worksheet Dim lastRowList As Long, lastRowData As Long, lastRowSummary As Long Dim nameCell As Range, dataCell As Range Dim targetName As String, totalAmount As Double ' 替换为你的实际工作表名称 Set wsList = ThisWorkbook.Worksheets("列表表格") Set wsData = ThisWorkbook.Worksheets("待筛选表格") Set wsSummary = ThisWorkbook.Worksheets("汇总报表") ' 清空汇总报表旧数据(保留表头) wsSummary.Range("A2:B" & wsSummary.Cells(Rows.Count, 1).End(xlUp).Row).ClearContents ' 获取列表表格的名称范围(假设名称从A2开始,A1是表头) lastRowList = wsList.Cells(Rows.Count, 1).End(xlUp).Row ' 遍历每个要统计的名称 For Each nameCell In wsList.Range("A2:A" & lastRowList) targetName = nameCell.Value totalAmount = 0 ' 获取待筛选表格的数据范围(假设名称在A列,金额在B列) lastRowData = wsData.Cells(Rows.Count, 1).End(xlUp).Row ' 累加对应名称的金额 For Each dataCell In wsData.Range("A2:A" & lastRowData) If dataCell.Value = targetName Then totalAmount = totalAmount + dataCell.Offset(0, 1).Value End If Next dataCell ' 将统计结果写入汇总报表 lastRowSummary = wsSummary.Cells(Rows.Count, 1).End(xlUp).Row + 1 wsSummary.Cells(lastRowSummary, 1).Value = targetName wsSummary.Cells(lastRowSummary, 2).Value = totalAmount Next nameCell ' 可选:格式化金额列,显示两位小数 wsSummary.Range("B2:B" & wsSummary.Cells(Rows.Count, 2).End(xlUp).Row).NumberFormat = "#,##0.00" MsgBox "汇总报表生成完成!", vbInformation End Sub
使用注意事项
- 代码中的工作表名称(
"列表表格"、"待筛选表格"、"汇总报表")要替换成你文件里的实际表名 - 确认列位置:如果待筛选表格的金额不在B列,调整
dataCell.Offset(0,1)中的数字(比如金额在C列就改成Offset(0,2)) - 运行代码前确保所有相关表格都在当前工作簿中打开
内容的提问来源于stack exchange,提问作者ppuynoon
相关产品推荐
相关产品推荐

