Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2018, 22:18   #1
СтаСС
Пользователь
 
Регистрация: 12.02.2017
Сообщений: 87
По умолчанию Копирование данных "отталкиваясь" от последней заполненой строки

Задача казалось бы легкая есть данные (для примера в столбцах A:G) и нужно скопировать данные одной строки и вставить в определенную-другую строку этого же листа в диапазон например H:N или O:U и тд.
Трудность для меня заключается в том что строки каждый день добавляются и для работы макросу нужно "отталкиваться" от последней строки с данными(снизу) поэтому прошу помочи разобраться как это сделать (пытался сам написать, но даже показывать не буду то что у меня получалось, верней не получилось, чтоб никто не смеялся и не плакал )

Для примера я выбрал пару действий чтоб понять сам принцип.. допустим надо:

с пред-пред-предпоследней строки (в примере 7-я строка) скопировать A:G и вставить в пред-предпоследнюю (в примере 8-я) в H:N
с пред-предпоследней строки (8-я) скопировать A:G и вставить в предпоследнюю (9-я) в H:N
с пред-пред-пред-предпоследней строки (6-я) скопировать A:G и вставить в пред-пред-предпоследнюю (7-я) в O:U
с пред-пред-предпоследней строки (7-я) скопировать A:G и вставить в предпоследнюю (9-я) в O:U

Вставлять надо сохранив значение и исходное форматирование, то есть:
Код:
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Вложения
Тип файла: xls PRED.xls (30.0 Кб, 23 просмотров)

Последний раз редактировалось СтаСС; 23.02.2018 в 22:25.
СтаСС вне форума Ответить с цитированием
Старый 24.02.2018, 00:55   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от СтаСС Посмотреть сообщение
Трудность для меня заключается в том что строки каждый день добавляются и для работы макросу нужно "отталкиваться" от последней строки с данными(снизу)
Последняя строка столбца А
Код:
rowsCount = Cells(Rows.Count, "A").End(xlUp).Row
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 24.02.2018, 01:27   #3
СтаСС
Пользователь
 
Регистрация: 12.02.2017
Сообщений: 87
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
[/CODE]
Этот код я знаю.. игрался с ним целый день вот так например пробовал:
Код:
 Dim ra As Range, rb As Range, rd As Range, cc As Range, ccc As Range
 Application.ScreenUpdating = False
 
 Set ra = Range(.Range("A" & .Rows.Count).End(xlUp), .Range("G" & Rows.Count).End(xlUp))

    Selection.Copy
Set ra = Range(.Range("H" & .Rows.Count).End(xlUp), .Range("N" & Rows.Count).End(xlUp))
 End With
 
    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Application.CutCopyMode = False

End Su
ну не получается у меня короче... знаний не хватает.. надо чтоб кто-то разжевал основательно )))
СтаСС вне форума Ответить с цитированием
Старый 24.02.2018, 01:55   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Sub CopyMyRange()
    Dim LastRow As Integer
    Dim upOffset As Byte
    Dim rowNumber As Integer
    Dim rngFrom As Range
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    upOffset = CInt(InputBox("Введите количество строк для отступа с конца", "парамерт 1", 2))
    
    rowNumber = Application.WorksheetFunction.Max(1, LastRow - upOffset)
    Set rngFrom = Range("A" & rowNumber & ":G" & rowNumber)
    rngFrom.Copy
    
    upOffset = CInt(InputBox("Введите количество строк c конца для вставки", "парамерт 1", 2))
    rowNumber = Application.WorksheetFunction.Max(1, LastRow - upOffset)
    
    With Cells(rowNumber, "H")
        .PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
            , SkipBlanks:=False, Transpose:=False
        .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    End With
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 24.02.2018, 02:00   #5
СтаСС
Пользователь
 
Регистрация: 12.02.2017
Сообщений: 87
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
,
Вот это уже лучше!
Для такого старого неуча как я - то что надо!
Большое спасибо! Буду пробовать.
СтаСС вне форума Ответить с цитированием
Старый 24.02.2018, 02:03   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Код:
Sub St()
Dim n&
  n = Cells(Rows.Count, "A").End(xlUp).Row 'последняя строка

'с пред-пред-предпоследней строки (в примере 7-я строка) скопировать A:G и вставить в пред-предпоследнюю (в примере 8-я) в H:N
  Range("A1:G1").Rows(n - 3).Copy Cells(n - 2, "H")
  
'с пред-предпоследней строки (8-я) скопировать A:G и вставить в предпоследнюю (9-я) в H:N
  Range("A1:G1").Rows(n - 2).Copy Cells(n - 1, "H")

'с пред-пред-пред-предпоследней строки (6-я) скопировать A:G и вставить в пред-пред-предпоследнюю (7-я) в O:U
  Range("A1:G1").Rows(n - 4).Copy Cells(n - 3, "O")

'с пред-пред-предпоследней строки (7-я) скопировать A:G и вставить в предпоследнюю (9-я) в O:U
  Range("A1:G1").Rows(n - 3).Copy Cells(n - 1, "O")
End Sub
Формировать диапазоны по смещению можно разными способами - см. F1 - Offset, Resize. Я выбрал тот, при котором константа равна числу "пред" в описании команды.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 24.02.2018, 02:13   #7
СтаСС
Пользователь
 
Регистрация: 12.02.2017
Сообщений: 87
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
[CODE]Sub St()
Отлично, ваш вариант возьму за основу т.к. нужен макрос с сотнями копирований и вставок за раз, а макрос Aleksandr H. пригодится когда будут нужны изменения.
Спасибо ВАМ!!!
СтаСС вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить строки с 7 до последней заполненой chib_sv Microsoft Office Excel 2 28.04.2017 07:40