Как выбрать весь лист 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)