Как выбрать весь лист excel с диапазоном, используя макрос в VBA?
Я нашел аналогичное решение этого вопроса в c#... См. ссылку ниже
Как выбрать все ячейки на листе в Excel.Объект диапазона c#?
у кого-нибудь есть фрагмент, чтобы сделать это в VBA? Я не очень хорошо знаком с VBA, поэтому это было бы полезно. Вот что у меня есть...
Я обычно выбираю данные, используя "ctrl+shift over arrow, стрелка вниз", чтобы выбрать весь диапазон ячеек. Когда я запускаю это в макросе, он кодирует например, out A1: Q398247930. Мне нужно, чтобы это было просто
.SetRange Range("A1:whenever I run out of rows and columns")
Это очень просто, и я мог бы легко сделать это сам без макроса, но я пытаюсь сделать весь процесс макроса, и это только часть его.
Sub sort()
'sort Macro
Range("B2").Select
ActiveWorkbook.Worksheets("Master").sort.SortFields.Clear
ActiveWorkbook.Worksheets("Master").sort.SortFields.Add Key:=Range("B2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Master").sort
.SetRange Range("A1:whenever I run out of rows and columns")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
edit: Есть другие части, где я мог бы использовать тот же код, но диапазон говорит "C3:конец строк и столбцов". Есть ли способ в VBA получить местоположение последней ячейки в документ?
спасибо!
8 ответов
Я считаю, что вы хотите найти текущую область A1 и окружающие ячейки - не обязательно все ячейки на листе. Если да-просто используйте... Диапазон ("A1").CurrentRegion
вы можете просто использовать cells.select
выберите все ячейки на листе. Вы можете получить действительный адрес, сказав Range(Cells.Address)
.
если вы хотите найти последние Used Range
где вы сделали некоторые изменения форматирования или ввели значение в вы можете вызвать ActiveSheet.UsedRange
и выбрать его оттуда. Надеюсь, это поможет
вы можете использовать все ячейки в качестве объекта, как это:
Dim x as Range
Set x = Worksheets("Sheet name").Cells
X теперь является объектом диапазона, который содержит весь рабочий лист
у вас есть несколько вариантов здесь:
- использование свойства UsedRange
- найти последнюю строку и столбец, используемый
- используйте имитацию shift down и shift right
Я лично использую используемый диапазон и большую часть времени нахожу метод последней строки и столбца.
вот как вы это сделаете, используя свойство UsedRange:
Sheets("Sheet_Name").UsedRange.Select
эта инструкция будет выбирать все используемые диапазоны на листе, обратите внимание, что иногда это не очень хорошо работает при удалении столбцов и строк.
альтернативой является поиск самой последней ячейки, используемой в листе
Dim rngTemp As Range
Set rngTemp = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
If Not rngTemp Is Nothing Then
Range(Cells(1, 1), rngTemp).Select
End If
что делает этот код:
- найти последнюю ячейку, содержащую любое значение
- выберите ячейку (1,1) до последней ячейки
Я бы рекомендовал записать макрос, как в этом посте;
Excel VBA макрос для фильтрации записей
но если вы хотите найти конец ваших данных, а не конец книги, необходимой, если между началом и концом ваших данных нет пустых ячеек, я часто использую что-то вроде этого;
R = 1
Do While Not IsEmpty(Sheets("Sheet1").Cells(R, 1))
R = R + 1
Loop
Range("A5:A" & R).Select 'This will give you a specific selection
вы остаетесь с R = на номер строки после завершения ваших данных. Это может быть использовано и для столбца, и тогда вы можете использовать что-то вроде ячеек(C , R).Выберите, если вы сделали с представлением столбца.
ссылаюсь на первый вопрос, я смотрю на то же самое. Результат, который я получаю, записывая макрос, начинается с выбора ячейки A76:
Sub find_last_row()
Range("A76").Select
Range(Selection, Selection.End(xlDown)).Select
End Sub
Sub SelectAllCellsInSheet(SheetName As String)
lastCol = Sheets(SheetName).Range("a1").End(xlToRight).Column
Lastrow = Sheets(SheetName).Cells(1, 1).End(xlDown).Row
Sheets(SheetName).Range("A1", Sheets(SheetName).Cells(Lastrow, lastCol)).Select
End Sub
для использования с ActiveSheet:
Call SelectAllCellsInSheet(ActiveSheet.Name)