Как выделить таблицу vba excel

 

Подскажите, пожалуйста, макрос, который будет выделять таблицу так, как если бы я нажал ctrl+A. Пробовал через запись макроса, но получается, если я потом добавлю в таблицу столбцы и строки и запущу этот макрос, то они уже не выделеяются. Спасибо!

 

Kestus

Пользователь

Сообщений: 19
Регистрация: 01.01.1970

{quote}{login=misha.name}{date=19.05.2011 04:28}{thema=Макрос для выделения таблицы}{post}Подскажите, пожалуйста, макрос, который будет выделять таблицу так, как если бы я нажал ctrl+A. Пробовал через запись макроса, но получается, если я потом добавлю в таблицу столбцы и строки и запущу этот макрос, то они уже не выделеяются. Спасибо!{/post}{/quote}  

     ActiveSheet.Select  
   Range(Selection, Selection.End(xlToRight)).Select  
   Range(Selection, Selection.End(xlDown)).Select  

  Выделяет все заполненые ячейки ко правой и нижней границы листа, начиная с А1 на активном листе.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

у меня нажатие в любой ячейке на листе Ctrl+A приводит к выделению всего листа целиком, т.е. всех столбцов и всех строк.  
а у вас не так?

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

У меня как у ikki :)  
Как выделить только CurrentRegion с клавиатуры — даже не знаю, никогда не задавался вопросом…

 

Спасибо Вам Shaitan и The_Prist за быстрый ответ!  
Оба варианта подходят. Спасибо!

 

ran

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

A это смотря где мышкой топнуть.  
Если внутри CurrentRegion — он и выделится, а если снаружи — весь лист

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

{quote}{login=RAN}{date=19.05.2011 04:46}{thema=}{post}A это смотря где мышкой топнуть.  
Если внутри CurrentRegion — он и выделится, а если снаружи — весь лист{/post}{/quote}  
логично :)  
но… неверно :(  
это я в первую очередь проверил, перед тем как постить.  
выделяются все ячейки.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

Не знаю, я весь лист истоптал — весь выделяется :)  

  XL2000

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

{quote}{login=The_Prist}{date=19.05.2011 04:51}{thema=}{post}Поясню: если Вы выделили ячейку даже внутри таблицы, но рядом с выделенной ячейкой нет ни одной смежной заполненной ячейки — выделится ВЕСЬ лист. Если же есть хоть одна смежная заполненная — то будет выделена прямоугольная область данных, ячейки которых так или иначе контактируют друг с другом.{/post}{/quote}  

  Дмитрий, это понятно.  
Я знаю, что такое CurrentRegion.  
Hugo, думаю, тоже знает.  

  пс. нажатие соответствующей кнопки на панели инструментов (чем, собственно и пользуюсь) всегда срабатывает правильно.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

Я тоже проверил — всё выделяется.  
Может где галка есть? Или от версии зависит?

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

ненужный мне вопрос, в общем-то…  
но интересно :)  

  фрагмент справки Ex 2002:  

  Клавиши для выделения данных и ячеек  
Выделение ячеек, строк, столбцов и объектов  

  CTRL+ПРОБЕЛ    
Выделение столбца целиком.    
SHIFT+ПРОБЕЛ    
Выделение строки целиком.    
CTRL+A    
Выделение листа целиком.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

{quote}{login=The_Prist}{date=19.05.2011 05:06}{thema=}{post}Попробуйте Ctrl+*{/post}{/quote}  
да, так работает.  
спасибо.  
получается, всё-таки от версии Excel зависит?

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

ran

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

Я в 2007 прбовал. -)  
При этом создал несколько CurrentRegion.  
Залезаешь внутрь любого — он и выделяется, вылез — весь лист.

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

#15

19.05.2011 20:37:35

Проверил Ctrl+A на своём 2003: внутри — только CurrentRegion, снаружи — весь лист.

Я очень новичок в Excel VB. Надеюсь, вы поможете мне с моей проблемой.

У меня есть несколько таких таблиц this

Таблицы могут редактироваться, например, путем вставки новых строк и т. Д. Пользователем.

Я хочу выделить и скопировать последнюю таблицу (ту, что находится в самой последней строке) и вставить ее в следующее доступное место на 3 строки вниз. Мне это удалось, но я могу только выделить и скопировать ячейки с данными. Таким образом, если в середине таблицы будет пустая строка или пустая последняя строка с границами, она не будет копироваться правильно, как показано здесь:

