#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
не начинается с первого ряда…