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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2015, 21:51   #1
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию Добавление строку

Помогите пожалуйста мне, в одной сложной задаче для меня.

В Excel есть 1 столбец в следующим виде:

00901005
00902003
00901011
00903006
00902025
01101013
01103047
01102033
01102021
01104025
01101051

Мне надо взять последные 3 символу в каждом строке и в столько раз добавить каждую строку. Как можно делать такое? Помогите пожалуйста.
Вложения
Тип файла: xlsx Dobavlenie_stroku.xlsx (11.1 Кб, 12 просмотров)
Aqil_f вне форума Ответить с цитированием
Старый 03.11.2015, 22:00   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

положите в модуль листа и выполните этот
Код:
Sub AddSameRows()
  Dim r As Long, n As Long
  r = 1
  Do While Not IsEmpty(Cells(r, 1))
    n = Val(Right(Cells(r, 1), 3))
    If n > 0 Then Rows(r + 1).Resize(n).Insert
    r = r + n + 1
  Loop
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.11.2015, 22:13   #3
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

Спасибо, IgorGO.
Только 1-я строка почему-то 10 раз добавляется (а должна 5 раз) и еще можно делать так что сама запись (00901005, 00901003) тоже добавлялся в эту пустую строку?
Aqil_f вне форума Ответить с цитированием
Старый 03.11.2015, 22:14   #4
AleksandrH
Заблокирован
 
Регистрация: 15.02.2010
Сообщений: 148
По умолчанию

Ну и наивный вариант от меня
Код:
Sub ttt()
    Dim i As Integer, j As Integer, lr As Long, c As Integer
    i = 1: lr = Range("A65535").End(xlUp).Row
    Do While i <= lr
        c = Int(Right(Cells(i, 1).Value, 3))
        For j = 2 To c
            Cells(i, 1).Copy
            Cells(i + j - 1, 1).Insert Shift:=xlDown
        Next j
        i = i + c
        lr = Range("A65535").End(xlUp).Row
    Loop
End Sub
AleksandrH вне форума Ответить с цитированием
Старый 03.11.2015, 22:16   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

если выполните макрос еще разок - первая строка почемуто добавиться еще 5 раз
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.11.2015, 22:20   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
If n > 0 Then Rows(r + 1).Resize(n).Insert:  cells(r,1).copy cells(r+1,1).resize(n,1)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.11.2015, 22:25   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Внимание!
макрос выполнить 1 раз

Achtung!
Makro ausfuhren 1 mal

Attention!
macro execute 1 times
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 03.11.2015 в 22:28.
IgorGO вне форума Ответить с цитированием
Старый 03.11.2015, 22:28   #8
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

AleksandrH, спасибо. Макрос отлично работает. Но, 2 маленкий вопрос еще:
Как можно добaвить эти строку не столбец А, а столбец В?
А если количества строку должна быт больше 65535, тогда как?
Aqil_f вне форума Ответить с цитированием
Старый 03.11.2015, 22:31   #9
AleksandrH
Заблокирован
 
Регистрация: 15.02.2010
Сообщений: 148
По умолчанию

1. Простите, но шо сделать?
2.
Код:
lr = Cells(Rows.Count, 1).End(xlUp).Row
AleksandrH вне форума Ответить с цитированием
Старый 03.11.2015, 22:35   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в столбец В
Код:
If n > 0 Then Rows(r + 1).Resize(n).Insert:  cells(r,1).copy cells(r+1,2).resize(n,1)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как отменить добавление в строку пробелов shurik12 SQL, базы данных 8 12.07.2015 17:56
Добавление знаков в строку формулы Excel Tessan Microsoft Office Excel 9 01.10.2013 18:05
Добавление текста в нужную строку Memo Lauri Общие вопросы Delphi 1 08.08.2010 14:35
Добавление пробелов в строку vivo89 Помощь студентам 3 10.12.2009 00:20