Как выбрать весь лист 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 теперь является объектом диапазона, который содержит весь рабочий лист


у вас есть несколько вариантов здесь:

  1. использование свойства UsedRange
  2. найти последнюю строку и столбец, используемый
  3. используйте имитацию 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. найти последнюю ячейку, содержащую любое значение
  2. выберите ячейку (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).Выберите, если вы сделали с представлением столбца.


возможно, это может сработать:

ВГ.Range("A1", Sh.Диапазон ("A" И Строки.Рассчитывать.)End (xlUp))


ссылаюсь на первый вопрос, я смотрю на то же самое. Результат, который я получаю, записывая макрос, начинается с выбора ячейки 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)