2017-09-26 64 views
0

我有VBA代码循环遍历Excel中的每个选定单元格。我注意到在某些情况下,选择的细胞数量高于预期。例如,如果我手动选择细胞A1:A2然后CTRL单击单元格A2我期待的选择的细胞数目为2为了测试它,我跑这个代码:如何从范围变量中删除重复范围(不是值)?

Dim target As Range 
Set target = Application.Selection 
MsgBox target.Cells.Count 

...和细胞计数实际上是三个。在这种情况下的选择再次指代单元A1:A2A2

我怎样才能采取这样的范围与自身重叠,并将其转换为不重叠的范围?这是一个简单的例子,但实际范围可能更大并且包含更大的重叠范围。谢谢!

回答

1

这段代码的工作原理已经过测试。

我正在取出target作为变量名称,因为它是Worksheet_Event变量的关键字。

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 
+0

这就是诀窍! – ChrisB