AuRng.Cells(2, 1)
работает только для смежных диапазонов, а не для непрерывного диапазона. Для того, чтобы выбрать ячейку в конкретной области, вы должны решить эту область, а затем использовать .Cells(r,w)
Например
uRng.Areas(n).Cells(r, c)
Где n
это область, которую вы хотите записать и r
, c
являются строки/столбца.
B. Строки. Работы с 1 Площадь. Поэтому, чтобы найти количество строк в несмежном диапазоне, вам придется зацикливаться.
Смотрите этот пример
Option Explicit
Sub foo()
Dim aRng As Range: Set aRng = ActiveSheet.Range("A1:J1")
Dim bRng As Range: Set bRng = ActiveSheet.Range("A4:J4")
Dim cRng As Range: Set cRng = ActiveSheet.Range("A10:J10")
Dim rngArea As Range
Dim rwCount As Long
Dim uRng As Range: Set uRng = Union(aRng, bRng, cRng)
If uRng.Areas.Count > 1 Then
Debug.Print "It's a non-contiguous range"
For Each rngArea In uRng.Areas
rwCount = rwCount + rngArea.Rows.Count
Next
Debug.Print "The range has " & rwCount & " rows"
Else
Debug.Print "It's a contiguous range"
Debug.Print "The range has " & uRng.Rows.Count & " rows"
End If
End Sub
C. Существует странность в columns.count
, а, но так как все диапазон имели одинаковое количество столбцов, вы не relaize это. Попробуйте это
Option Explicit
Sub foo()
Dim aRng As Range: Set aRng = ActiveSheet.Range("A1:J1")
Dim bRng As Range: Set bRng = ActiveSheet.Range("A4:K4") '<~~ I changed this.
Dim cRng As Range: Set cRng = ActiveSheet.Range("A10:J10")
Dim uRng As Range: Set uRng = Union(aRng, bRng, cRng)
'~~> This will still give you 10 instead of `11`
Debug.Print uRng.Columns.Count
End Sub
Таким образом, та же логика применяется и для поиска количества столбцов.
IMP: Теперь это зависит от того, как вы хотите подсчитать количество строк/столбцов. Что делать, если строки/столбцы областей перекрываются? В таком случае вы хотите суммировать количество строк/столбцов или фактических строк/столбцов Excel в этом непересекающемся диапазоне?
Вчера я задал вопрос о диапазонах.Они не ведут себя так, как вы ожидали бы :([My Range Question] (http://stackoverflow.com/questions/20035121/why-can-i-reference-cells-in-a-range-that-shouldnt-exist -and-how-do-i-find-the) – Sam
легко проверить. Просто заполните свой диапазон (оставьте любые другие ячейки пустыми) и выполните «Application.Worksheetfunction.CountaA (uRng)». Таким образом, вы можете видеть нет – Takedasama
Я вижу, что вы уже приняли ответ :) Но я все равно продолжу и отправлю свой ответ, так как я набрал много ... lol –