Excel 从单元格中查找字符串,删除附加到该字符串的4-5行,然后移动到下一个单元格

Excel 从单元格中查找字符串,删除附加到该字符串的4-5行,然后移动到下一个单元格,excel,vba,Excel,Vba,我要寻找的是,我需要找出一个单元格中是否包含“.L”,如果是,则需要删除整行以及另外4行,并且此系列将一直持续到最后一组数据 例如: 将有数百个数据集,如下图所示,其中“RIC”包含“.L” TID:xxx,Symbol=xxx,Date=xxx,RIC=EPWN.L,CUSIP=xxx,SEDOL=xxx 数据流:xxxx 彭博社:xxxx 市场…:xxxx TID:xxx,Symbol=xxx,Date=xxx,RIC=BAR.BR,CUSIP=xxx,SEDOL=xxx 数据流:xxx 彭

我要寻找的是,我需要找出一个单元格中是否包含“.L”,如果是,则需要删除整行以及另外4行,并且此系列将一直持续到最后一组数据

例如: 将有数百个数据集,如下图所示,其中“RIC”包含“.L”

TID:xxx,Symbol=xxx,Date=xxx,RIC=EPWN.L,CUSIP=xxx,SEDOL=xxx 数据流:xxxx 彭博社:xxxx 市场…:xxxx

TID:xxx,Symbol=xxx,Date=xxx,RIC=BAR.BR,CUSIP=xxx,SEDOL=xxx 数据流:xxx 彭博社:xxx 市场…:xxx

如果任何RIC具有“.L”,则需要删除整个集合。最后,我应该得到没有“.L”的数据集

请帮忙

下面是vba,但它不工作:

Range("b2:b2000").ClearContents
Dim rng As Range
Dim cell As Range
Dim serchstring As String
Set rng = ActiveSheet.UsedRange
 
searchstring = ".l"
On Error Resume Next
For Each cell In rng
If UCase(cell.Value) Like "*" & UCase(searchstring) Then
cell.Offset(0, 1).Value = "NA"
cell.Offset(1, 1).Value = "NA"
cell.Offset(2, 1).Value = "NA"
cell.Offset(3, 1).Value = "NA"

cell.Font.Bold = True
cell.Interior.Color = vbYellow
 
End If
Next cell
 
 
Cells.Select
 
With ActiveSheet
 
.AutoFilterMode = False
.Range("A:B").AutoFilter
.Range("A:B").AutoFilter field:=2, Criteria1:="NA"
 
Intersect(.UsedRange, .UsedRange.Offset(1)).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilterMode = False
 
End With
 
With ActiveSheet
 
.AutoFilterMode = False
 
.Range("A:B").AutoFilter field:=1, Criteria1:=""

Intersect(.UsedRange, .UsedRange.Offset(1)).SpecialCells(xlCellTypeVisible).EntireRow.Delete
 
.AutoFilterMode = False
End With

如果您的程序没有删除行,我认为问题在于这些行:

cell.Offset(0,1).Value=“NA”
单元格偏移量(1,1).Value=“NA”
单元格偏移量(2,1).Value=“NA”
单元格偏移量(3,1).Value=“NA”
偏移量返回一个单元格,因此您只能擦除一个单元格。但是你的帖子说你想删除整行。为了参考世界银行,我建议:

cell.Offset(0,1).EntireRow.ClearContents
cell.Offset(1,1).EntireRow.ClearContents
cell.Offset(2,1).EntireRow.ClearContents
cell.Offset(3,1).EntireRow.ClearContents
可以简化为一条直线,如:

cell.Offset(0).调整大小(4).EntireRow.ClearContents
或者,如果不想留下空白行,可以直接删除这些行,如:

cell.Offset(0).调整大小(4).EntireRow.Delete
但是,如果您重复删除,您会注意到Excel会结巴,并且执行速度很慢。因此,我建议将要删除的行保存到一个范围变量中,然后在末尾一次性删除它们。使用Union()将范围添加到一起

如果rToBeDeleted为空,则
设置rToBeDeleted=cell.Offset(0)。调整大小(4)。EntireRow
其他的
设置rToBeDeleted=Union(rToBeDeleted,cell.Offset(0).调整大小(4).EntireRow)
如果结束
”“最后呢
删除。删除
如果你这样做,你不需要做任何自动过滤删除

编辑: 为清楚起见,以下是我在应用我的建议后建议您的代码的结构:

范围(“b2:b2000”).ClearContent
变暗rng As范围
暗淡单元格作为范围
被列为射程
暗弦
设置rng=ActiveSheet.UsedRange
searchstring=“*.L”
出错时继续下一步
对于rng中的每个单元
如果UCase(cell.Value)喜欢searchstring,那么
如果你被删除了,那就什么都不是了
设置rToBeDeleted=cell.Offset(0)。调整大小(4)。EntireRow
其他的
设置rToBeDeleted=Union(rToBeDeleted,cell.Offset(0).调整大小(4).EntireRow)
如果结束
如果结束
下一个细胞
删除。删除

什么是不工作?删除“下一步继续执行错误时的
,然后查看它抛出的错误以及在哪一行。它发出404错误消息。我已经尝试过了,但它仍然不起作用。它只是消除了两个数据集之间的差距。相反,我想删除RIC中包含(.L)的整个数据集。@Crox我添加了一个示例,说明如何实现我的建议。请看一看,让我知道是否还有问题。这不起作用……这是删除整个数据,而不是只删除“.L”数据集。请帮助:(您发布的代码建议您不仅要删除包含“.L”的行,还要删除上面的行和下面的两行。如果这不正确,则需要将
单元格.偏移量(0).调整大小(4)
为其他内容。可能要删除
.Offset(0).调整大小(4)
。或者在找到匹配项后,跳过接下来的几行,不在同一集中重新匹配。