Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/162: Рейтинг темы: голосов - 162, средняя оценка - 4.94
2 / 2 / 0
Регистрация: 05.03.2012
Сообщений: 10

Как найти последнюю строку таблицы Excel

05.03.2012, 18:09. Показов 29959. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. упорно занялся изучением VBA кое какие вещи уже получаются, но при работе столкнулся с таким затруднением:
имеется неограниченое кол-во одноструктурных таблиц, которые должны подлежать идентичной обработке (с этим проблем нет), единственное отличие у таблиц это их кол-во строк ( может быть 100, может быть 100000). необходимо чтобы макрос находил последнюю заполненную ячейку таблицы по столбцу "А" и полностью удалял предыдущие 4 строки в т.ч. и последнюю заполненную.
если совсем просто то есть таблица (выгрузка из базы данных) после которой роботом формируется подъитог, который занимает 4 строки вот его то и нужно чтобы макрос удалял. весь день на это потратил, никак не получается...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.03.2012, 18:09
Ответы с готовыми решениями:

Как выделить последнюю строку в ListView (VBA Excel)?
Как выделить последнюю строку в ListView (VBA Excel)?

Как определить последнюю строку в умной таблице Excel
Добрый день. Работаю над решением такой задачи: Private Sub CommandButton2_Click() Dim iRow As Long Dim ws As Worksheet Set ws =...

Как определить в Excel последнюю строку?
Как определить в Exelе последнюю строку, используя ADO?

9
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
05.03.2012, 18:22
Visual Basic
1
2
3
4
5
Sub UdalStrok()
    With ActiveSheet
        Rows("" & .UsedRange.Rows.Count - 3 & ":" & .UsedRange.Rows.Count).Delete
    End With
End Sub
1
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
06.03.2012, 09:52
UsedRange - это свойство листа, возвращающее объект типа Excel.Range, который в виде прямоугольной области охватывает все используемые ячейки на листе - это те, в которых есть значения, формулы или изменено форматирование. Видимо, в данном случае это не совсем то, что требуется.
Если таблицы отделены друг от друга хотя бы одной пустой строкой или пустым столбцом, то можно взять любую ячейку внутри таблицы и через свойство CurrentRegion получить диапазон, охватывающий непрерывную область, которая окружает заданную ячейку - это и будет диапазон, представляющий нужную таблицу.
2
2 / 2 / 0
Регистрация: 05.03.2012
Сообщений: 10
06.03.2012, 10:10  [ТС]
все отлично заработало. спасибо

Добавлено через 8 минут
Цитата Сообщение от Mawrat Посмотреть сообщение
UsedRange - это свойство листа, возвращающее объект типа Excel.Range, который в виде прямоугольной области охватывает все используемые ячейки на листе - это те, в которых есть значения, формулы или изменено форматирование. Видимо, в данном случае это не совсем то, что требуется.
Если таблицы отделены друг от друга хотя бы одной пустой строкой или пустым столбцом, то можно взять любую ячейку внутри таблицы и через свойство CurrentRegion получить диапазон, охватывающий непрерывную область, которая окружает заданную ячейку - это и будет диапазон, представляющий нужную таблицу.
дело в том что таблицы расположены на разных листах, поэтому вроде как подходит и UsedRange, правда есть одно но, поиск охватывает всю таблицу и ищет последнюю строку...какой функцией можно локализовать ситуацию чтобы поиск проходил только в столбце "A" но при этом удалял всю строку целиком?
0
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
06.03.2012, 10:49
Если мы получили диапазон всей таблицы, то получить диапазон первого столбца этой таблицы можно так:
Visual Basic
1
2
3
4
5
6
7
  Dim RngTbl as Excel.Range 'Диапазон таблицы.
  Dim RngCol as Excel.Range 'Диапазон первого столбца таблицы.
  Dim Cell as Excel.Range 'Некоторая ячейка внутри таблицы.
...
  Set RngTbl = Cell.CurrentRegion
  Set RngCol = RngTbl.Columns(1) 'Диапазон, представляющий ячееки первого столбца таблицы (диапазона) RngTbl.
...
А вот так можно удалить нужную строку в диапазоне. Если мы в заданном диапазоне нашли номер строки, которую надо удалить, то делается так:
Visual Basic
1
2
3
4
5
6
7
...
  Dim nRow As Long
...
  'Shift:=xlShiftUp - со сдвигом ниже лежащих ячеек вверх,
  'Shift:=xlShiftToLeft - со сдвигом ячеек влево.
  TblRng.Rows(nRow).Delete Shift:=xlShiftUp
...
0
2 / 2 / 0
Регистрация: 05.03.2012
Сообщений: 10
06.03.2012, 10:49  [ТС]
буду пробовать. отпишусь что в итоге получилось. спасибо
0
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
06.03.2012, 11:20
Трумэн, например, можно действовать так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Option Explicit
 
