Excel VBA Макросы: Как найти последнюю строку нужной таблицы, если на листе несколько таблиц одна под другой?

Автор gtz, 19 января 2018, 15:34

gtz

Имеется следующее выражение:
Код
    For Each sh_src In wb2.Worksheets
   
        ' Если в файле 2, в "B1" заданное значение.
        If sh_src.Range("B1").Value = "Дерево" Then
       
            ' Поиск на листе-результате последней строки.
                ' End не ищет в скрытых строках.
            lr = sh_res.Cells(sh_res.Rows.Count, "A").End(xlUp).row + 1
           
            ' Копирование данных из листа-источника на лист-результат.
            sh_res.Cells(lr, "A").Value = sh_src.Range("B2").Value
            sh_res.Cells(lr, "B").Value = sh_src.Range("B3").Value
            sh_res.Cells(lr, "C").Value = sh_src.Range("B4").Value
            sh_res.Cells(lr, "D").Value = sh_src.Range("B5").Value
            sh_res.Cells(lr, "E").Value = sh_src.Range("B6").Value
           
        End If
       
    Next sh_src
[свернуть]

Данное выражение ищет первую строку в которой в столбце "А" отсутсвует значение, далле происходит копирование значений и заполнение по строчно

Вопрос - как задать начало поиска пустой строки с определенной строки на  если на листе имеется несколько таблиц.
Т.е. данные нужно переносить в определенную таблицу на листе.

Администратор

Готовых инструментов нет для данной задачи, поэтому здесь программист сам придумывает, что делать. Я придумал такое:
Макрос
Sub макрос()

    Dim arr(), lr As Long, i As Long
   
    ' Поиск последней строки с учётом всех таблиц, а не нужной.
        ' Это нужно, чтобы записать данные в массив. С массивом макрос быстрее работает,
        ' чем с эксель-ячейками. Это нужно, если данных много.
        ' Весь столбец в массив не записываем, т.к. это наверное замедлит макрос.
        ' End не ищет в скрытых строках.
    lr = Cells(Rows.Count, "A").End(xlUp).Row
   
    ' Копируем данные в массив.
    arr() = Range("A1:A" & lr).Value
   
    ' Поиск конца нужной таблицы.
    For i = 10 To UBound(arr)
        ' Если макрос дошёл до пустой ячейки, то предполагается, что это конец таблицы.
        If arr(i, 1) = "" Then
            Exit For
        End If
    Next i
   
    ' Корректируем, если надо.
    lr = i - 1

End Sub
[свернуть]

Администратор

Цитата:
Данное выражение ищет первую строку в которой в столбце "А" отсутсвует значение


Ваш код ищет не первую пустую строку, а первую заполненную строку.

Администратор

Цитата:
Вопрос - как задать начало поиска пустой строки с определенной строки


Вообще, конец таблицы это не пустая строка, а заполненная строка. Поэтому правильнее писать "поиск последней строки".