here

Мне все еще нужно копировать все в пределах границ, включая пустые строки, но мне не хватает навыков и знаний для этого. Надеюсь, ты сможешь помочь.

Вот мой код:

Sub CopyPaste()
    LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    FirstColumn = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlNext).Column
    LastColumn = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    BelowLastName = Cells.Find("", After:=Cells(LastRow, FirstColumn), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Row


    Cells(BelowLastName, FirstColumn).Select 'This selects C5 (refer image)
    Selection.Offset(-1).Select 'This selects C4 (refer image)
    Range(Selection, Cells(LastRow, LastColumn)).Select 'This highlights whole table
    Selection.Copy

    Cells(LastRow, FirstColumn).Select
    ActiveCell.Offset(3).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub

1 ответ

Лучший ответ

Попробуй это

Sub x()

Dim rEnd As Range, rStart As Range, i As Long

Set rEnd = Range("C" & Rows.Count).End(xlUp)

Do While rEnd.Offset(i).Borders(xlEdgeBottom).LineStyle = xlContinuous
    i = i - 1
Loop

Set rStart = rEnd.Offset(i + 1)

Range(rStart, rEnd).Resize(, 8).Copy rEnd.Offset(3)

End Sub


0

SJR
24 Май 2017 в 17:43

Вопрос:

Я нашел аналогичное решение этого вопроса в С#… См. Ссылку ниже

Как выделить все ячейки на листе в 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


Download Article


Download Article

This wikiHow teaches you how to start using Visual Basic procedures to select data in Microsoft Excel. As long as you’re familiar with basic VB scripting and using more advanced features of Excel, you’ll find the selection process pretty straight-forward.

  1. 1

    Select one cell on the current worksheet. Let’s say you want to select cell E6 with Visual Basic. You can do this with either of the following options:[1]

    ActiveSheet.Cells(6, 5).Select
    

    ActiveSheet.Range("E6").Select
    
  2. 2

    Select one cell on a different worksheet in the same workbook. Let’s say our example cell, E6, is on a sheet called Sheet2. You can use either of the following options to select it:

    Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
    
    Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
    

    Advertisement

  3. 3

    Select one cell on a worksheet in a different workbook. Let’s say you want to select a cell from Sheet1 in a workbook called BOOK2.XLS. Either of these two options should do the trick:

    Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(2,1)
    
    Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("A2")
    
  4. 4

    Select a cell relative to another cell. You can use VB to select a cell based on its location relative to the active (or a different) cell. Just be sure the cell exists to avoid errors. Here’s how to use :

    • Select the cell three rows below and four columns to the left of the active cell:

      ActiveCell.Offset(3, -4).Select
      
    • Select the cell five rows below and four columns to the right of cell C7:

      ActiveSheet.Cells(7, 3).Offset(5, 4).Select
      
  5. Advertisement

  1. 1

    Select a range of cells on the active worksheet. If you wanted to select cells C1:D6 on the current sheet, you can enter any of the following three examples:

    ActiveSheet.Range(Cells(1, 3), Cells(6, 4)).Select
    
    ActiveSheet.Range("C1:D6").Select
    
    ActiveSheet.Range("C1", "D6").Select
    
  2. 2

    Select a range from another worksheet in the same workbook. You could use either of these examples to select cells C3:E11 on a sheet called Sheet3:

    Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("C3:E11")
    
    Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("C3", "E11")
    
  3. 3

    Select a range of cells from a worksheet in a different workbook. Both of these examples would select cells E12:F12 on Sheet1 of a workbook called BOOK2.XLS:

    Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E12:F12")
    
    Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E12", "F12")
    
  4. 4

    Select a named range. If you’ve assigned a name to a range of cells, you’d use the same syntax as steps 4-6, but you’d replace the range address (e.g., «E12», «F12») with the range’s name (e.g., «Sales»). Here are some examples:

    • On the active sheet:

      ActiveSheet.Range("Sales").Select
      
    • Different sheet of same workbook:

      Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("Sales")
      
    • Different workbook:

      Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("Sales")
      
  5. 5

    Select a range relative to a named range. The syntax varies depending on the named range’s location and whether you want to adjust the size of the new range.

    • If the range you want to select is the same size as one called Test5 but is shifted four rows down and three columns to the right, you’d use:
      ActiveSheet.Range("Test5").Offset(4, 3).Select
      
    • If the range is on Sheet3 of the same workbook, activate that worksheet first, and then select the range like this:
      Sheets("Sheet3").Activate ActiveSheet.Range("Test").Offset(4, 3).Select
      
  6. 6

    Select a range and resize the selection. You can increase the size of a selected range if you need to. If you wanted to select a range called Database’ and then increase its size by 5 rows, you’d use this syntax:

    Range("Database").Select Selection.Resize(Selection.Rows.Count + 5, _Selection.Columns.Count).Select
    
  7. 7

    Select the union of two named ranges. If you have two overlapping named ranges, you can use VB to select the cells in that overlapping area (called the «union»). The limitation is that you can only do this on the active sheet. Let’s say you want to select the union of a range called Great and one called Terrible:

    • Application.Union(Range("Great"), Range("Terrible")).Select
      
    • If you want to select the intersection of two named ranges instead of the overlapping area, just replace Application.Union with Application.Intersect.
  8. Advertisement

  1. 1

    Use this example data for the examples in this method. This chart full of example data, courtesy of Microsoft, will help you visualize how the examples behave:[2]

    A1: Name B1: Sales C1: Quantity
    A2: a B2: $10 C2: 5
    A3: b B3: C3: 10
    A4: c B4: $10 C4: 5
    A5: B5: C5:
    A6: Total B6: $20 C6: 20
  2. 2

    Select the last cell at the bottom of a contiguous column. The following example will select cell A4:

    ActiveSheet.Range("A1").End(xlDown).Select
    
  3. 3

    Select the first blank cell below a column of contiguous cells. The following example will select A5 based on the chart above:

    ActiveSheet.Range("A1").End(xlDown).Offset(1,0).Select
    
  4. 4

    Select a range of continuous cells in a column. Both of the following examples will select the range A1:A4:

    ActiveSheet.Range("A1", ActiveSheet.Range("a1").End(xlDown)).Select
    
    ActiveSheet.Range("A1:" & ActiveSheet.Range("A1"). End(xlDown).Address).Select
    
  5. 5

    Select a whole range of non-contiguous cells in a column. Using the data table at the top of this method, both of the following examples will select A1:A6:

    ActiveSheet.Range("A1",ActiveSheet.Range("A65536").End(xlUp)).Select
    
    ActiveSheet.Range("A1",ActiveSheet.Range("A65536").End(xlUp)).Select
    
  6. Advertisement

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

Video

  • The «ActiveSheet» and «ActiveWorkbook» properties can usually be omitted if the active sheet and/or workbook(s) are implied.

Thanks for submitting a tip for review!

Advertisement

About This Article

Article SummaryX

1. Use ActiveSheet.Range(«E6»).Select to select E6 on the active sheet.
2. Use Application.Goto (ActiveWorkbook.Sheets(«Sheet2»).Range(«E6»)) to select E6 on Sheet2.
3. Add Workbooks(«BOOK2.XLS») to the last step to specify that the sheet is in BOOK2.XLS.

Did this summary help you?

Thanks to all authors for creating a page that has been read 167,768 times.

Is this article up to date?

Помогаю со студенческими работами здесь

Выделить диапазон заполненных ячеек
Добрый день.

помогите пожалуйста сообразить:

как мне выделить диапазон заполненных ячеек в…

Подсчет заполненных ячеек Excel
Здравствуйте!
Достаточно давно столкнулся с проблемой подсчета заполненных ячеек экселя, которую…

Задать максимальное количество заполненных ячеек в строке
Как задать свое количество заполненных ячеек в строке, чтобы заполнение ячеек символами…

Определить количество заполненных ячеек в строке Excel
Подскажите пожалуйста.
Есть код который определяет количество заполненных строк на листе:…

Функция ЕСЛИ только для заполненных ячеек
Всем доброго времени суток!

Необходимо было сделать систему коэффициентов для моей таблицы, но…

Подсчет заполненных и пустых ячеек в столбце DataGridview
Всем привет!
Подскажите как правильно подсчитать кол-во пустых и не пустых ячеек в столбце.
Dim…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

Понравилась статья? Поделить с друзьями:
  • Как выделить строку миф excel
  • Как выделить строку или столбец таблицы в excel
  • Как выделить строку или столбец в ms word
  • Как выделить строку в excel цветом по условию значение в ячейке excel
  • Как выделить строку в excel с определенным значением