Sub sub1()
  Dim Sh As Excel.Worksheet 'Лист в книге Excel.
  Dim rngTbl As Excel.Range 'Диапазон таблицы.
  Dim rngCol As Excel.Range 'Диапазон первого столбца таблицы.
  Dim Cell As Excel.Range 'Некоторая ячейка внутри таблицы.
  Dim nRow As Long 'Номер строки.
  
  'Ссылка на тот лист, который в данный момент активен.
  Set Sh = Application.ActiveSheet
  'Пускай левый верхний угол таблицы совпадает с левым верхним углом листа.
  Set Cell = Sh.Cells(1, 1)
  'Диапазон таблицы.
  Set rngTbl = Cell.CurrentRegion
  'Диапазон левого столбца таблицы
  Set rngCol = rngTbl.Columns(1) 'Диапазон, представляющий ячееки первого столбца таблицы (диапазона) rngTbl.
  
  'Ищем ячейку.
  nRow = 0
  Set Cell = rngCol.Find(What:="пример", MatchCase:=False)
  If Not (Cell Is Nothing) Then
    'Определяем номер найденной ячейки относительно верней строки таблицы.
    nRow = Cell.Row - rngCol.Row + 1
    'Удаляем из таблицы строку, в которой расположена найденная ячейка.
    rngTbl.Rows(nRow).Delete Shift:=xlShiftUp
  End If
End Sub
0
2 / 2 / 0
Регистрация: 05.03.2012
Сообщений: 10
06.03.2012, 13:08  [ТС]
тема бесспорно рабочая, но вот столкнулся с такой вот фигней: оказалось что параметры строк для удаления в разных таблицах могут быть разными и занимать от 3-10 строк соответственно.
объединяющий параметр всех таблиц фраза "ИТОГО" после которой какраз расположены параметры для удаления т.е. сейчас как я понимаю нужно искать строку в которой есть значение "ИТОГО" удалять ее и удалять последующие строки которые имеют какие либо значения (от 3 до 10 строк)

Добавлено через 6 минут
решил вопрос таким образом:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Test()
    Dim r As Range, iLastRow As Long
    With ActiveSheet
        With .UsedRange
            iLastRow = .Rows.Count + .Row - 1
            Set r = .Find(What:="Итого", LookIn:=xlValues, LookAt:=xlPart)
        End With
        If Not r Is Nothing Then
            .Range(r, .Cells(iLastRow, 1)).EntireRow.Delete Shift:=xlUp
        End If
    End With
End Sub
однако это работает только при условии что все таблицы расположены на разных листах
0
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
06.03.2012, 14:05
Если сделать на основе того кода, который я выше привёл - там достаточно поменять одну строку:
заменить:
Visual Basic
1
2
    'Удаляем из таблицы строку, в которой расположена найденная ячейка.
    rngTbl.Rows(nRow).Delete Shift:=xlShiftUp
на:
Visual Basic
1
2
3
    'Удаляем из таблицы строки, начиная с той строки, где находится найденная ячейка и
    'и по последнюю строку таблицы.
    rngTbl.Rows(CStr(nRow) & ":" & CStr(rngTbl.Rows.Count)).Delete Shift:=xlShiftUp
Полностью код будет выглядеть так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Option Explicit
 
Sub sub1()
  Dim Sh As Excel.Worksheet 'Лист в книге Excel.
  Dim rngTbl As Excel.Range 'Диапазон таблицы.
  Dim rngCol As Excel.Range 'Диапазон первого столбца таблицы.
  Dim Cell As Excel.Range 'Некоторая ячейка внутри таблицы.
  Dim nRow As Long 'Номер строки.
  
  'Ссылка на тот лист, который в данный момент активен.
  Set Sh = Application.ActiveSheet
  'Пускай левый верхний угол таблицы совпадает с левым верхним углом листа.
  Set Cell = Sh.Cells(1, 1)
  'Диапазон таблицы.
  Set rngTbl = Cell.CurrentRegion
  'Диапазон левого столбца таблицы
  Set rngCol = rngTbl.Columns(1) 'Диапазон, представляющий ячееки первого столбца таблицы (диапазона) rngTbl.
  
  'Ищем ячейку.
  nRow = 0
  Set Cell = rngCol.Find(What:="Итого", LookIn:=xlValues, LookAt:=xlPart)
  If Not (Cell Is Nothing) Then
    'Определяем номер найденной ячейки относительно верней строки таблицы.
    nRow = Cell.Row - rngCol.Row + 1
    'Удаляем из таблицы строки, начиная с той строки, где находится найденная ячейка и
    'и по последнюю строку таблицы.
    rngTbl.Rows(CStr(nRow) & ":" & CStr(rngTbl.Rows.Count)).Delete Shift:=xlShiftUp
  End If
End Sub
1
2 / 2 / 0
Регистрация: 05.03.2012
Сообщений: 10
06.03.2012, 18:07  [ТС]
даа...если разобраться, то вариантов получается масса..буду изучать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2012, 18:07
Помогаю со студенческими работами здесь

Как вставить в поле со списком последнюю строку или запись из необходимой таблицы
Здравствуйте уважаемые форумчане. Я начинающий в access. Суть вопроса в следующем: необходимо, чтобы при открытии формы, в поле со списком...

Как при загрузке формы, передать последнюю строку из таблицы (DBgrid) в тескстовое поле (text1)?
Ребята! подскажите как при загрузке формы, передать последнюю строку из таблицы (DBgrid) в тескстовое поле (text1) у меня получается...

Как найти последнюю строку с заданным значением?
Здравствуйте уважаемые Форумчане! :) С Рождеством Вас! Пожалуйста помогите решить такую задачку: - Есть столбец с чередованием (подряд)...

Переход на последнюю строку таблицы
HI, ALL Подскажите, плз, имеется форма ввода данных в таблицу, содержащая три выпадающих взаимосвязанных списка. При открытии формы...

Передать фокус на последнюю строку таблицы
Таблица добавлена в JScrollPane. Когда она уже большая и последние строки не видно, как можно программно опуститься к последней строке и...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru