excel - 使用 InStr 删除列中不包含子字符串的所有行
问题描述
我想将我的表格减少到第二列中所有以“X”作为子字符串的行。为此,我写了以下内容:
Sub reduce()
Dim lngRow As Long
With ActiveWorkbook.ActiveSheet
lngRow = .Cells(65536, 1).End(xlUp).Row
Do
pos = InStr(.Cells(lngRow, 2), "X")
If Not pos > 0 Then
.Rows(lngRow).Delete
End If
lngRow = lngRow - 1
Loop Until lngRow = 1
End With
End Sub
不幸的是,我收到了这个错误: https ://docs.microsoft.com/en-us/office/vba/Language/Reference/User-Interface-Help/application-defined-or-object-defined-error
解决方案
如何在循环中执行此操作。它的代码更多,但比当前方法更有效。@BigBen 是正确的,在给定当前问题陈述的情况下,过滤器是最佳的
Sub Reduce()
'Declare variables
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- Update Sheet
Dim LR As Long
Dim xCell As Range, xRange As Range
Dim DeleteMe As Range
'Assign/Set necessarry variables
LR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
Set xRange = ws.Range("A2:A" & LR)
'Create Union (Collection Of Rows) to Delete
For Each xCell In xRange
If Not InStr(xCell.Offset(0, 1), "X") Then
If Not DeleteMe Is Nothing Then
Set DeleteMe = Union(xCell, DeleteMe)
Else
Set DeleteMe = xCell
End If
End If
Next xCell
'Delete the Union
If Not DeleteMe Is Nothing Then
DeleteMe.EntireRow.Delete
End If
End Sub
推荐阅读
- c# - 在hangfire中运行之前如何使某些方法依赖于另一种方法?
- postgresql - 如何根据 postgres 中的另一列限制某些列的插入值
- wordpress - 隔离好友按消息功能
- python - ROS2 从订阅者回调中重复调用服务
- ruby-on-rails - Rails Redis Cache 存储方法外的空信息
- java - LinkedList 头尾问题
- d3.js - 如何在 d3 中为可视化添加标签
- ios - UICollisionBehavior 忽略屏幕边缘
- javascript - 无法在 React js 中用视频填充 div
- node.js - Create User In Moodle Using Moodle API & Node.js