2017-09-26 65 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