我有一个要删除的单元格的引用列表。引用列表在表“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
有人可以帮忙解决这个问题吗?
答案 0 :(得分:2)
试试这个:
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
将地址存储在数组中(而不是直接从工作表中读取每个单元格)使您的代码更快。
请注意,代码假设您的地址存储在B2:B & lastrow
范围内,其中lastrow
- 是最后一个单元格的行,其中包含B
列中的数据
答案 1 :(得分:1)
这假定要清除的单元格列表是 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