我有一个excel Sheet1,从A1到T1有一千行和20列 . 该范围内的每个单元格都包含一些数据,通常是一个或两个单词 . 在Sheet2中,A1列我有一个1000个值的数据列表 .
我正在使用VBA脚本从Sheet1中的Sheet2列表中查找单词并清除找到的单元格的值 .
我现在有一个仅适用于Sheet1的A1列的VBA脚本,它只删除行 . 这是脚本:
Sub DeleteEmails()
Dim rList As Range
Dim rCrit As Range
With Worksheets("Sheet1")
.Range("A1").Insert shift:=xlDown: .Range("A1").Value = "Temp Header"
Set rList = .Range("A1", .Cells(Rows.Count, 1).End(xlUp))
End With
With Worksheets("Sheet2")
.Range("A1").Insert shift:=xlDown: .Range("A1").Value = "Temp Header"
Set rCrit = .Range("A1", .Cells(Rows.Count, 1).End(xlUp))
End With
rList.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=rCrit, Unique:=False
rList.Offset(1).SpecialCells(xlCellTypeVisible).Delete shift:=xlUp
Worksheets("Sheet1").ShowAllData
rList(1).Delete shift:=xlUp: rCrit(1).Delete shift:=xlUp
Set rList = Nothing: Set rCrit = Nothing
End Sub
谁能帮助我?我需要清除值,而不是删除行,这应该适用于Sheet1的所有列,而不仅仅是A1 .
2 回答
这是通过最小化工作表(通过范围/单元格的迭代)和代码之间的流量来使用数组的另一种方法 . 此代码不使用任何
clear contents
. 只需单击一个按钮,只需将整个范围放入阵列,清理并输入所需内容即可 .根据OP的要求编辑
码:
请注意,你真正需要设置的是范围:
键范围
待清理范围
输出:(用于显示目的我使用相同的工作表,但您可以根据需要更改工作表名称 .
根据OP运行OP文件的请求进行编辑:
它没有清理所有列的原因是上面的示例只清理了两列,其中有16列 . 所以你需要添加另一个
for
循环来迭代它 . 性能下降不多,但有点;)以下是运行您发送的工作表后的屏幕截图 . 除此之外没有什么可以改变的 .码:
我现在没有优势,所以这可能不是公式名称的100%准确,但我相信这条线需要改变:
至
一旦你将rList设置为你想要的选择 .
Delete
是您删除行而不清除行的原因 .(1)
是你只做A1
而不是整个范围的原因 .EDIT
我测试的最终代码是(包括现在遍历所有列):
PS:我可以要求你不要在vba中使用':' . 在vba的默认IDE中很难注意到它,并花了一些时间来弄清楚为什么事情正在发生但没有意义!