Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Задача казалось бы легкая есть данные (для примера в столбцах 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 Кб, 11 просмотров)

Последний раз редактировалось СтаСС; 23.02.2018 в 23:25.
СтаСС вне форума   Ответить с цитированием
Старый 24.02.2018, 01:55   #2
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,660
Репутация: 1096
По умолчанию

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

Цитата:
Сообщение от 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, 02:55   #4
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,660
Репутация: 1096
По умолчанию

Код:
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
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 24.02.2018, 03:00   #5
СтаСС
Форумчанин
 
Регистрация: 12.02.2017
Сообщений: 87
Репутация: 10
По умолчанию

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

Код:
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, 03:13   #7
СтаСС
Форумчанин
 
Регистрация: 12.02.2017
Сообщений: 87
Репутация: 10
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


08:49.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru