Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 5
Excel

Многократное копирование строк n раз с поискам параметра n на листе

14.10.2021, 16:25. Показов 4149. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

Решил познать все прелести работы с макросами.
Поставил невыполнимую для себя задачу, готовых решений также не нашел.

действие происходит только на активном листе.
Нужно чтобы макрос проходил по заданному столбцу (скажем столбцу B) и просматривал значения в нем, и где значения больше 1 - он копировал строку, в которой нашел это совпадение и под ней вставлял строки несколько раз, равных значению в ячейке (нашел 5 - вставил 5 строк, 10 - значит 10, 3 - 3 строки и тд). А также во вставленных строках прописывал "-" в столбцах C, F, Z (в остальных ячейках остаются формулы из скопированной строки).
И вел просмотр дальше, соответственно везде где значение больше 1 - копируем нужное число раз строк, если нет - идем дальше и так пока не увидим значение "end" например.
то есть в таблице в столбце Б будет куча строк, часть ячеек будут пустыми, в части будет прописано количество строк к вставке.

Заранее крайне благодарен!

Добавлено через 13 минут
возможно это упростит задачу, копировать именно строку, в которой нашлось совпадение необязательно. Можно каждый раз копировать строку 3.
и также нужно во вставляемых строках удалять значение из ячеек B, иначе вставка строк после первого совпадения может стать бесконечной)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2021, 16:25
Ответы с готовыми решениями:

Копирование строк в n-раз
Уважаемые знатоки VBA прошу вашей помощи и поддержку в решении задачи ест таблица "отчет склада" (расход материалов) и на...

Копирование строк заданное число раз
Добрый день. подскажите пожалуйста: как скопировать и вставить (как показано на вкладке "как должно быть") четыре раза...

Разработка игры. Многократное копирование изображения
Доброго времени суток. Проблема следующая: при перемещении изображения оно оставляет след из своих многочисленных копий наложенных...

17
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
14.10.2021, 16:31
Цитата Сообщение от VBAlover Посмотреть сообщение
вставка строк после первого совпадения может стать бесконечной
Искать нужные строки не с начала, а снизу вверх, тогда не будет бесконечности
1
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 5
15.10.2021, 10:00  [ТС]
Исходя из других макросов получилось только сделать, чтобы строки копировались нужное количество раз, только не вставляются они в нужном количестве под разными строками. А фигачат просто поверх данных, что были.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub MMM()
With Sheets("Sheet4 (4)")
        LR1 = .Cells(.Rows.Count, 2).End(xlUp).Row
        ARR1 = Range(.Cells(1, 1), .Cells(LR1, 15)).Value
        For i = 1 To LR1
        SM = SM + Abs(ARR1(i, 4))
        Next
        
        ReDim ARR2(1 To SM, 15)
 
        For i = 1 To LR1
          For j = 0 To Abs(ARR1(i, 4)) - 1
               M = M + 1
              For K = 1 To 15
 
                ARR2(M, K) = ARR1(i, K)
              Next
          Next
        Next
 
 .Cells(1, 1).Resize(M, 15).Value = ARR2
End With
 
MsgBox ("Çàäà÷à çàâåðøåíà")
 
End Sub
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
15.10.2021, 12:23
VBAlover, Файл покажите, так будет проще вам помочь.
0
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 5
15.10.2021, 12:41  [ТС]
Да, вероятно с примером будет нагляднее.
Сделал, прилагаю.
На сломанные формулы и значения в целом не обращайте внимание, они для понимания сути и проверки работоспособности.
К сожалению, сам исходник не могу выложить, да и тяжелый он.
Вложения
Тип файла: xlsx Пример.xlsx (33.6 Кб, 31 просмотров)
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
15.10.2021, 14:00
Лучший ответ Сообщение было отмечено VBAlover как решение

Решение

VBAlover,
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Sub www()
    Application.ScreenUpdating = False
    arr = "1 5 6 10 12 13 14 15"
    For i = Cells(Rows.Count, 5).End(xlUp).Row - 1 To 7 Step -1
        If Cells(i, 5) <> "" And Cells(i, 5) > 1 Then
            For j = 1 To Cells(i, 5)
                Rows(i + 1).Insert Shift:=xlDown
                Rows(i).EntireRow.Copy Destination:=Rows(i + 1)
                For Each s In Split(arr)
                    Cells(i + 1, CInt(s)) = "-"
                Next
            Next
        End If
    Next
    Application.ScreenUpdating = True
End Sub
0
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 5
15.10.2021, 17:00  [ТС]
работает!
огномное спасибо, ОГРОМНОЕ!

Добавлено через 2 часа 53 минуты
Константин, не сочтите за наглось, но работающий макрос крайне вдохновляет.

Возможно ли, чтобы в 10м столбе вместо "-" во вставляемых ячейках прописывалось "Элемент 1", "Элемент 2" и тд в зависимости от того сколько строк вставлено.
А в 12 столбе прописывать просто 1 - 2 - 3 и тд также в зависимости от числа вставляемых строк (ну то есть вставили 3 строки, там будет 1 2 3. вставили 5 - там будет 1 2 3 4 5).

