Правильный /Более короткий код для выбора диапазона от последней строки до конца диапазона использования, VBA?

#excel #vba

Вопрос:

Мне нужно выбрать диапазон из after Last Row till end of usedRange . Приведенный ниже код работает, но есть ли правильный /более короткий код.

 Option Explicit  Sub Select_Blank_in_Usedrange()   Dim ws As Worksheet: Set ws = ActiveSheet  Dim LastR As Long, LastR_UsedRange As Long   LastR = ws.Cells(Rows.Count, "A").End(xlUp).Row  LastR_UsedRange = ws.UsedRange.Rows.Count    ws.Range("A" amp; LastR   1, "AE" amp; LastR_UsedRange).Select  End Sub  

введите описание изображения здесь

Комментарии:

1. Есть ли другие более длинные столбцы, чем A:A? Я имею в виду, чтобы было больше ссор… Я ничего не вижу на твоей фотографии.

2. Последний столбец-AE, и на самом деле я использовал диапазон вместо строк, чтобы ускорить код

3. Диапазон использования (строк) является динамическим и не фиксированным

4. Я не спрашивал о последней колонке… UsedRange может быть сложно, если у вас были значения, а затем удалить их. Он также будет включать в себя ячейки с внутренним цветом. Это то, чего ты хочешь?

5. Да, определенно

Ответ №1:

Если код работает и не содержит лишних частей, я бы сказал, что это хорошо. Если бы я предложил улучшение, это было бы сохранение соответствующих адресов в качестве объектов диапазона вместо номеров строк. Таким образом, вы можете собрать больший диапазон непосредственно из двух углов, вместо того, чтобы объединять адрес на заключительном этапе.

 Sub Select_Blank_in_Usedrange()    Dim ws As Worksheet: Set ws = ActiveSheet    Dim TopCorner As Range  Set TopCorner = ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1, 0)    Dim BottomCorner As Range  With ws.UsedRange.Columns(31)  Set BottomCorner = .Cells(.Cells.Count)  End With    ws.Range(TopCorner, BottomCorner).Select  End Sub  

Для меня это гораздо понятнее, и константы четко отображаются. Это облегчит последующее редактирование, если количество столбцов изменится или начальный столбец переместится с «А».

Ответ №2:

Самый короткий код будет следующим:

 Dim ws As Worksheet: Set ws = ActiveSheet  ws.Range("A" amp; ws.Range("A" amp; ws.rows.count).End(xlUp).row   1, _  "AE" amp; ws.UsedRange.rows.count   ws.UsedRange.cells(1).row - 1).Select  

Он также будет иметь дело со случаем, когда UsedRange не начинается с первого ряда…