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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2009, 11:36   #1
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию Хочу написать макрос, не получается. Прошу помощи

На активном листе найти первую незаполненную ячейку в столбце A
Скопировать диапазон ячеек с другого листа на активный лист
Начиная с первой (ранее найденой) незаполненой ячейки.
kzld вне форума Ответить с цитированием
Старый 13.04.2009, 12:07   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

вот это:
Код:
Sub copy1()
  Sheets(2).Select
  Selection.Copy
  Sheets(1).Select
  ActiveSheet.Paste Range("A1").End(xlDown).Offset(1)
End Sub
скопирует в первую незаполненную ячеку листа 1 отмеченные на листе 2 ячейки.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.04.2009, 12:13   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно чуть проще.
Следующий код скопирует диапазон ячеек "A1:D10" листа № 2 и вставит в активный лист, начиная со следующей после последней заполненной ячейки столбца "A".
Код:
Sheets(2).[A1:D10].Copy Cells(Rows.Count, "A").End(xlUp).Offset(1)
P.S. Обратите внимание на разницу между первой незаполненной и последней заполненной ячейкой (а Вам что нужно?). При поиске первой незаполненной ячейки методом IgorGO,если "ниже" ячейки "A1" нет данных, то будет ошибка, т.к. Excel попытается вставить скопированный диапазон в последнюю строку рабочего листа.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 13.04.2009 в 12:18.
SAS888 вне форума Ответить с цитированием
Старый 13.04.2009, 17:45   #4
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

А можно поподробнее. Только начинаю изучать макросы.
Sheets(2).[A1:D10]
перейти на лист 2 и скопировать в буфер диапазон A1:D10
Изменил на
Sheets(заг).[A3:O18]
Copy Cells(Rows.Count, "A").
Что делает эта строка кода?
End(xlUp).Offset(1)
Что делает эта строка кода?
У меня ругается и говорит
can`t execute code in break mode
Что означает Offset(1)
Именно 1 выделена синим курсором при ругательстве

P.S. Обратите внимание на разницу между первой незаполненной и последней заполненной ячейкой (а Вам что нужно?).
Первую незаполненную
kzld вне форума Ответить с цитированием
Старый 13.04.2009, 17:47   #5
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
вот это:
Код:
Sub copy1()
  Sheets(2).Select
  Selection.Copy
  Sheets(1).Select
  ActiveSheet.Paste Range("A1").End(xlDown).Offset(1)
End Sub
скопирует в первую незаполненную ячеку листа 1 отмеченные на листе 2 ячейки.
Sheets(2).Select
отмеченные на листе 2 ячейки. а как их отметить ?
мне нужен диапазон A3:O18
kzld вне форума Ответить с цитированием
Старый 13.04.2009, 17:53   #6
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
вот это:
Код:
Sub copy1()
  Sheets(2).Select
  Selection.Copy
  Sheets(1).Select
  ActiveSheet.Paste Range("A1").End(xlDown).Offset(1)
End Sub
скопирует в первую незаполненную ячеку листа 1 отмеченные на листе 2 ячейки.
Изменил
Sheets(2).Select
на
Sheets(заг).Select
Ругается и говорит следующее
Run-time error `9`:
Subscript out of range
kzld вне форума Ответить с цитированием
Старый 13.04.2009, 18:35   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Run-time error `9`:
Заменить:
Sheets(заг).Select
на
Sheets("заг").Select
Если диапазон один и тот же - удобнее использовать то, что SAS888 написал.

А отметить просто:
Просто пройдитесь по листам, видите на каждом листе отмечена какая-то ячейка (или группа ячеек). Можно пройтись по любым листам, пробежаться курсором по любым ячейкам, активной (отмеченной) будет та ячейка, где оставили курсор.

вообще, в моем макросе есть серьезная дыра: ее описал SAS888. Воспользуйтесь лучше его макросом.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 14.04.2009, 08:23   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
(а Вам что нужно?).
Первую незаполненную
Т.е если, например, в столбце "A" заполнены ячейки в строках 1, 2, 3, 8, 9, 10, то Вам нужно вставить данные в ячейку "A4"? Это и есть первая незаполненная.
Так или иначе, строка Cells(Rows.Count, "A").End(xlUp).Offset(1) аналогична действиям: выделить последнюю ячейку столбца "A" (например, в 2003 это "A65536"), нажать "End"+"стрелка вверх" и сместиться на одну строку вниз.
Соответственно, строка Range("A1").End(xlDown).Offset(1) - выделить "A1", нажать "End"+"стрелка вниз" и сместиться на строку вниз. Попробуйте сделать эти действия "вручную" и выберите то, что Вам нужно.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 14.04.2009, 09:51   #9
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

[QUOTE=SAS888;240244]Можно чуть проще.
Следующий код скопирует диапазон ячеек "A1:D10" листа № 2 и вставит в активный лист, начиная со следующей после последней заполненной ячейки столбца "A".
Код:
Sheets(2).[A1:D10].Copy Cells(Rows.Count, "A").End(xlUp).Offset(1)
Ура, ЗАРАБОТАЛО. Всем спасибо

P.S. Обратите внимание на разницу между первой незаполненной и последней заполненной ячейкой (а Вам что нужно?).
Оказалось мне надо последнюю заполненную ячейку
kzld вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу помощи! Oksana Общие вопросы Delphi 6 11.02.2007 18:36