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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2013, 12:54   #1
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию Копирование диапазона.

Добрый день.
Написал простой код

LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count
LastPRow = Worksheets("Здесь").UsedRange.Row + Worksheets("Здесь").UsedRange.Rows. Count

Worksheets("Здесь").Range("F2:F25") .Copy Range("B" & LastRow)

Как сделать, что б метод Copy переносил только значения, потому как в диапазоне ("F2:F25") есть формулы? И как правильно сделать диапазон динамичeским. С определением последней строки, а не F25. Я попытался через LastPRow, не получилось. А в ячейки столбца "F" активного листа вставить текущую дату для каждой скопированной записи. Возможно такое без цикла?
Спасибо.

Последний раз редактировалось riniks17; 16.04.2013 в 13:12.
riniks17 вне форума Ответить с цитированием
Старый 16.04.2013, 13:11   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вы бы файл свой прикрепили,
на нём показали, что есть изначально, и что должно получиться в результате копирования...
EducatedFool вне форума Ответить с цитированием
Старый 16.04.2013, 13:47   #3
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Вы бы файл свой прикрепили,
на нём показали, что есть изначально, и что должно получиться в результате копирования...
Вот. Мысль такая. Нажимаем на кнопку листа таблица. Копируется список из листа работники из столбца Ф и проставляются текущие даты.
Вложения
Тип файла: zip Пример.zip (40.0 Кб, 18 просмотров)
riniks17 вне форума Ответить с цитированием
Старый 16.04.2013, 14:19   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Проверяйте:

Код:
Sub Макрос()
    Dim ra As Range, ra2 As Range

    With Worksheets("Работники")    ' копируемый диапазон
        Set ra = .Range(.[f2], .Range("f" & .Rows.Count).End(xlUp))
    End With
    ' диапазон для вставки
    Set ra2 = Worksheets("Таблица для заполнения").Range("a2").End(xlDown).Offset(1).Resize(ra.Rows.Count)

    ra2.Offset(, 1).Value = ra.Value    ' копируем фамилии во второй столбец
    ra2.Offset(, 6).Value = Date    ' в 7-й столбец ставим текущую дату
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 16.04.2013, 14:43   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
Sub Улыбающеесялицо1_Щелчок()
        With Sheets("Работники")
          Set Dst = Sheets("Таблица для заполнения").Range("B" & .Rows.Count).End(xlUp)
          Set Src = .Range(.[F2], .Range("F" & .Rows.Count).End(xlUp))
          Src.Copy
          Dst.Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
          Dst.Offset(1, 5).Resize(Src.Rows.Count) = Now()
        End With
End Sub
попробуйте так

upd. опоздал...
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 16.04.2013 в 14:46.
DiemonStar вне форума Ответить с цитированием
Старый 16.04.2013, 15:19   #6
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
Радость

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Проверяйте:

Код:
Sub Макрос()
    Dim ra As Range, ra2 As Range

    With Worksheets("Работники")    ' копируемый диапазон
        Set ra = .Range(.[f2], .Range("f" & .Rows.Count).End(xlUp))
    End With
    ' диапазон для вставки
    Set ra2 = Worksheets("Таблица для заполнения").Range("a2").End(xlDown).Offset(1).Resize(ra.Rows.Count)

    ra2.Offset(, 1).Value = ra.Value    ' копируем фамилии во второй столбец
    ra2.Offset(, 6).Value = Date    ' в 7-й столбец ставим текущую дату
End Sub
Нет слов. Всё работает. Буду разбираться как. Одно уточнение. Вставляется последняя строка без значений но с датой. И следующий диапазон начинается после пустой строки. Как убрать последнюю пустую строку? Хотя она и не очень мешает.
Что должен за элегантное решение?
riniks17 вне форума Ответить с цитированием
Старый 16.04.2013, 15:24   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Как убрать последнюю пустую строку?
уберите формулу из списка на листе "Работники" и будет Вам счастье.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 16.04.2013, 17:47   #8
riniks17
Форумчанин
 
Регистрация: 15.12.2011
Сообщений: 355
По умолчанию

Когда на работе спросили, как я это делал, многозначительно со скромным видом опустил глаза. Спасибо, друзья.
riniks17 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование диапазона Kvint_Sertoriy Microsoft Office Excel 4 27.02.2012 21:37
Поиск и копирование диапазона Wind-up Bird Microsoft Office Excel 3 16.11.2011 23:25
Копирование выделенного диапазона 6306617 Microsoft Office Excel 7 24.03.2011 15:49
Копирование динамического диапазона vik85 Microsoft Office Excel 3 27.06.2010 14:40
Копирование части диапазона с шагом valerij Microsoft Office Excel 5 08.12.2009 17:53