Выделить последнюю строку excel vba

0 / 0 / 0

Регистрация: 16.02.2016

Сообщений: 18

1

Найти и выделить последнюю строку

19.02.2016, 17:58. Показов 4402. Ответов 5


Студворк — интернет-сервис помощи студентам

Отфильтровал, получил диапазон, нашол последнюю строку

Код

lRws = Cells(Rows.Count, "I").End(xlUp).Row

Хочу выделить что бы удалить:

а он пишет о несоответствии типов! lRws2 получилось чилом можно складывать и умножать, скажите что ему надо?



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

19.02.2016, 18:22

2

Walery100, чтобы удалить, выделять не нужно

Visual Basic
1
Rows("2:" & lRws2).Delete 'Select



0



0 / 0 / 0

Регистрация: 16.02.2016

Сообщений: 18

19.02.2016, 20:02

 [ТС]

3

Ага! Спасибо, работает. Про & я бы сам не догодался и спасибо за

заменило грамозкое и непонятное

Код

 Selection.Delete Shift:=xlUp

Добавлено через 1 час 20 минут
А скажите если надо выделить диапазон, как правильно написать?
По аналогии: ActiveSheet.Range(«$A$1:P&lRws1») — не получается



0



Святой НякаЛайк

653 / 246 / 88

Регистрация: 28.10.2015

Сообщений: 520

19.02.2016, 21:10

4

Visual Basic
1
ActiveSheet.Range("A1:P" & lRws1).Select

Между прочим, можно бы догадаться из этого ответа:

Visual Basic
1
Rows("2:" & lRws2).Delete 'Select

плюс пара проб (+-пара ошибок)
пс: мне кажется, или вы всерьез восприняли это

Visual Basic
1
Delete 'Select

как урок синтаксиса от знатока?
‘Select — это просто комментарий, который не обработается интерпретатором. Склонные к саморазвитию или просто начинающие программисты порой сталкиваются с тем, что какая-то строка кода не срабатывает, перед этой строкой ставят апостроф, после чего она превращается в комментарий и больше не функционирует как программный код. Такой отладочный маневр называется «Закомментировать строку кода»



0



0 / 0 / 0

Регистрация: 16.02.2016

Сообщений: 18

19.02.2016, 23:48

 [ТС]

5

Спасибо!
Я просто дальтоник ине сразу заметил, что ‘Select поменяло цвет!
Раньше как увлечение програмировал в 1С, там несколько другая логика в синтаксе и ссылках, надо привыкнуть.
Ещё раз спасибо.



0



653 / 246 / 88

Регистрация: 28.10.2015

Сообщений: 520

20.02.2016, 00:32

6

1C и visual basic близкие родственники, но различия есть, а как говорится, дьявол кроется в мелочах. Чтобы освоить синтаксис бейсика, читайте учебно-методические материалы и конечно готовые коды мастеров. Удачи!



0



 

zenija2007

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

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

#1

13.09.2017 08:27:59

Код
Sub test()
    Dim str As String
    str = ActiveSheet.ListObjects("Разделительная").Range.Address
    Range(str).Cells(Range(str).Rows.Count, 1).End(xlUp).Row.Select
End Sub

Прикрепленные файлы

  • primer.xlsm (17.8 КБ)

 

Sanja

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

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

#2

13.09.2017 08:31:32

Код
Rows(Range(str).Cells(Range(str).Rows.Count, 1).End(xlUp).Row).Select

Согласие есть продукт при полном непротивлении сторон.

 

Karataev

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

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

#3

13.09.2017 08:32:38

В данном коде «Row» — это не объект, а номер строки. Поэтому правильно так:

Код
Range(str).Cells(Range(str).Rows.Count, 1).End(xlUp).Resize(, 8).Select

Но вообще не обязательно выделять строку, чтобы с ней что-то сделать.

Изменено: Karataev13.09.2017 08:38:48

 

zenija2007

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

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

Karataev, Sanja,
работает но как-то странно — выделяет не последнюю а предпоследнюю строку. или чистые строки не учитывает?

Изменено: zenija200713.09.2017 08:40:47

 

Sanja

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

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

#5

13.09.2017 08:41:19

Для Умной таблицы (как в Вашем примере) и именно ПОСЛЕДНЮЮ строку (а не ПОСЛЕДНЮЮ СТРОКУ С ДАННЫМИ, как в Вашем примере) можно выделить так

Код
    With ActiveSheet.ListObjects("Разделительная")
        .ListRows(.ListRows.Count).Range.Select
    End With

Согласие есть продукт при полном непротивлении сторон.

 

Sanja

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

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

#6

13.09.2017 08:42:07

Цитата
zenija2007 написал: выделяет не последнюю а предпоследнюю строку

См. выше. Ваша конструкция ищет последнюю строку с ДАННЫМИ

Согласие есть продукт при полном непротивлении сторон.

 

zenija2007

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

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

 

Sanja

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

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

#8

13.09.2017 08:47:33

Чуть короче

Код
    With ActiveSheet.ListObjects("Разделительная").ListRows
        .Item(.Count).Range.Select
    End With

Согласие есть продукт при полном непротивлении сторон.

 

zenija2007

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

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

#9

13.09.2017 11:18:55

Sanja, а сможете сразу на этом примере показать, как быстро расширить диапазон таблицы Разделительная на 1 строку вниз?
Пробую делать как показано в справке microsoft

Код
Sub test()
    With ActiveSheet.ListObjects("Разделительная")
        .Resize (.ListRows.Count + 1)
    End With
End Sub

но ошибка. при этом и в многочисленных примерах на форумах показано именно такое решение.

Код
Sub test()
    Dim r As Range
    With ActiveSheet.ListObjects("Разделительная")
        r = .ListRows(.ListRows.Count).Range
    End With
    r.Select
End Sub

тут тоже ошибка при попытке запомнить полученный диапазон в переменную и тоже не могу найти решения

Изменено: zenija200713.09.2017 11:23:10

 

Karataev

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

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

#10

13.09.2017 11:23:44

В первом примере ошибка, т.к. в скобках нужно указать объект «Range», а Вы указываете число — количество строк.
Можно сделать так:

Код
Sub test()
    Dim objList As ListObject
    Set objList = ActiveSheet.ListObjects("Разделительная")
    objList.Resize objList.Range.Resize(objList.Range.Rows.Count + 1)
End Sub
 

zenija2007

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

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

#11

13.09.2017 11:39:01

Karataev,
спасибо работает, сам бы ни за что не додумался. а может быть знаете что может мешать сохранить диапазон ListObject в переменную Range? Приходится применять костыль в виде address в текстовую переменную, но сохранить диапазон удобнее.

Код
Sub test()    
    Dim r As Range
    With ActiveSheet.ListObjects("Разделительная")
        r = .ListRows(.ListRows.Count).Range
    End With
    r.Select
End Sub

Изменено: zenija200713.09.2017 11:39:17

 

Karataev

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

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

#12

13.09.2017 11:42:40

Может быть так подойдет?

Код
Sub test()
    Dim objList As ListObject
    Set objList = ActiveSheet.ListObjects("Разделительная")
End Sub

После чего можно обращаться к умной таблице по ссылке «objList». В этой ссылке есть объект «Range»:

Код
Sub test()
    Dim objList As ListObject
    Set objList = ActiveSheet.ListObjects("Разделительная")
    objList.Resize objList.Range.Resize(objList.Range.Rows.Count + 1)
    MsgBox objList.Range.Address
End Sub
 

Sanja

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

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

#13

13.09.2017 11:51:32

Ресурс

, к которому сам часто обращаюсь при использовании Умных таблиц
Там и про Resize есть

Изменено: Sanja13.09.2017 11:52:23

Согласие есть продукт при полном непротивлении сторон.

Выделение и закрашивание последней строки макросом

Maryasha

Дата: Четверг, 26.11.2015, 16:22 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Уважаемые форумчане, подскажите как выделять последнюю строчку в таблице макросом и заодно красить эту строчку в какой-либо цвет? Спасибо!

К сообщению приложен файл:

1078045.xlsx
(44.8 Kb)

 

Ответить

Manyasha

Дата: Четверг, 26.11.2015, 16:36 |
Сообщение № 2

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Maryasha, так подойдет?
[vba]

Код

Sub get_last_row()
    lr = Sheets(«Журнал движения»).[a1].CurrentRegion.Rows.Count
    lc = Sheets(«Журнал движения»).[a1].CurrentRegion.Columns.Count
    Range(Cells(lr + 1, 1), Cells(lr + 1, lc)).Interior.Color = vbYellow
End Sub

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Wasilich

Дата: Четверг, 26.11.2015, 16:40 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 1232


Репутация:

326

±

Замечаний:
0% ±


2003

Или так
[vba]

Код

Sub www()
    S = Range(«A» & Rows.Count).End(xlUp).Row +1
    Range(«A» & S & «:W» & S).Interior.ColorIndex = 6
End Sub

[/vba]

 

Ответить

Maryasha

Дата: Четверг, 26.11.2015, 17:00 |
Сообщение № 4

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, Wasilic, а как именно выделить последнюю строчку в таблице?

 

Ответить

Manyasha

Дата: Четверг, 26.11.2015, 17:05 |
Сообщение № 5

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Maryasha, в моем коде [vba][/vba]
в коде Wasilic, [vba][/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Maryasha

Дата: Четверг, 26.11.2015, 17:20 |
Сообщение № 6

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Danke schon!

 

Ответить

Определение адреса выделенного диапазона ячеек на листе Excel с помощью кода VBA. Определение номера первой и последней строки. Программное выделение диапазона.

Адрес выделенного диапазона

Для определения адреса выделенного диапазона ячеек в VBA Excel используется свойство Address объекта Selection.

Объект Selection — это совокупность всех выделенных ячеек на листе Excel. Это может быть одна ячейка, смежный или несмежный диапазон ячеек, представляющий коллекцию смежных диапазонов. Если выделение состоит из несмежного диапазона, адреса смежных диапазонов, из которых он состоит, будут перечислены через запятую.

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

Несмежный диапазон — совокупность (коллекция) смежных диапазонов (прямоугольных областей смежных ячеек).

Стоит отметить: несмотря на то, что в выделенном диапазоне может содержаться много ячеек, активной может быть только одна. Она представлена объектом ActiveCell. Для определения ее адреса в коде VBA Excel также используется свойство Address.

Sub Primer1()

MsgBox «Адрес выделенного диапазона: « & Selection.Address & _

vbNewLine & «Адрес активной ячейки: « & ActiveCell.Address & _

vbNewLine & «Номер строки активной ячейки: « & ActiveCell.Row & _

vbNewLine & «Номер столбца активной ячейки: « & ActiveCell.Column

End Sub

Скопируйте и запустите код на выполнение. В результате получите что-то вроде этого, зависящее от того, какие диапазоны вы выберите:

Информационное окно с адресами выделенного диапазона и активной ячейки

Определение адресов выделенного диапазона и активной ячейки

Выделение ячеек и диапазонов

Выделить несмежный диапазон ячеек можно следующим образом:

Sub Primer2()

Range(«B4:C7,E5:F7,D8»).Select

End Sub

Как видно из примера, в адресной строке объекта Range перечисляются адреса смежных диапазонов, составляющих общий несмежный диапазон, через запятую. Выделение осуществляется методом Select объекта Range.

Определение номеров первой и последней строки

Чтобы вычислить номера первой и последней строки выделенного диапазона, будем исходить из того, что первая ячейка смежного диапазона находится на первой строке, а последняя — на последней строке выделенного диапазона.

Sub Primer3()

Dim i1 As Long, i2 As Long

i1 = Selection.Cells(1).Row

i2 = Selection.Cells(Selection.Cells.Count).Row

MsgBox «Первая строка: « & i1 & _

vbNewLine & «Последняя строка: « & i2

End Sub

Результат будет таким, зависит от выделенного диапазона:

Информационное окно с номерами первой и последней строки диапазона

Номера первой и последней строки выделенного смежного диапазона

Таким же образом можно вычислить номера первого и последнего столбцов выделенного диапазона, которые можно использовать для обработки информации по столбцам.

Обратите внимание, что для несмежных диапазонов этот пример не работает.

На практике я использовал определение номеров первой и последней строк по выделенному диапазону для формирования файла загрузки данных держателей дисконтных карт на сервис отправки СМС-сообщений. Оказалось, что базу данных клиентов заполнять в таблице Excel намного удобнее, чем на портале сервиса, а для загрузки в сервис достаточно сформировать несложный файл. Заполнил новые строки, выделил их по любому столбцу, нажал кнопку и файл готов.


We use  Range.SpecialCells() method in the below VBA Code to find and return details of last used row, column, and cell in a worksheet.

Sample Data:

Sample Data

Syntax:

expression.SpecialCells (Type, Value)

Eg: To return the last used cell address in an activesheet. ActiveSheet.Range(“A1”).SpecialCells(xlCellTypeLastCell).Address

VBA Code:

Declaring Variables:

Variable Data Type Comments
LastRow Long Find and store last used row
LastCol Long store last used column
LastCell String store last used cell address
'Variable Declaration

Dim LastRow As Long, LastCol As Long, LastCell As String

Use SpecialCells function to find last used row/column/cell 

'Find Last Used Row
LastRow = ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Row

'Find Last Used Column
LastCol = ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Column

'Find Last Used Cell
LastCell = ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Address

Concatenate all three variables (LastRow/LastCol/LastCell), add a new line between variables use Chr(10).   Show the final output in an Excel Message box.

'Display the last used row/column/cell

MsgBox "Last Used Row : " & LastRow & Chr(10) & "Last Used Column : " & LastCol & Chr(10) & "Last Used Cell : " & LastCell

Implementation:

Follow the below steps to find the Last Used Row and Last Used Column in Excel VBA

Step 1: Add a shape (Find Last Row/Column/Cell) on your worksheet.  

Step 2: Right-click on “Find Last Row/Column/Cell” and “Assign Macro..”

Step 3: Select “findLastUsedCell”, you can see a list of macros if available in your workbook

Step 4: Save your excel file as “Excel Macro-Enabled Workbook” *.xlsm

Step 5: Click “Find Last Row/Column/Cell” to execute the VBA code.  Code will popup below output for the above given example (Output).

Output:

Понравилась статья? Поделить с друзьями:
  • Выделить последние цифры в excel
  • Выделить содержимое ячейки в excel горячие клавиши
  • Выделить подстроку в строке excel
  • Выделить совпадения в массивах excel
  • Выделить повторяющиеся значения excel 2003