Страницы: 1
RSS
Макрос: Вставка строк из одного листа в другой под другие строки с определенным значением
 
Знатоки Екселя я снова за помощью к вам)
Есть два листа. 1 лист"Текст". 2 лист "График".
Из листа "График" нужно скопировать строки в лист "Текст" между других строк с одним условием(Они иногда разные длиной. бывают доходят до BB, BC столбцов и т.д) поэтому нужно полностью строки копировать.

*(В листе "График" всего бывает от 1 до 12 строк не больше. т.е их всегда разное кол-во. в примере их 12) Приложил и скрин и файл

Условие:
В листе "Текст" очень много данных бывает от 50 строк и до 100.000 может доходить. Там каждая строка имеет свой КОД- ID - это столбец "D".
Нужно что бы строки из листа "График" привязывались к этим ID*(можно и к столбцу F там тоже закономерные идентификаторы). Т.е есть код 348275865 *(или в случае столбца F -это 1)- но бывает эти либо по две либо по три и четыре штуки. И вот эти строки должны вставляться после каждого такого КОДА и в этих строках которые вставились должны протянутся такие же КОДЫ- оба столбца D и F должны скопироваться в эти новые строки которые вставятся. Возможно так не все понятно и кажется сложным. В примере я очень подробно все показал.

Буду дико благодарен всем кто сможет с этим помочь.))
Изменено: Gagarin13 - 03.06.2018 13:52:43
 
Тут все предельно просто. Кнопка на листе "Текст"
 
Vitaliy P, Почти просто, но немного не то) Наверное не верно поняли.
У вас работает так, что он подставляется под тот код который есть в листе график, а нужно наоборот, что бы под каждым индивидуальным кодом в тексте, подставлялись строки из листа график и в эти строки с листа график копировался код с листа текст. Т.е первые две строки у нас имеют одинаковый код который заканчивается на 3485 к примеру. под эти две строки должны подставится все строки с листа "график" и в этих строках должен скопироватся этот код с первых двух строк и так же само должен скопироватся номер из столбца F. Это совсем не просто)
 
Vitaliy P, И в конце должен получится итог как в примере на вкладке "Пример итога для листа Текст"
 
Vitaliy P, А этот макрос который вы написали, думаю тоже вскоре найдет у меня практическое применение, за него тоже отдельное спасибо))
 
Цитата
Gagarin13 написал:
Это совсем не просто)
Это совсем не просто понять...

Мой макрос работает следующим образом:
1. Берет номер из колонки Д на листе "Текст" начиная снизу и если номер на ячейку ниже не такой же:
Цитата
Т.е первые две строки у нас имеют одинаковый код который заканчивается на 3485 к примеру.
2. Перебирает все строки по колонке Д на листе "График".
3. Если находит строку с таким же номером в колонке Д на листе "График", то проверяет совпадение значений в колонках Ф на обоих листах.
4. Если совпадают  - то строка копируется на лист "Текст" под строку из которой берется номер:
Цитата
под эти две строки должны подставится все строки с листа "график"
5. Так для каждого номера с листа "Текст"

Прогоните макрос в режиме отладки и все увидите.


Цитата
И в конце должен получится итог как в примере на вкладке "Пример итога для листа Текст"
А разве не так получилось?
Изменено: Vitaliy P - 06.06.2018 16:59:53
 
Vitaliy P, Нет не так) Нужно что бы с листа "График" все те строки которые там есть подставлялись под все строки в листе "Текст" тоесть под все которые с разным кодом, идут две одинаковые с окончанием 456 и под них онги подставляются, потом следующие две строки 457 и под них тоже подставляется. А в вашем примере, подставляется только если совпадает номер в столбце "График" мне как раз не нужно чтоб он так делал)

И после того как под каждые две строки с разными кодами, подставятся наши строки из листа "график", уже в листе "Текст" в наших строках которые из листа "График"- помеченные желтым у них должен поменятся тот самый код на тот к которому они прицепились. скриншот с примером приложил какие цифры должны скопироватся в желтые строки. Если проще описать то, желтые строки*(лист график) копируются под каждые строки с разным кодом*(в нашем случае у нас по две строки с одинаковым кодом) вот макросс перебирает первый индивидуальный код, вставляет в него наши желтые строки и должен дать им такой же код*(код из столбца Д и столбца Ф), и дальше идет новый код с ним он должен сделать тоже самое и так до самого конца.
 
