Доброго времени суток. Прошу уделить немного времени моей проблеме. Есть в наличие "Архив". в котором содержится около 1000 строк с данными. Количество строк периодически увеличивается. Необходим макрос для нахождения определённого значения в таблице и переноса всей строки в которой оно присутствует в другой документ. Пример: Есть 2 документа с именами "Архив" и "47"(находятся в одном каталоге, но в разных папках на неизменных местах). Открываем "47", запускаем скрипт и он ищет в "Архив" - в ячейках D2 - J2, D3-J3, D4-J4 и т.д. число 47. В случае нахождения оного - вся строчка записывается в "47" (есть совпадение в 8-й строке - значит вся строчка A8-N8 записывается в "47"), но не формулами, а числами. Всего чисел которые нужно найти - 60, поэтому универсальность скрипта была бы самым оптимальным вариантом. В прикреплённом файле документы представлены на разных страницах.
Доброго времени суток. Прошу уделить немного времени моей проблеме. Есть в наличие "Архив". в котором содержится около 1000 строк с данными. Количество строк периодически увеличивается. Необходим макрос для нахождения определённого значения в таблице и переноса всей строки в которой оно присутствует в другой документ. Пример: Есть 2 документа с именами "Архив" и "47"(находятся в одном каталоге, но в разных папках на неизменных местах). Открываем "47", запускаем скрипт и он ищет в "Архив" - в ячейках D2 - J2, D3-J3, D4-J4 и т.д. число 47. В случае нахождения оного - вся строчка записывается в "47" (есть совпадение в 8-й строке - значит вся строчка A8-N8 записывается в "47"), но не формулами, а числами. Всего чисел которые нужно найти - 60, поэтому универсальность скрипта была бы самым оптимальным вариантом. В прикреплённом файле документы представлены на разных страницах.pan-piramida
Может быть я некорректно сформулировал? Попробую иначе. Дан документ "Архив" с массивом данных и документ "47". Каждый день в документ "Архив" добавляется несколько дополнительных строк. В столбцах с D2 по J2 находятся значения по которым нужно вести поиск. Открываем только документ "47"(документ "Архив" закрыт), запускаем скрипт который ищет значение 47 в ячейках с D2 по J2 и если таковое будет обнаружено - то вся строка с A2 по N2 записывается в документ 47. Если значение не будет обнаружено в ячейках с D2 по J2 то поиск переходит на другую строку и ищет в ячейках с D3 по J3 и так далее до тех пор пока значения не кончатся. Оптимальным вариантом было бы после открытия файла иметь возможность ручного ввода значения которое нужно найти в специально отведённое для этого поле и после этого нажать кнопку поиск. Есть пожелание чтобы скрипт каждый свой запуск не начинал поиск с первой строки документа "Архив", а считывал бы последнюю записанную строку из документа "47" и начинал поиск со строки следующей за ней.
Может быть я некорректно сформулировал? Попробую иначе. Дан документ "Архив" с массивом данных и документ "47". Каждый день в документ "Архив" добавляется несколько дополнительных строк. В столбцах с D2 по J2 находятся значения по которым нужно вести поиск. Открываем только документ "47"(документ "Архив" закрыт), запускаем скрипт который ищет значение 47 в ячейках с D2 по J2 и если таковое будет обнаружено - то вся строка с A2 по N2 записывается в документ 47. Если значение не будет обнаружено в ячейках с D2 по J2 то поиск переходит на другую строку и ищет в ячейках с D3 по J3 и так далее до тех пор пока значения не кончатся. Оптимальным вариантом было бы после открытия файла иметь возможность ручного ввода значения которое нужно найти в специально отведённое для этого поле и после этого нажать кнопку поиск. Есть пожелание чтобы скрипт каждый свой запуск не начинал поиск с первой строки документа "Архив", а считывал бы последнюю записанную строку из документа "47" и начинал поиск со строки следующей за ней.pan-piramida
Для переноса выбранных строк можно использовать процедуру "Copy_ROWs_to_EXT_FILE". Ну а уж выделить предварительно то, что нужно копировать, Вы, надеюсь, и сами сможете
Для переноса выбранных строк можно использовать процедуру "Copy_ROWs_to_EXT_FILE". Ну а уж выделить предварительно то, что нужно копировать, Вы, надеюсь, и сами сможетеAlex_ST
Я уловил Вашу мысль - но это немного не то, что хотелось бы. На одном форуме нашёл скрипт [vba]
Код
Sub skr() Dim a(), b() Dim i&, ii&, j&, jj& With Sheets("Архив") a = .Range("A2", .Cells(Rows.Count, 13).End(xlUp)).Value End With ii = 1 ReDim Preserve b(1 To UBound(a), 1 To UBound(a, 2)) For i = 1 To UBound(a) For j = 4 To 10 If a(i, j) = 47 Then For jj = 1 To UBound(a, 2) b(ii, jj) = a(i, jj) Next ii = ii + 1 Exit For End If Next Next With Sheets("47") .Cells(2, 1).Resize(UBound(b), UBound(b, 2)) = b End With End Sub
[/vba] но он работает в массиве на 10 строк и с листа на лист - нужно с документа на документ. Можно как-то доделать его на 20000 строк например. (плохо разбираюсь в макросах)
Я уловил Вашу мысль - но это немного не то, что хотелось бы. На одном форуме нашёл скрипт [vba]
Код
Sub skr() Dim a(), b() Dim i&, ii&, j&, jj& With Sheets("Архив") a = .Range("A2", .Cells(Rows.Count, 13).End(xlUp)).Value End With ii = 1 ReDim Preserve b(1 To UBound(a), 1 To UBound(a, 2)) For i = 1 To UBound(a) For j = 4 To 10 If a(i, j) = 47 Then For jj = 1 To UBound(a, 2) b(ii, jj) = a(i, jj) Next ii = ii + 1 Exit For End If Next Next With Sheets("47") .Cells(2, 1).Resize(UBound(b), UBound(b, 2)) = b End With End Sub
[/vba] но он работает в массиве на 10 строк и с листа на лист - нужно с документа на документ. Можно как-то доделать его на 20000 строк например. (плохо разбираюсь в макросах)pan-piramida
Сообщение отредактировал pan-piramida - Воскресенье, 08.06.2014, 23:08
И на 2000 строк работает, и между файлами работает - если дописать в одном месте "ThisWorkbook." и правильно запускать. Но с таким подходом - обсуждать решение нет желания. Додумывайте сами. И коды публикуются с использованием спецкнопки #.
И на 2000 строк работает, и между файлами работает - если дописать в одном месте "ThisWorkbook." и правильно запускать. Но с таким подходом - обсуждать решение нет желания. Додумывайте сами. И коды публикуются с использованием спецкнопки #.Hugo
Счастья Вам всем - если вы правы! Спецкнопка которая ничего не делает - это круто! Сперва найдите причино - следственную связь, а уж затем делайте выводы. Прошу удалить мою учётную запись с Вашего замечательного форума.
Счастья Вам всем - если вы правы! Спецкнопка которая ничего не делает - это круто! Сперва найдите причино - следственную связь, а уж затем делайте выводы. Прошу удалить мою учётную запись с Вашего замечательного форума.pan-piramida
Сообщение отредактировал pan-piramida - Понедельник, 09.06.2014, 19:12