Диапазон настройки для цикла - PullRequest
2 голосов
/ 28 августа 2011

Я пытаюсь установить диапазон в цикле For. Мой код работает нормально, когда я делаю это:

For Each i in Range("A1":"A5")
   'Some process code
Next i

Но я не получаю те же результаты, когда я делаю это:

For Each i in Range("A1").End(xlDown)
    'Some Process
Next i

Разве два кода эквивалентны? Какие изменения я должен внести во второй, чтобы он выполнялся так же, как и первый, но не заставляет меня жестко кодировать диапазон в коде?

Ответы [ 2 ]

5 голосов
/ 29 августа 2011

Вторая у вас есть только последняя ячейка в диапазоне, которая, как я полагаю, будет у меня A5 из первого примера. Вместо этого вам нужно сделать что-то вроде этого.

Я структурировал это как небольшой тест, чтобы вы могли видеть первый вариант, исправленный второй и пример того, как я бы предпочел сделать это.

Option Explicit

Sub test()

  Dim r As Range
  Dim x As Range

  ' Make sure there is stuff in Range("A1:A5")
  Range("A1") = 1
  Range("A2") = 2
  Range("A3") = 3
  Range("A4") = 4
  Range("A5") = 5

  ' Your first option
  For Each x In Range("A1:A5")
    Debug.Print x.Address & ", " & x
  Next

  ' What you need to do to get the full range
  For Each x In Range("A1", Range("A1").End(xlDown))
    Debug.Print x.Address & ", " & x
  Next

  ' My preferred method
  Set r = Range("A1").End(xlDown)
  For Each x In Range("A1", r)
    Debug.Print x.Address & ", " & x
  Next

End Sub
2 голосов
/ 29 августа 2011

Самый простой способ сделать это - сохранить число lastRow в такой переменной. Вы можете сделать объединение для каждой строки:

Dim cell as range
Dim lastRow As Long
lastRow = Range("A" & Rows.Count).End(xlUp).row

For Each cell In Range("A1:A" & lastRow)

Обратите внимание, что разница между использованием xlUp и xlDown .

  • xlUp дает вам последнюю ячейку, использованную в столбце A (поэтому вы начинаете с rows.count)
  • XlDown дает вам последнюю непустую ячейку (вы можете использовать диапазон («A1»). End (xlDown) .Row )

Вы заметите, что многие люди используют «A65536» вместо rows.count, но 65536 - это не предел для некоторых версий Excel, поэтому всегда лучше использовать rows.count.

...