Vitaliy P, А в вашем макросе получается он ищет по номеру из листа График, и ищет совпадение в Тексте. а мне нужно что бы он не искал совпадение с листом График а просто вставлял под каждый новый код в листе Текст строки из листа График
 
Vitaliy P, Потому что в листе График код левый и он вообще не нужен, я уже описал его нужно будет заменять сразу вместе со столбцом Ф в листе Текст
 
Цитата
Gagarin13 написал:
А в вашем макросе получается он ищет по номеру из листа График, и ищет совпадение в Тексте. а мне нужно что бы он не искал совпадение с листом График а просто вставлял под каждый новый код в листе Текст строки из листа График
Спасибо, что разъяснили МНЕ как работает МОЙ макрос  :D  Повторюсь, он ищет по номеру из листа Текст, и ищет совпадение в Графике. Перечитайте еще раз мое предыдущее сообщение.

Выложите фрагмент оригинального файла "как есть", а то я нихчего не понимаю из вашего описания задачи.
 
Vitaliy P, https://youtu.be/GZXaWtFg9jQ снял видео, чтоб проще было) И я пытался объяснить как работает у меня ваш макрос, он работает именно так как я описал, он вставляет только под первый код эти строки и он смотрит как будто по коду из графика а не из текста. Если я в графике меняю код с 85 на 84, то он в текст вообще ничего не подставляет, потому что в тексте нету такого кода.
 
Ну это в корне меняет дело, и совершено не подходит под то, что было написано в первом сообщении.
Дайте, как я писал выше, фрагмент файла в исходном виде, тогда и будем посмотреть.
 
Vitaliy P, это и есть исходник просто некоторые ячейки незаполнены
 
Смотрите.
Важное условие - сейчас работает при условии, что на листе "график" столбец А всегда заполнен по количеству строк, которые нужно скопировать, т.е. если строк 12, то и в столбце А все 12 строк заполнены значениями (любыми).

Во втором ответе файл не менял, т.к. может еще кому-то пригодится.
 
Vitaliy P, Воот это то что нужно, гигантское спасибо)) Во втором ответе да, тоже полезная штука)) Спасибо, Спасибо!!)
 
Vitaliy P,  А еще вопрос, все работает супер. Иногда мне еще нужно столюец Е как коды в Д и Ф копировать так же самое, что в макроссе добавить, что бы еще и этот столбец протягивался так же само?
 
Gagarin13, А все отбой сам разобрался, чуть полазил и нашел)) Еще раз спасибо большое)
 
Все теперь все отлично, второй пример кстати тоже щас пригодился) Спасибо)
Изменено: Gagarin13 - 07.06.2018 12:07:35
 
Если столбец Е нужно заполнять не всегда, то можно добавить следующее в начале процедуры:
Код
Dim blnERow As Boolean

blnERow = False
If MsgBox("Нужно ли протягивать значения в столбце Е?", vbYesNo, "Уточнение") = vbYes Then blnERow = True

И в цикле, после строк:
Код
.Cells(lngRowsCounter, 4).Copy
Range(.Cells(lngRowsCounter, 4).Offset(1, 0), .Cells(lngRowsCounter, 4).Offset(rngCopy.Rows.Count, 0)).PasteSpecial xlPasteValuesAndNumberFormats
.Cells(lngRowsCounter, 6).Copy
Range(.Cells(lngRowsCounter, 6).Offset(1, 0), .Cells(lngRowsCounter, 6).Offset(rngCopy.Rows.Count, 0)).PasteSpecial xlPasteValuesAndNumberFormats
добавить:
Код
If blnERow Then
   .Cells(lngRowsCounter, 5).Copy
   Range(.Cells(lngRowsCounter, 5).Offset(1, 0), .Cells(lngRowsCounter, 5).Offset(rngCopy.Rows.Count, 0)).PasteSpecial xlPasteValuesAndNumberFormats
nd If
 
Gagarin13, это новая мода - каждое предложение в отдельное сообщение?
можно:
или подумать и написать все сразу;
или дополнить предыдущее сообщение
 
Vitaliy P, Спасибо)
Страницы: 1
Наверх