|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
03.10.2008, 10:41 | #1 |
Новичок
Джуниор
Регистрация: 03.10.2008
Сообщений: 2
|
Нужна помощь с макросом
Есть опреленная таблица примерно на 1000 строк с заполненными числовыми данными. Нужно через каждую строку данных добавить три пустые строки (по всей таблице). Кто - нибудь может помочь исходником такого макроса? ОЧЕНЬ НУЖНО!!!
|
03.10.2008, 10:59 | #2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
03.10.2008, 11:44 | #3 |
Новичок
Джуниор
Регистрация: 03.10.2008
Сообщений: 2
|
Прошу прощения, а не могли бы вы пояснить что обозначает строка
Rows(r * 4 + 2 & ":" & (r + 1) * 4).Select что значит 4+2 и т.д. ? И вообще что означает вся эта формула? Откуда берутся эти формулы? Заранее большое спасибо! |
04.10.2008, 11:08 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
twolfy, это макрос. (т.е. специальная программа на языке VBA - visual basic appliction, которая выполняется в самом Excel)
для того, чтобы её добавить, надо нажать либо Alt-F11, либо правой кнопкой мышки на названии листа и выбрать "Исходный текст". Откроется редактор Visual Basic'а. слева список книг и листов (объекты) - двойной щелчок мышкой по Вашему листу и в появившемся справа окошке вставляйте текст макроса. Всё. Теперь переходите на ваш лист и нажмите Alt-F8 (или меню -"Сервис" - "Макросы..." - Макросы) выбираете там макрос с именем Ins3Rows на нажимаете "выполнить"... всё. ВНИМАНИЕ. Действия макроса нельзя откатить. Поэтому лучше перед выполнением макроса сохранить Вашу книгу! |
04.10.2008, 13:44 | #5 |
Новичок
СтарожилДжуниор
Регистрация: 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 штук я пропускаю, чтобы не утомить аудиторию Всем, кто дочитал это до конца, автоматически присваивается первый (начальный) разряд по программированию на ВБА, у кого уже есть разряды - читали напрасно.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
06.10.2008, 10:44 | #6 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Предлагаю, на мой взгляд, более рациональное решение, где в отличии от макроса IgorGO, просматривается необходимое и достаточное количество строк, что существенно быстрее.
Код:
Иначе, в первом варианте будут вставлены лишние строки, а во втором - на пустой строке просто прекратится выполнение макроса.
Чем шире угол зрения, тем он тупее.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужна помощь | BreeZe | Помощь студентам | 1 | 14.05.2007 21:38 |
Нужна помощь с БД | Marmot | Помощь студентам | 1 | 23.01.2007 16:19 |