Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Екатерина Максимова от 20.09.2016, 16:18

Название: Макрос: заполнить столбик до конца заполненной таблицы
Отправлено: Екатерина Максимова от 20.09.2016, 16:18
Объясняю более подробно. Есть таблица, в которой я сделала дополнительный столбик. В этот столбик я подтягиваю ВПР. Но так как в таблице постоянно меняется количество строчек, то мой макрос сейчас то не до конца протягивает функцию, то наоборот - выходит за пределы таблицы. Можно ли как-то универсально прописать чтобы выделяло до конца заполненной таблицы таблицы(по аналогии с клавишами Ctrl+Shift+стрелочка вниз)? Сильно не ругать - VBA только изучаю.
Название: Re: Как в макросе сделать, чтобы столбик выделялся до конца заполненной таблицы?
Отправлено: cheshiki1 от 20.09.2016, 16:24
Dim lLastRow As Long
lLastRow = Cells(Rows.Count,1).End(xlUp).Row 'номер последней заполненной ячейки в первом столбце.

подходит?
Range("A2:A" & lLastRow).Select
Название: Re: Как в макросе сделать, чтобы столбик выделялся до конца заполненной таблицы?
Отправлено: vikttur от 20.09.2016, 18:25
Если применяете VBA, то и результат вместо ВПР можно получать в коде.
Название: Re: Как в макросе сделать, чтобы столбик выделялся до конца заполненной таблицы?
Отправлено: Екатерина Максимова от 21.09.2016, 11:42
cheshiki1 ,спасибо но не работает :(возможно я как-то не так его ставлю
vikttur, я это знаю, но опять возникает вопрос - как ВПР вставить в ячейки в границах заполненной таблицы?

Если поможет, то код(та часть что отвечает за впр) у меня сейчас выглядит так:
Sheets("1").Select
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],ÂÏÐ!C[-2]:C[-1],2,0)"
    Selection.AutoFill Destination:=Range("C2:C5107")
    Range("C2:C5107").Select
    Range("C2").Select
    Selection.Copy
Название: Re: Как в макросе сделать, чтобы столбик выделялся до конца заполненной таблицы?
Отправлено: vikttur от 21.09.2016, 11:44
Я Вам предложил вообще не использовать функцию листа.
Файл-пример?
Название: Re: Как в макросе сделать, чтобы столбик выделялся до конца заполненной таблицы?
Отправлено: Екатерина Максимова от 21.09.2016, 12:45
Пример во вложении
Название: Re: Как в макросе сделать, чтобы столбик выделялся до конца заполненной таблицы?
Отправлено: vikttur от 21.09.2016, 13:28
Откуда-куда?
Название: Re: Как в макросе сделать, чтобы столбик выделялся до конца заполненной таблицы?
Отправлено: Екатерина Максимова от 21.09.2016, 14:00
Формула ВПР вставляется в столбик С и до конца заполненной таблицы.
ВПР: (А2,ВПР!А:В,2,0)
Название: Re: Как в макросе сделать, чтобы столбик выделялся до конца заполненной таблицы?
Отправлено: vikttur от 21.09.2016, 14:32
Sub RetrievalOfData()
Dim ArrData(), ArrInit()
Dim lRws As Long, lRwsIn As Long
Dim i As Long, k As Long
    With Worksheets("ВПР")
        lRwsIn = .Cells(.Rows.Count, 1).End(xlUp).Row ' строк в таблице сравнения
        If lRwsIn < 2 Then Exit Sub ' нет данных, выход
        ArrInit = .Range("A1:B" & lRwsIn).Value ' таблица сравнения в массив
    End With
   
    With Worksheets("Просроки ОИВ")
        lRws = .Cells(.Rows.Count, 1).End(xlUp).Row ' строк в данных
        If lRws < 2 Then Exit Sub ' нет данных, выход
        ArrData = .Range("A1:B" & lRws).Value ' данные в массив
        ReDim Preserve ArrData(1 To lRws, 1 To 3) ' добавляем столбец для результата поиска
        ArrData(1, 3) = .Cells(1, 3).Value
    End With

    For i = 2 To lRws ' построчно проходим по данным
        For k = 2 To lRwsIn ' построчно проходим по таблице сравнения
            If ArrData(i, 1) = ArrInit(k, 1) Then ' искомое совпало
                ArrData(i, 3) = ArrInit(k, 2) ' записываем результат
                Exit For ' выходим (нет смысла просматривать таблицу)
            End If
        Next k
    Next i
   
    ' выгружаем данные на лист, отключив обновление экрана
    Application.ScreenUpdating = False
    Worksheets("Просроки ОИВ").Cells(1, 1).Resize(lRws, 3).Value = ArrData
    Application.ScreenUpdating = True
End Sub

Название: Re: Макрос: заполнить столбик до конца заполненной таблицы
Отправлено: Екатерина Максимова от 21.09.2016, 15:34
Спасибо, работает. А если вкладок в документе несколько?Формула и состав таблиц один и тот же-меняется только название вкладок...когда подставляю этот код мне уже на второй вкладке выдает ошибку в Dim ArrData(), ArrInit().
Название: Re: Макрос: заполнить столбик до конца заполненной таблицы
Отправлено: vikttur от 21.09.2016, 15:45
Макрос должен находиться в общем модуле (см. файл в предыдущем моем сообщении). Этому коду безразлично, с какого листа его запускать. Имена листов указаны в макросе.
With Worksheets("имялиста")
.........
End With

Все, что внутри оператора и начинается точкой, относится к родителю, указанному в операторе.

Если нужно перебрать все листы одним заходом, можно дополнить макрос:
Dim shts As Worksheet
    For Each shts In ThisWorkbook.Worksheets
        If shts.Name <> "ВПР" Then ' если лист с другим именем
            ' то поизвести действия для этого листа
        End If
    Next shts

Но это уже вопрос, выходящий за рамки темы.
Название: Re: Макрос: заполнить столбик до конца заполненной таблицы
Отправлено: Екатерина Максимова от 21.09.2016, 17:12
Спасибо :)