使用引用删除单元格内容的宏

时间:2014-03-08 13:32:11

标签: excel excel-vba vba

我有一个要删除的单元格的引用列表。引用列表在表“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

有人可以帮忙解决这个问题吗?

2 个答案:

答案 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