我有一个要删除的单元格的引用列表。参考资料的列表在表格"test_url“中。引用列表指向要删除的单元格,这些单元格位于另一个工作表"main_lists“中。
我想要的是一个宏,它接受"test_url“表中列出的所有引用,并在"main_lists”工作表中选择它们的单元格并删除它们。
下面的宏是我为两个引用记录的内容,只是为了演示我的问题,它要求我从"test_url“工作表复制引用,然后将其粘贴到"main_urls”工作表的NameBox中,以选择指定单元格的内容,然后删除其内容。这个过程是手动完成的,每次一个单元格的列表包含10-20个地址/引用。然而,最近这份名单上有2000多个条目,而且还在增加:
Sub DeletePermittedCells()
'DeletePermittedCells Macro
Sheets("test_urls").Select
Range("B2").Select
Sheets("test_urls").Select
Selection.Copy
Sheets("main_lists").Select
Application.Goto Reference:="R200045C1"
Application.CutCopyMode = False
Selection.ClearContents
Sheets("test_urls").Select
Range("B3").Select
Selection.Copy
Sheets("main_lists").Select
Application.Goto Reference:="R247138C1"
Application.CutCopyMode = False
Selection.ClearContents
Sheets("test_urls").Select
End Sub
有人能帮忙解决这个问题吗?
发布于 2014-03-08 13:47:10
试试这个:
Sub DeletePermittedCells()
Dim rng As Range
Dim arr, c
With Sheets("test_urls")
'storing data in array makes your code much faster
arr = .Range("B2:B" & .Cells(.Rows.Count, "B").End(xlUp).Row).Value
End With
With Sheets("main_lists")
Set rng = .Range(arr(1, 1))
For Each c In arr
Set rng = Union(rng, .Range(c))
Next
End With
rng.ClearContents
End Sub
将地址存储在数组中(而不是直接从工作表读取每个单元格)可以使您的代码更快。
注意,代码假定您的地址存储在range B2:B & lastrow
中,其中lastrow
-是最后一行单元格,数据在B
列中。
发布于 2014-03-08 13:50:16
这假设要清除的单元格列表是列A
Sub ClearCells()
Dim s1 As Worksheet, s2 As Worksheet
Dim N As Long, I As Long, addy As String
Set s1 = Sheets("test_url")
Set s2 = Sheets("main_lists")
N = s1.Cells(Rows.Count, "A").End(xlUp).Row
For I = 1 To N
addy = s1.Cells(I, 1).Value
s2.Range(addy).ClearContents
Next I
End Sub
https://stackoverflow.com/questions/22269998
复制相似问题