Страницы: 1
RSS
Разобрать Selection на прямоугольные области
 
Здравствуйте! У меня задача подсчитать количество выделенных ячеек. Выделение происходит с ctrl, то есть Selection содержит несколько диапазонов, кроме того, они могут пересекаться. Простой подсчет в конструкции For Each c In Selection.Cells считает ячейку, принадлежащую двум диапазонам одновременно, за две. Как убрать дублирование? Возникла идея вытащить список диапазонов из Selection, но не знаю как это сделать. Или, может другие идеи кто подкинет? Спасибо заранее.
 
Здравствуйте! Selection.Count не подойдёт?
 
Попробуйте такой вариант:  
 
Sub test1()  
   Dim cell As Range, col As Range  
   On Error Resume Next  
   For Each col In Intersect(Selection.EntireColumn, Selection.EntireColumn).Columns  
       For Each cell In Intersect(col, Selection)  
           Debug.Print cell.Address,: n = n + 1  
       Next cell  
       Debug.Print  
   Next col  
   MsgBox "Всего ячеек: " & n  
End Sub
 
Так еще можно  
 
Sub UniqCells()  
Dim n As Long, c As Range, t As New Collection  
On Error Resume Next  
For Each c In Selection  
   t.Add 0, c.Address  
   If Err Then  
       Err.Clear  
   Else  
       n = n + 1  
   End If  
Next  
MsgBox "Всего ячеек: " & n  
End Sub
 
Чуть проще  
 
Sub UniqCells()  
Dim c As Range, t As New Collection  
On Error Resume Next  
For Each c In Selection  
   t.Add 0, c.Address  
Next  
MsgBox "Всего ячеек: " & t.Count  
End Sub
 
Шайтан! Как вы это делаете? Работает ведь :)  
Спасибо всем ответившим.
Страницы: 1
Читают тему
Наверх
Loading...