А также уж совсем опциональная задача - в первом столбце прописывать сцепку между значениями копируемой строки и тем, что внесловсь в 12й столб с разделителем "_"?. Например в примере есть у нас 889 значение, чтобы у первой строки было 899_1, дальше 899_2 и тд. У следующей зацепки соответственно 892_1, 892_2 и тд.
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
15.10.2021, 17:25
Лучший ответ Сообщение было отмечено VBAlover как решение

Решение

VBAlover, как-то так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Sub www()
    Application.ScreenUpdating = False
    arr = "1 5 6 10 12 13 14 15"
    For i = Cells(Rows.Count, 5).End(xlUp).Row - 1 To 7 Step -1
        If Cells(i, 5) <> "" And Cells(i, 5) > 1 Then
            For j = 1 To Cells(i, 5)
                Rows(i + 1).Insert Shift:=xlDown
                Rows(i).EntireRow.Copy Destination:=Rows(i + 1)
                For Each s In Split(arr)
                    Select Case s
                        Case "1"
                            Cells(i + 1, CInt(s)) = Cells(i, 1) & "_" & Cells(i, 5) - j + 1
                        Case "10"
                            Cells(i + 1, CInt(s)) = "Элемент " & Cells(i, 5) - j + 1
                        Case "12"
                            Cells(i + 1, CInt(s)).NumberFormat = "@"
                            Cells(i + 1, CInt(s)) = CStr(Cells(i, 5) - j + 1)
                        Case Else
                            Cells(i + 1, CInt(s)) = "-"
                    End Select
                Next
            Next
        End If
    Next
    Application.ScreenUpdating = True
End Sub
1
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 5
15.10.2021, 17:39  [ТС]
как ты это делаешь?!
Девид Блейн)


все работает!!!
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
15.10.2021, 17:49
Цитата Сообщение от VBAlover Посмотреть сообщение
все работает!!!
Не рабочее не выкладываю
0
 Аватар для Narimanych
2752 / 1726 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
15.10.2021, 23:22
КостяФедореев,

Не вдавался в подробности , но строка
Цитата Сообщение от КостяФедореев Посмотреть сообщение
If Cells(i, 5) <> "" And Cells(i, 5) > 1 Then
впечатляет своей логикой....
0
Заблокирован
16.10.2021, 01:35
Цитата Сообщение от Narimanych Посмотреть сообщение
впечатляет своей логикой....
Вполне себе нормальная логика.
Не пусто в ячейке и больше единицы там?
А всем знать про то что 1 > empty не обязательно
0
 Аватар для Narimanych
2752 / 1726 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
16.10.2021, 01:38
И еще момент:
Цитата Сообщение от КостяФедореев Посмотреть сообщение
arr = "1 5 6 10 12 13 14 15"
И потом Split(arr)

CInt(s)

В чем фишка?

Добавлено через 1 минуту
arr = Array(1, 5, 6, 10, 12, 13, 14, 15) не работает?
0
Заблокирован
16.10.2021, 01:55
Narimanych, между Split и Array есть разница. Split не зависит от OPTION BASE, а ARRAY принюхивается...
0
 Аватар для Narimanych
2752 / 1726 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
16.10.2021, 02:09
YaYasha,

1) В приведенном коде Option base и не пахнет
2) Попробуйте с разными Option Basе
Visual Basic
1
2
3
4
5
6
Sub MMM()
arr = Array(1, 5, 6, 10, 12, 13, 14, 15)
For Each s In arr
    Debug.Print s
Next
End Sub
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
18.10.2021, 09:24
Narimanych, на вкус и цвет фломастеры разные.
Я сделал так как сделал и код работает, Вы это видите по другому.
Определённых критериев и правил не нашел, в каких ситуациях, какие функции использовать...

Добавлено через 22 секунды
Но за критику спасибо, учту.
0
 Аватар для Narimanych
2752 / 1726 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
18.10.2021, 09:44
Цитата Сообщение от КостяФедореев Посмотреть сообщение
Я сделал так как сделал и код работает
No comments...

Главное чтобы костюмчик сидел....
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
18.10.2021, 10:00
Цитата Сообщение от Narimanych Посмотреть сообщение
Главное чтобы костюмчик сидел....
еще раз повторяю
Цитата Сообщение от КостяФедореев Посмотреть сообщение
Определённых критериев и правил не нашел, в каких ситуациях, какие функции использовать...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2021, 10:00
Помогаю со студенческими работами здесь

Копирование строк столько раз, сколько заданно в ячейке
Всем привет! подскажите пожалуйста: Как скопировать строку столько раз, сколько заданно в ячейке, причем изначальную строку надо...

Макрос в VBA, копирование строк указанное количество раз, и группировка
Добрый день, помогите пожалуйста с макросом, который при вводе в определенную ячейку, какой либо цифры, скопирует на новый лист такое же...

Многократное копирование файла без затирания предыдущих копий
Добрый день. Нужно много раз копировать один файл ( этот файл mp3 и в него идет запись) в другую папку, прописанную в edit, но так чтобы...

Копирование строк столько раз, сколько заданно в ячейке с разбиением первоначальной
Всем привет! подскажите пожалуйста: Как скопировать строку столько раз, сколько заданно в ячейке, причем изначальную строку надо...

Копирование строк на другой лист ,столько раз, сколько указано в D, копируемой строки
Здравствуйте, помогите, пожалуйста! Много прочитала, пыталась сделать макрос, не вышло нужна ваша помощь. Размножить строки на другой лист....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru