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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.10.2008, 10:41   #1
twolfy
Новичок
Джуниор
 
Регистрация: 03.10.2008
Сообщений: 2
По умолчанию Нужна помощь с макросом

Есть опреленная таблица примерно на 1000 строк с заполненными числовыми данными. Нужно через каждую строку данных добавить три пустые строки (по всей таблице). Кто - нибудь может помочь исходником такого макроса? ОЧЕНЬ НУЖНО!!!
twolfy вне форума
Старый 03.10.2008, 10:59   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub Ins3Rows()
  For r = 0 To 1000
    Rows(r * 4 + 2 & ":" & (r + 1) * 4).Select
    Selection.Insert Shift:=xlDown
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 03.10.2008, 11:44   #3
twolfy
Новичок
Джуниор
 
Регистрация: 03.10.2008
Сообщений: 2
По умолчанию

Прошу прощения, а не могли бы вы пояснить что обозначает строка
Rows(r * 4 + 2 & ":" & (r + 1) * 4).Select
что значит 4+2 и т.д. ? И вообще что означает вся эта формула?
Откуда берутся эти формулы?
Заранее большое спасибо!
twolfy вне форума
Старый 04.10.2008, 11:08   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

twolfy, это макрос. (т.е. специальная программа на языке VBA - visual basic appliction, которая выполняется в самом Excel)
для того, чтобы её добавить, надо нажать либо Alt-F11, либо правой кнопкой мышки на названии листа и выбрать "Исходный текст". Откроется редактор Visual Basic'а. слева список книг и листов (объекты) - двойной щелчок мышкой по Вашему листу и в появившемся справа окошке вставляйте текст макроса.
Всё.
Теперь переходите на ваш лист и нажмите Alt-F8
(или меню -"Сервис" - "Макросы..." - Макросы)
выбираете там макрос с именем Ins3Rows на нажимаете "выполнить"... всё.

ВНИМАНИЕ. Действия макроса нельзя откатить. Поэтому лучше перед выполнением макроса сохранить Вашу книгу!
Serge_Bliznykov вне форума
Старый 04.10.2008, 13:44   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию 2 twolfy

в макросе запрограммировано циклическое выполнение однопитного действия. разберем все построчно:

Sub Ins3Rows()
это нзвание процедуры. перескочу в конец макроса:

End Sub - значит конец процедуры.

For r = 0 To 1000
эта сторока задает начало цикла (в цикле переменная r будет принимать по очереди значения от 0 до 1000. перепрыгну на строку

Next
это строка обозначает конец цикла. В более полной форме следовало бы написать Next r, что значить присвоить r следующее значения. В нашем случае шаг (Step) не был задан, поэтому при каждом выполнении "Next r" r будет увеличиваться на 1. Next r передает управление на первуюю строку в теле цыкла. В данном макросе в теле цикла две строки.

Rows(r * 4 + 2 & ":" & (r + 1) * 4).Select
Эта строка отмечает 3 ряда. Вы спросите: "каких?". Отвечу. Вообще это самая "умная" строка во всем макросе. Итак, допустим у нас первый проход по циклу (r = 0), подставляем везде вместо r его значение, смотрим что получилось:
Rows(0 * 4 + 2 & ":" & (0 + 1) * 4).Select
производим операции над числами, получаем
Rows(2 & ":" & 4).Select
знак "&" - это оператор ВБА, обозначает обьединить строки и вот:
Rows("2:4").Select
это значит отметить ряды со второго по четвертый (три штуки)

Selection.Insert Shift:=xlDown
эта строка вставит три ряда над отмеченными. Сколько рядов нужно вставить определяется на основании того сколько их отмечено.

строку Next мы уже разбирали. Она присвоит r новое значение, теперь уже 1 и вернет управление на строку, которую я назвал самой умной в этом макросе. Подставив вместо r его значение (напоминаю во втором проходе по циклу оно будет уже 1) получим
Rows("6:8").Select
Почему отметили именно эти ряды? потому что в первом проходе между рядами 1 и 2 втиснулось 3 ряда. Ряд, который в исходном состоянии был 2-м теперь стал 5-м. Selection.Insert Shift:=xlDown казалось бы делает тоже самое, что и в первом проходе по циклу, так то оно так, но перед выполнением Selection.Insert Shift:=xlDown ряды-то отмечены каждый раз другие. Во втором проходе три новых ряда втиснутся между 5 и 6 рядами.

И так 1000 раз подряд (точнее даже 1001 раз). 2 первых прохода по циклу мы рассмотрели, остальные 999 штук я пропускаю, чтобы не утомить аудиторию

Всем, кто дочитал это до конца, автоматически присваивается первый (начальный) разряд по программированию на ВБА, у кого уже есть разряды - читали напрасно.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 06.10.2008, 10:44   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Предлагаю, на мой взгляд, более рациональное решение, где в отличии от макроса IgorGO, просматривается необходимое и достаточное количество строк, что существенно быстрее.
Код:
Sub Ins()
    Dim i As Long
    Application.ScreenUpdating = False
    i = 2
    Do
        Rows(i & ":" & i + 2).Insert
        If Rows(i + 3).Text = "" Then Exit Do Else i = i + 4
    Loop
End Sub
Необходимо заметить, что оба предлагаемых варианта безошибочно сработают только тогда, когда в пределах таблицы нет пустых строк.
Иначе, в первом варианте будут вставлены лишние строки, а во втором - на пустой строке просто прекратится выполнение макроса.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь BreeZe Помощь студентам 1 14.05.2007 21:38
Нужна помощь с БД Marmot Помощь студентам 1 23.01.2007 16:19