Копирование значений последних заполненных ячеек определенных столбцов

Автор Илья, 16 июня 2014, 14:28

Илья

Здравствуйте!
Появилась необходимость, по заранее отфильтрованному списку, скопировать значения последних заполненных ячеек столбцов "А" и "CG" Листа1 (это строка итогов таблицы) в ячейки "А1" и "А2" Листа2.

"Нагородил" это:
Sub Макрос1()

'копируем 1 значение
    Dim lLastRow As Long, lLastRow2 As Long
    lLastRow = Sheets("2014").Cells(Rows.Count, 1).End(xlUp).Copy
'вставляем 1 значение
    Sheets("Результаты за неделю").Range("А1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

'копируем 2 значение
    Sheets("2014").Select
'по известному методу сначала ищу последнюю ячейку в столбце "А"
'и от нее пытаюсь отступить 85 ячеек (столбец "CG") и скопировать значение
    lLastRow2 = Sheets("2014").Cells(Rows.Count, 1).End(xlUp).Select
    ActiveCell([+1], [+85]).Copy

'вставляем 2 значение
    Sheets("Результаты за неделю").Range("А2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
   
    Application.CutCopyMode = False 'снять выделение копирования
   
    Sheets("Результаты за неделю").Select
End Sub
[свернуть]

Каким бы кодом  воспользовался знающий специалист для получения желаемого результата?
Заранее спасибо за помощь.

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

Илья, сформируйте, пожалуйста, Excel-файл, на котором я мог бы писать код, и выложите этот файла на форуме.
Можете удалить все данные, только сделайте так, чтобы на файле мог работать код, который Вы указали в первом сообщении.

Иначе мне тяжело будет в уме представлять Вашу ситуацию.

Илья


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

Макрос

Sub Макрос1()
   
    Dim sh1 As Excel.Worksheet, sh2 As Excel.Worksheet
   
   
    'Удобно давать листам VBA-имена, через которые затем можно
        'удобно обращаться к листам.
    Set sh1 = Sheets("Лист1")
    Set sh2 = Sheets("Лист2")
   
'копируем 1 значение
    'Чтобы получить номер последней строки, нужно было так записать:
        'lLastRow = Sheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row
       
        'То, что сделали Вы, не связано с получением номера строки.
        'В Вашем случае в переменную "lLastRow" попадёт результат: было скопировано или нет.
        'В Справке нет ответа на этот вопрос.
    'Копировать нужно так, без использования переменной,
        'т.к. не понятен смысл использования переменной.
    'Sheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Copy
'вставляем
'    Sheets("Лист2").Range("B1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'        :=False, Transpose:=False
       
    'Если нужно вставить только данные, без форматирования
        '(под форматированием понимается заливка ячеек и тому подобное),
        'то можно так делать. Это к тому же и быстрее будет в некоторых
        'случаях, если копировать нужно много.
    sh2.Range("B1").Value = sh1.Cells(Rows.Count, 1).End(xlUp).Value

'копирую значение из последней заполненной ячейки столбца "Е".
    'Отображать на мониторе лист не всегда нужно, поэтому можно не отображать.
    'Sheets("Лист1").Select
   
    'Здесь также нет смысла использовать переменную "lLastRow2",
        'т.к. не понятно, что помещается в переменную "lLastRow2",
        'т.к. мы делаем действие, а не узнаём данные.
'    lLastRow2 = Sheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Select
    'Чтобы обратиться к нужной ячейке относительно какой-то ячейки,
        'я такое не использую, т.к. использую другие средства.
'    ActiveCell([+1], [+5]).Copy

   
'вставляем 2 значение
'    Sheets("Лист2").Range("B2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'        :=False, Transpose:=False
    sh2.Range("B2").Value = sh1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 5).Value
   
'    Application.CutCopyMode = False 'снять выделение копирования
   
'    Sheets("Лист2").Select
   
End Sub
[свернуть]

Илья

Спасибо большое, разобрался.
Обнаружил одну ошибочку - вместо Offset(1, 5).Value надо указать Offset(0, 4).Value. Иначе не та ячейка выбирается.