```vba Sub UpdateSubjectBalanceSheet() Dim wb As Workbook Dim newWb As Workbook Dim wsSource As Worksheet Dim wsTarget As Worksheet Dim lastRow As Long Dim i As Long Dim filterValue As String ' 设置源工作簿和目标工作簿 Set wb = ThisWorkbook Set wsSource = wb.Sheets("科目余额表科目编码与底稿对应关系") Set newWb = Workbooks.Add Set wsTarget = newWb.Sheets(1) wsTarget.Name = "本年科目余额表" ' 获取源工作表的最后一行 lastRow = wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row ' 在目标工作表的第六行开始筛选数据 For i = 2 To lastRow filterValue = wsSource.Cells(i, 2).Value ' 筛选A列数据 With wsTarget.Range("A:A") .AutoFilter Field:=1, Criteria1:=filterValue ' 获取筛选后的最后一行 Dim lastFilteredRow As Long lastFilteredRow = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row ' 填充I列 If lastFilteredRow > 6 Then wsTarget.Range("I7:I" & lastFilteredRow).Value = "是" End If End With ' 清除筛选 wsTarget.AutoFilterMode = False Next i ' 提示完成 MsgBox "更新完成", vbInformation End Sub ``` 额外需要注意的逻辑点: 1. 确保工作表名称正确:代码中假设源工作表名为“科目余额表科目编码与底稿对应关系”,目标工作表名为“本年科目余额表”。如果实际名称不同,请修改代码中的工作表名称。 2. 处理空值:如果源工作表中的某些单元格为空,可能会导致筛选失败。可以在循环中添加检查,跳过空值。 3. 性能优化:如果数据量较大,多次筛选和填充操作可能会影响性能。可以考虑在循环外部关闭屏幕更新和自动计算,以提高效率。 [2024-12-19 15:02:26 | AI写代码神器 | 490点数解答]