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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2010, 18:04   #1
Kostinok
 
Регистрация: 28.05.2010
Сообщений: 4
По умолчанию Как правильно вставить строки?

Здравствуйте.
Начал разбираться с VBA совсем не давно, поэтому ничего из help-а (тем более англ.) не понял. Кстати если у кого есть прошу поделиться русским Helpo-м VBA Excel!!!
Прошу помощи с написанием следующего макроса, который должен добавить после ячейки с числовым значением количество строк равное этому числовому значению, пока не кончаться значения. То есть

Таблица:
--- А
1--3
2--2
3--4

Таблица после выполнения макроса
--- А
1--3
2--Вставленная пустая строка
3--Вставленная пустая строка
4--Вставленная пустая строка
5--2
6--Вставленная пустая строка
7--Вставленная пустая строка
8--4
9--Вставленная пустая строка
10--Вставленная пустая строка
11--Вставленная пустая строка
12--Вставленная пустая строка

Заранее спасибо!

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

Код:
Sub AddSameRows()
  For r = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    Rows(r + 1 & ":" & r + Cells(r, 1)).Insert Shift:=xlDown
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.05.2010, 18:42   #3
Kostinok
 
Регистрация: 28.05.2010
Сообщений: 4
По умолчанию

Спасибо!
Но на строке

Rows(r + 1 & ":" & r + Cells(r, 1)).Insert Shift:=xlDown

Выдал ошибку: Run-time error '13':
Type mismatch
Kostinok вне форума Ответить с цитированием
Старый 28.05.2010, 18:43   #4
Kostinok
 
Регистрация: 28.05.2010
Сообщений: 4
По умолчанию

Прошу прощения. Все работает. Не могли бы вы сделать пояснения к вашему коду, как именно он работает?

Последний раз редактировалось Kostinok; 28.05.2010 в 18:57.
Kostinok вне форума Ответить с цитированием
Старый 28.05.2010, 19:06   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

вот как должно работать
Код:
Sub AddSameRows()
  For r = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Int(Cells(r, 1)) > 0 Then Rows(r + 1 & ":" & r + Int(Cells(r, 1))).Insert Shift:=xlDown
  Next
End Sub
только в колонке А пишите числа, пожалуйста
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.05.2010, 19:20   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Оно и с первого раза работало бы, если б числа писать подряд, начиная с первой ячейки.
во втором варианте допускаются пустые ячейки и заполнять колонку не обязательно с первой ячейки.
Одно условие остается - в колонке А должны быть числа. Если написать в какую-то ячейку колонки А "крокодил" - снова увидите сообщение об ошибке
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.05.2010, 19:23   #7
Kostinok
 
Регистрация: 28.05.2010
Сообщений: 4
По умолчанию

Как я понял
Код:
Sub AddSameRows()
   'Самое легкое - название кода
  For r = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    'Условие: Пока значение в ячейке A1 "Cells(Rows.Count, 1)" 
    'не уменьшиться до 1 с шагом 1 (не понял End(xlUp).Row)
    'Выполнять функцию
    If Int(Cells(r, 1)) > 0 Then Rows(r + 1 & ":" & r + Int(Cells(r, 1))).Insert Shift:=xlDown
    'Если целое число в ячейке A1 Int(Cells(r, 1)) > 0, то
    'вставить вниз Insert Shift:=xlDown столбцы Rows(r + 1 & ":" & r + Int(Cells(r, 1)))
    'r=3 в первом случае и Rows(3 + 1:3 + Int(Cells(r, 1)))
  Next
    'Перейти к следующему, пока значение не будет меньше 0
End Sub
Если можно подправте пожалуйста мои нелепые пояснения, просто надо хорошо понять код
Kostinok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WSH: Как правильно передать параметры коммандной строки? voam JavaScript, Ajax 4 12.12.2009 15:16
Помогите автоматически вставить пустые! строки KNatalia Microsoft Office Excel 6 17.08.2009 15:41
Как в комментарий Msgboxса вставить перенос строки в нужном месте? Oooleg Microsoft Office Excel 3 23.07.2009 13:32
Вставить первую строку после строки, в которой находится первый встреченный максимальный элемент. JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 4 03.12.2008 12:13
Как правильно вставить js скрипт с фенкцией jumpto Oliany JavaScript, Ajax 1 07.09.2007 11:00