I found a similar solution to this question in c# How to Select all the cells in a worksheet in Excel.Range object of c#?
What is the process to do this in VBA?
I select data normally by using «ctrl+shift over arrow, down arrow» to select an entire range of cells. When I run this in a macro it codes out A1:Q398247930, for example. I need it to just be
.SetRange Range("A1:whenever I run out of rows and columns")
I could easily do it myself without a macro, but I’m trying to make the entire process a macro, and this is just a piece of it.
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:
There are other parts where I might want to use the same code but the range is say «C3:End of rows & columns». Is there a way in VBA to get the location of the last cell in the document?
asked Jul 30, 2013 at 18:50
C. TewaltC. Tewalt
2,2612 gold badges29 silver badges47 bronze badges
I believe you want to find the current region of A1 and surrounding cells — not necessarily all cells on the sheet.
If so — simply use…
Range(«A1»).CurrentRegion
answered Jul 30, 2013 at 19:17
ExcelExpertExcelExpert
3522 silver badges4 bronze badges
1
You can simply use cells.select
to select all cells in the worksheet. You can get a valid address by saying Range(Cells.Address)
.
If you want to find the last Used Range
where you have made some formatting change or entered a value into you can call ActiveSheet.UsedRange
and select it from there. Hope that helps.
June7
19.5k8 gold badges24 silver badges33 bronze badges
answered Jul 30, 2013 at 19:11
chanceachancea
5,8083 gold badges28 silver badges39 bronze badges
2
you can use all cells as a object like this :
Dim x as Range
Set x = Worksheets("Sheet name").Cells
X is now a range object that contains the entire worksheet
answered Apr 15, 2015 at 11:47
you have a few options here:
- Using the UsedRange property
- find the last row and column used
- use a mimic of shift down and shift right
I personally use the Used Range and find last row and column method most of the time.
Here’s how you would do it using the UsedRange property:
Sheets("Sheet_Name").UsedRange.Select
This statement will select all used ranges in the worksheet, note that sometimes this doesn’t work very well when you delete columns and rows.
The alternative is to find the very last cell used in the worksheet
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
What this code is doing:
- Find the last cell containing any value
- select cell(1,1) all the way to the last cell
answered Jul 30, 2013 at 20:32
Derek ChengDerek Cheng
5353 silver badges8 bronze badges
3
Another way to select all cells within a range, as long as the data is contiguous, is to use Range("A1", Range("A1").End(xlDown).End(xlToRight)).Select
.
answered Mar 29, 2019 at 19:38
I would recommend recording a macro, like found in this post;
Excel VBA macro to filter records
But if you are looking to find the end of your data and not the end of the workbook necessary, if there are not empty cells between the beginning and end of your data, I often use something like this;
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
You are left with R = to the number of the row after your data ends. This could be used for the column as well, and then you could use something like Cells(C , R).Select, if you made C the column representation.
answered Jul 30, 2013 at 19:25
MakeCentsMakeCents
7321 gold badge5 silver badges15 bronze badges
2
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
To use with ActiveSheet:
Call SelectAllCellsInSheet(ActiveSheet.Name)
answered Mar 14, 2017 at 20:57
Yehia AmerYehia Amer
5985 silver badges11 bronze badges
Here is what I used, I know it could use some perfecting, but I think it will help others…
''STYLING''
Dim sheet As Range
' Find Number of rows used
Dim Final As Variant
Final = Range("A1").End(xlDown).Row
' Find Last Column
Dim lCol As Long
lCol = Cells(1, Columns.Count).End(xlToLeft).Column
Set sheet = ActiveWorkbook.ActiveSheet.Range("A" & Final & "", Cells(1, lCol ))
With sheet
.Interior.ColorIndex = 1
End With
answered Mar 16, 2019 at 4:29
I have found that the Worksheet «.UsedRange» method is superior in many instances to solve this problem.
I struggled with a truncation issue that is a normal behaviour of the «.CurrentRegion» method. Using [ Worksheets(«Sheet1»).Range(«A1»).CurrentRegion ] does not yield the results I desired when the worksheet consists of one column with blanks in the rows (and the blanks are wanted). In this case, the «.CurrentRegion» will truncate at the first record. I implemented a work around but recently found an even better one; see code below that allows copying the whole set to another sheet or to identify the actual address (or just rows and columns):
Sub mytest_GetAllUsedCells_in_Worksheet()
Dim myRange
Set myRange = Worksheets("Sheet1").UsedRange
'Alternative code: set myRange = activesheet.UsedRange
'use msgbox or debug.print to show the address range and counts
MsgBox myRange.Address
MsgBox myRange.Columns.Count
MsgBox myRange.Rows.Count
'Copy the Range of data to another sheet
'Note: contains all the cells with that are non-empty
myRange.Copy (Worksheets("Sheet2").Range("A1"))
'Note: transfers all cells starting at "A1" location.
' You can transfer to another area of the 2nd sheet
' by using an alternate starting location like "C5".
End Sub
answered May 2, 2019 at 19:38
Maybe this might work:
Sh.Range(«A1», Sh.Range(«A» & Rows.Count).End(xlUp))
answered Oct 31, 2014 at 18:38
Refering to the very first question, I am looking into the same.
The result I get, recording a macro, is, starting by selecting cell A76:
Sub find_last_row()
Range("A76").Select
Range(Selection, Selection.End(xlDown)).Select
End Sub
answered Aug 7, 2015 at 12:40
Вопрос:
Я нашел аналогичное решение этого вопроса в С#… См. Ссылку ниже
Как выделить все ячейки на листе в Excel.Range объект С#?
У кого-нибудь есть фрагмент, чтобы сделать это в VBA? Я не очень знаком с VBA, так что это было бы полезно. Вот что у меня так далеко…
Я обычно выбираю данные, используя “Ctrl + стрелка над стрелкой, стрелка вниз”, чтобы выделить весь диапазон ячеек. Когда я запускаю это в макросе, он кодирует 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
редактировать: есть другие части, где я мог бы использовать тот же код, но диапазон, скажем, “C3: конец строк и столбцов”. В VBA есть способ получить местоположение последней ячейки в документе?
Спасибо!
Лучший ответ:
Я считаю, что вы хотите найти текущую область A1 и окружающих клеток – не обязательно все ячейки на листе.
Если так – просто используйте…
Range ( “A1” ). CurrentRegion
Ответ №1
Вы можете просто использовать cells.select
, чтобы выбрать ячейки all на листе. Вы можете получить действительный адрес, указав Range(Cells.Address)
.
Если вы хотите найти последний Used Range
, где вы внесли некоторые изменения форматирования или ввели значение, вы можете вызвать ActiveSheet.UsedRange
и выбрать его там. Надеюсь, что поможет
Ответ №2
вы можете использовать все ячейки как объект:
Dim x as Range
Set x = Worksheets("Sheet name").Cells
X теперь является объектом диапазона, который содержит весь рабочий лист
Ответ №3
у вас есть несколько вариантов:
- Использование свойства UsedRange
- найдите последнюю используемую строку и столбец
- используйте мимику сдвига и сдвига вправо
Я лично использую использованный диапазон и чаще всего использую метод последней строки и столбца.
Вот как вы это сделаете, используя свойство 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) до последней ячейки
Ответ №4
Я бы рекомендовал записывать макрос, например, найденный в этом сообщении;
макрос 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 = до номера строки после окончания ваших данных. Это также можно использовать для столбца, а затем вы можете использовать что-то вроде Cells (C, R). Выберите, если вы сделали C представление столбца.
Ответ №5
Вот то, что я использовал, я знаю, что это может использовать некоторые усовершенствования, но я думаю, что это поможет другим…
''STYLING''
Dim sheet As Range
' Find Number of rows used
Dim Final As Variant
Final = Range("A1").End(xlDown).Row
' Find Last Column
Dim lCol As Long
lCol = Cells(1, Columns.Count).End(xlToLeft).Column
Set sheet = ActiveWorkbook.ActiveSheet.Range("A" & Final & "", Cells(1, lCol ))
With sheet
.Interior.ColorIndex = 1
End With
Ответ №6
Возможно, это может сработать:
Sh.Range( “A1”, Sh.Range( “A” и Rows.Count).End(xlUp))
Ответ №7
Обращаясь к самому первому вопросу, я изучаю то же самое.
Результат, который я получаю, записывая макрос, начинается с выбора ячейки A76:
Sub find_last_row()
Range("A76").Select
Range(Selection, Selection.End(xlDown)).Select
End Sub
Ответ №8
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)
Ответ №9
Другой способ выбора всех ячеек в диапазоне, если данные непрерывны, состоит в использовании Range("A1", Range("A1").End(xlDown).End(xlToRight)).Select
.
Ответ №10
Я обнаружил, что метод “.UsedRange” на рабочем листе во многих случаях лучше для решения этой проблемы. Я боролся с проблемой усечения, которая является нормальным поведением метода .CurrentRegion. Использование [Worksheets (“Sheet1”). Range (“A1”). CurrentRegion] не дает желаемых результатов, когда рабочий лист состоит из одного столбца с пробелами в строках (и пробелы требуются). В этом случае “.CurrentRegion” будет обрезаться при первой записи. Я реализовал работу вокруг, но недавно нашел еще лучшую; см. код ниже, который позволяет скопировать весь набор на другой лист или идентифицировать фактический адрес (или только строки и столбцы):
Sub mytest_GetAllUsedCells_in_Worksheet()
Dim myRange
Set myRange = Worksheets("Sheet1").UsedRange
'Alternative code: set myRange = activesheet.UsedRange
'use msgbox or debug.print to show the address range and counts
MsgBox myRange.Address
MsgBox myRange.Columns.Count
MsgBox myRange.Rows.Count
'Copy the Range of data to another sheet
'Note: contains all the cells with that are non-empty
myRange.Copy (Worksheets("Sheet2").Range("A1"))
'Note: transfers all cells starting at "A1" location.
' You can transfer to another area of the 2nd sheet
' by using an alternate starting location like "C5".
End Sub
Доброго времени суток, господа. |
|
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Вычислить номер последней строки и номер последнего столбца. И уже потом выделять. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#3 08.01.2013 21:58:22 В общем случае это может выглядеть так:
|
||
ikki Пользователь Сообщений: 9709 |
поэкспериментиовал… имхо, Cells брать смысла нет, остается выбрать между CurrentRegion и UsedRange — смотря по задаче. Изменено: ikki — 08.01.2013 22:07:47 фрилансер Excel, VBA — контакты в профиле |
Андрей Пользователь Сообщений: 30 |
В строке макроса в место |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#6 08.01.2013 22:06:34
Это Вы немного погорячились |
||
Андрей, я так пытался сделать, но макрос после этого вместо 2х секунд начал выполняться 20 минут ikki, это хороший вариант. Загуглю позже, спасибо за посказку. Юрий М, спасибо. Сейчас буду пробовать, позже отпишусь о результатах. |
|
Вот что мне помогло — http://www.youtube.com/watch?v=YXDJjTzB6EQ В моем случае Ctrl+A работает как CurrentRegion. Юрий М, я так и не осилил вашу часть кода (не шибко то я опытен в программировании vba), не могли бы вы описать в чем собственно заключается идея исспользования данного кода? |
|
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#9 09.01.2013 00:59:44
Совет Cells.Select — плохой совет: будут выделены все ячейки на листе
А что её осиливать? На чистом листе введите что-нибудь, например, в ячейки А10 и F1. Затем выполните тот маленький макрос. Будет выделен ТОЛЬКО диапазон, не выходящий за пределы ячеек с данными. |
||||
Derian Fox Пользователь Сообщений: 104 |
#10 10.01.2013 14:03:28 Юрий М, Потестил. Все шикарно работает, спасибо за обьяснение. |
Я нашел аналогичное решение этого вопроса в C # Как выделить все ячейки на листе в объекте Excel.Range C #?
Как это сделать в VBA?
Обычно я выбираю данные, используя «Ctrl + Shift над стрелкой, стрелка вниз», чтобы выбрать весь диапазон ячеек. Когда я запускаю это в макросе, он, например, кодирует 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
изменить:
Есть и другие части, в которых я мог бы использовать тот же код, но диапазон говорит «C3: Конец строк и столбцов». Есть ли способ в VBA получить местоположение последней ячейки в документе?
11 ответов
Лучший ответ
Я считаю, что вы хотите найти текущую область A1 и окружающих ячеек — не обязательно все ячейки на листе. Если так — просто используйте … Диапазон («A1»). CurrentRegion
29
ExcelExpert
30 Июл 2013 в 23:17
Вы можете просто использовать cells.select
для выбора всех ячеек на листе. Вы можете получить действительный адрес, сказав Range(Cells.Address)
.
Если вы хотите найти последний Used Range
, в котором вы изменили форматирование или ввели значение, вы можете вызвать ActiveSheet.UsedRange
и выбрать его оттуда. надеюсь, это поможет
25
chancea
30 Июл 2013 в 23:11
У вас есть несколько вариантов:
- Использование свойства UsedRange
- найти последнюю использованную строку и столбец
- используйте имитацию сдвига вниз и вправо
Я лично использую Используемый диапазон и большую часть времени нахожу метод последней строки и столбца.
Вот как это сделать с помощью свойства 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) до последней ячейки
8
Faisal Mehmood
7 Окт 2017 в 07:31
Другой способ выбрать все ячейки в диапазоне, если данные являются смежными, — использовать Range("A1", Range("A1").End(xlDown).End(xlToRight)).Select
.
3
Bob the Builder
29 Мар 2019 в 22:38
Я бы порекомендовал записать макрос, как в этом посте;
Макрос 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 = номер строки после окончания ваших данных. Это также можно использовать для столбца, а затем вы можете использовать что-то вроде Cells (C, R). Выберите, если вы сделали C представлением столбца.
1
Community
23 Май 2017 в 15:00
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)
1
Yehia Amer
14 Мар 2017 в 23:57
Вот то, что я использовал, я знаю, что это можно улучшить, но я думаю, что это поможет другим …
''STYLING''
Dim sheet As Range
' Find Number of rows used
Dim Final As Variant
Final = Range("A1").End(xlDown).Row
' Find Last Column
Dim lCol As Long
lCol = Cells(1, Columns.Count).End(xlToLeft).Column
Set sheet = ActiveWorkbook.ActiveSheet.Range("A" & Final & "", Cells(1, lCol ))
With sheet
.Interior.ColorIndex = 1
End With
1
FreeSoftwareServers
16 Мар 2019 в 07:29
Я обнаружил, что метод рабочего листа «.UsedRange» во многих случаях лучше подходит для решения этой проблемы. Я боролся с проблемой усечения, которая является нормальным поведением метода «.CurrentRegion». Использование [Worksheets («Sheet1»). Range («A1»). CurrentRegion] не дает желаемых результатов, когда рабочий лист состоит из одного столбца с пробелами в строках (а пробелы требуются). В этом случае «.CurrentRegion» будет усечен на первой записи. Я реализовал обходной путь, но недавно нашел еще лучший вариант; см. код ниже, который позволяет скопировать весь набор на другой лист или определить фактический адрес (или только строки и столбцы):
Sub mytest_GetAllUsedCells_in_Worksheet()
Dim myRange
Set myRange = Worksheets("Sheet1").UsedRange
'Alternative code: set myRange = activesheet.UsedRange
'use msgbox or debug.print to show the address range and counts
MsgBox myRange.Address
MsgBox myRange.Columns.Count
MsgBox myRange.Rows.Count
'Copy the Range of data to another sheet
'Note: contains all the cells with that are non-empty
myRange.Copy (Worksheets("Sheet2").Range("A1"))
'Note: transfers all cells starting at "A1" location.
' You can transfer to another area of the 2nd sheet
' by using an alternate starting location like "C5".
End Sub
1
Lifygen
2 Май 2019 в 23:13
Возможно, это может сработать:
Sh.Range («A1», Sh.Range («A» & Rows.Count) .End (xlUp))
0
Sarah
31 Окт 2014 в 21:38
Что касается самого первого вопроса, я рассматриваю то же самое. В результате я получаю запись макроса, начиная с выбора ячейки A76:
Sub find_last_row()
Range("A76").Select
Range(Selection, Selection.End(xlDown)).Select
End Sub
0
Pavlin Todorov
7 Авг 2015 в 15:40
Вы можете использовать все ячейки как объект следующим образом:
Dim x as Range
Set x = Worksheets("Sheet name").Cells
X теперь является объектом диапазона, который содержит весь рабочий лист
16
user4791681
15 Апр 2015 в 14:47
Я нашел аналогичное решение этого вопроса в 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).Выберите, если вы сделали с представлением столбца.
возможно, это может сработать:
ВГ.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)