Vba 如何从范围变量中删除重复的范围(而不是值)?

Vba 如何从范围变量中删除重复的范围(而不是值)?,vba,excel,Vba,Excel,我有VBA代码,可以在Excel中的每个选定单元格中循环。我注意到,在某些情况下,选择的细胞数高于预期。例如,如果我手动选择单元格A1:A2,然后按CTRL键单击单元格A2,我希望选择的单元格计数为2。为了测试它,我运行了以下代码: Dim target As Range Set target = Application.Selection MsgBox target.Cells.Count …而细胞数实际上是三个。本例中的选择再次引用单元格A1:A2和A2 我如何将这样一个与自身重叠的范围转

我有VBA代码,可以在Excel中的每个选定单元格中循环。我注意到,在某些情况下,选择的细胞数高于预期。例如,如果我手动选择单元格A1:A2,然后按CTRL键单击单元格A2,我希望选择的单元格计数为2。为了测试它,我运行了以下代码:

Dim target As Range
Set target = Application.Selection
MsgBox target.Cells.Count
…而细胞数实际上是三个。本例中的选择再次引用单元格A1:A2和A2


我如何将这样一个与自身重叠的范围转换为一个不重叠的范围?这是一个简单的示例,但实际范围可能更大,并且包含更大的重叠范围。谢谢

此代码有效,并且已经过测试

我把target作为变量名,因为它是工作表事件变量的关键字

Option Explicit

Sub DeDupeRange()

    Dim rngSelection As Range
    Set rngSelection = Application.Selection

    Dim rngDeDuped As Range

    Dim rngLoop As Range
    For Each rngLoop In rngSelection

        If rngDeDuped Is Nothing Then
            Set rngDeDuped = rngLoop
        Else
            If Intersect(rngLoop, rngDeDuped) Is Nothing Then
               Set rngDeDuped = Union(rngDeDuped, rngLoop)
            End If
        End If
    Next

    Debug.Print rngSelection.Address 'result is A1:A2,A2
    Debug.Print rngDeDuped.Address 'result is A1:A2

End Sub