excel - 计数过滤的行并显示计数
问题描述
我想按三个条件进行过滤,计算被过滤的行数,在单元格 N2 中输出该计数,然后删除被过滤的行。我不确定为什么下面的代码不起作用。
Sheets("Sheet1").Range("B4").Select
Sheets("Sheet1").Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.AutoFilter Field:=8, Criteria1:=Array("A", "B", "C"), Operator:=xlFilterValues
Selection.Cell("N1").Select
ActiveCell.Value = Range(Cells(1, 1), Cells(Selection.SpecialCells(xlcelltypelast).Row, Selection.SpecialCells(xlCellTypeLastCell).Column)).Count
Selection.AutoFilter
解决方案
想象一下这个数据
首先,您应该避免在 Excel VBA 中使用 Select。
同样既不
xlLastCell
也不xlcelltypelast
存在,您可能意味着xlCellTypeLastCell
我建议激活Option Explicit
以避免此类拼写错误:在 VBA 编辑器中转到Tools › Options › Require Variable Declaration。过滤后的数据可能不是一个连续的范围,而是分为不同的区域。
所以
FilterRange.SpecialCells(xlCellTypeVisible).Rows.Count
只会给你第一个区域的行数。所以你必须遍历这些区域For Each iArea In FilterRange.SpecialCells(xlCellTypeVisible).Areas
并总结.Rows.Count
它们以获得它们的总数。
Option Explicit
Sub FilterAndDelete()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim FilterRange As Range
Set FilterRange = ws.Range(ws.Range("B4"), ws.Range("B4").SpecialCells(xlCellTypeLastCell))
FilterRange.AutoFilter Field:=8, Criteria1:=Array("A", "B", "C"), Operator:=xlFilterValues
Dim RowCount As Long
Dim iArea As Range
For Each iArea In FilterRange.SpecialCells(xlCellTypeVisible).Areas
RowCount = RowCount + iArea.Rows.Count
Next iArea
ws.Range("N2").Value = RowCount - 1 'subtract header
'delete rows but keep header
Dim RowsToDelete As Range
On Error Resume Next 'next line throws error if filter is empty. Hide it.
Set RowsToDelete = FilterRange.Resize(RowSize:=FilterRange.Rows.Count - 1).Offset(RowOffset:=1).SpecialCells(xlCellTypeVisible)
'This Part FilterRange.Resize(RowSize:=FilterRange.Rows.Count - 1).Offset(RowOffset:=1) excludes the header from the FilterRange (we don't want to delete that).
On Error GoTo 0 'always re-activate error reporting!
If Not RowsToDelete Is Nothing Then
RowsToDelete.EntireRow.Delete
End If
FilterRange.AutoFilter
End Sub
推荐阅读
- reactjs - 是否可以为 Reactjs 应用程序的单个组件及其所有依赖文件和插件(如构建版本)创建一个 js 文件
- sql-server - 连接到 SQL Server(Postgresql 数据库):使用什么作为主机名?
- sql - 简单案例语句返回 ORA-00937:不是单组组函数
- mysql - Spring - 无法使用 CRUD 存储库保存实体
- matplotlib - 不能使用 matplotlib 库?
- android - 为什么我不能在另一个文本视图上方添加一个文本视图?
- ios - 应用程序启动时如何处理 url?
- typo3 - TYPO3 从打字稿和流体模板渲染事件
- javascript - Using methods for the menu item callbacks in Google Apps Script
- collision-detection - 我想看看玩家是否在godot中的敌人之上或之下