在多个命名范围上执行相同的操作

时间:2019-04-25 04:08:33

标签: excel vba

我在工作表中有一堆命名范围,每天必须清除它们。目前,我已经在VBA中像这样设置它:

Range("CustomList1").ClearContents
Range("CustomList2").ClearContents
Range("CustomList3").ClearContents
Range("CustomList4").ClearContents
Range("CustomList5").ClearContents
(+15 more)

没什么大不了的,但是我觉得必须有更好的方法来解决它。话虽这么说,但在进行一些搜索后,我并没有真正看到关于遍历多个命名范围的任何信息。有什么想法/想法吗?

4 个答案:

答案 0 :(得分:2)

Dim i As Long

For i = 1 to 20
    Range("CustomList" & i).ClearContents
Next

...类似的东西。

如果您要清除命名范围的某种命名约定,则可以执行以下操作,这意味着您无需更新代码...

Dim objName As Name

For Each objName In ThisWorkbook.Names
    If InStr(1, objName.Name, "NamedRange", vbTextCompare) = 1 Then
        With objName.RefersToRange
            .Worksheet.Range(.Address).ClearContents
        End With
    End If
Next

答案 1 :(得分:1)

如果名称一致,Skin的解决方案将起作用,但如果不一致,则始终可以使用所有范围名称创建一个数组。

类似

RngArray = Array("CustomList1","CustomList2","CustomList3, etc.") For i = 0 to 19 Range(RngArray(i)).ClearContents Next

答案 2 :(得分:1)

Union的类型可能比循环更多,但它会在单个语句中完成操作。

Union(Range("CustomList1"), Range("CustomList2"), Range("CustomList3"), _
      Range("CustomList4"), Range("CustomList5"), Range("CustomList6"), _
      Range("CustomList7"), Range("CustomList8"), Range("CustomList9"), _
      Range("CustomList10"), Range("CustomList11"), Range("CustomList12"), _
      Range("CustomList13"), Range("CustomList14"), Range("CustomList15"), _
      Range("CustomList16"), Range("CustomList17"), Range("CustomList18"), _
      Range("CustomList19"), Range("CustomList20")).ClearContents

此方法可能更适合具有抽象或不同命名约定的命名范围。

答案 3 :(得分:1)

我会略有不同。

我将名称以一个名称存储在 Formula ==> Names Manager 中,如下所示。

enter image description here

然后,我将仅在每个地方使用以下内容。每次您要清除范围时,都不需要几行代码。

Range("MyCustomList").ClearContents