为VBA行删除代码添加双条件判断:命名范围匹配+区间求和为0
满足双条件删除行的VBA代码
以下是修改后的VBA代码,仅当同时满足两个条件时才删除整行:
- C列单元格值不属于命名范围
ReferenceLocations - 指定工作表中该行从动态计算的列(通过Offset实现)到P列的求和结果为0
' 定义变量 Dim Cell As Range, cRange As Range, LastRow As Long, x As Long, TestRange As Range, MyRange As Range Dim targetSheet As Worksheet Dim offsetCol As Integer ' 存储偏移量,用于确定求和起始列 Dim startCol As Range ' 求和区域的起始列 'DELETE IRRELEVANT LOCATIONS ' 根据C列确定最后一行数据 LastRow = Sheets("Sheet1").Cells(Rows.Count, "C").End(xlUp).Row ' 设置检查范围为C2到C列最后一行 Set cRange = Sheets("Sheet1").Range("C2:C" & LastRow) ' 指定要求和的另一工作表,请根据实际修改名称 Set targetSheet = ThisWorkbook.Sheets("目标工作表名称") ' 假设偏移量存储在Sheet1的D1单元格,请根据实际修改位置 offsetCol = Sheets("Sheet1").Range("D1").Value ' 从下往上遍历检查范围(避免删除行导致的索引混乱) For x = cRange.Cells.Count To 1 Step -1 With cRange.Cells(x) ' 确定求和区域的起始列:以目标工作表的A列为基准,偏移offsetCol列 Set startCol = targetSheet.Cells(.Row, 1).Offset(0, offsetCol) ' 同时满足两个条件时删除整行 If IsError(Application.Match(.Value, Range("ReferenceLocations"), 0)) _ And Application.Sum(targetSheet.Range(startCol, targetSheet.Cells(.Row, "P"))) = 0 Then .EntireRow.Delete End If End With Next x
关键修改说明
- 新增
targetSheet变量:用于指定要求和的另一工作表,需替换为实际工作表名称 - 新增
offsetCol变量:读取存储偏移量的单元格值(示例为Sheet1的D1),用于动态计算求和起始列 - 用
Offset构建求和起始列:结合P列确定完整求和范围 - 修改
If判断逻辑:通过And连接两个条件,确保仅当双条件都满足时执行删除操作
内容的提问来源于stack exchange,提问作者vjr2109
相关产品推荐
相关产品推荐

