Уважаемые профи, добрый день. Помогите, пожалуйста, решить проблему. Нужен макрос (под ключ, что называется) для копирования строк по заданному условию. Поясню подробнее. На отдельных листах в файле EXCEL (пока их два, но может быть и больше) располагаются одна под другой одинаковые таблицы по 15 колонок. Количество таблиц на разных листах различно. В графе G проставлены даты по количеству дней текущего месяца. На третьем листе в ячейке A1 вручную проставляется любая дата. Нужен макрос, который скопирует с двух листов строки (полностью), содержащие дату, указанную в ячейке A1. Самому задачу не осилить. Может быть кто поможет дилетанту? Заранее спасибо!
Уважаемые профи, добрый день. Помогите, пожалуйста, решить проблему. Нужен макрос (под ключ, что называется) для копирования строк по заданному условию. Поясню подробнее. На отдельных листах в файле EXCEL (пока их два, но может быть и больше) располагаются одна под другой одинаковые таблицы по 15 колонок. Количество таблиц на разных листах различно. В графе G проставлены даты по количеству дней текущего месяца. На третьем листе в ячейке A1 вручную проставляется любая дата. Нужен макрос, который скопирует с двух листов строки (полностью), содержащие дату, указанную в ячейке A1. Самому задачу не осилить. Может быть кто поможет дилетанту? Заранее спасибо!Albatros
Albatros, правила форума и не для вас тоже писаны? Без примера - никак. Если всё же озаботитесь - расскажите, по какому принципу нужно отбирать листы, из которых копировать строки (представьте себе, что листов стало 1000...) Ну и такой вопрос - принципиально ли хранить несколько таблиц на одном листе, нельзя ли разнести таблицы на отдельные листы (один лист - одна таблица)?
Albatros, правила форума и не для вас тоже писаны? Без примера - никак. Если всё же озаботитесь - расскажите, по какому принципу нужно отбирать листы, из которых копировать строки (представьте себе, что листов стало 1000...) Ну и такой вопрос - принципиально ли хранить несколько таблиц на одном листе, нельзя ли разнести таблицы на отдельные листы (один лист - одна таблица)?AndreTM
Прошу прощения, если я что-то нарушил. Не очень ориентируюсь в форумах... Уважаемый AndreTM, спасибо за отклик. Исправляюсь. Файл с образцом прикрепил. Количество листов всего два. И это принципиально. На каждом таблицы по одному виду продукта. Больше не будет.А вот разносить (один лист - одна таблица) весьма проблематично, так как на листе может быть неограниченное количество таблиц. И вот хотелось бы, чтобы макрос собирал строки с одинаковой датой на третий лист. Название листов принципиально? Моих скудных познаний хватит, чтобы потом их в макросе переименовать...
Прошу прощения, если я что-то нарушил. Не очень ориентируюсь в форумах... Уважаемый AndreTM, спасибо за отклик. Исправляюсь. Файл с образцом прикрепил. Количество листов всего два. И это принципиально. На каждом таблицы по одному виду продукта. Больше не будет.А вот разносить (один лист - одна таблица) весьма проблематично, так как на листе может быть неограниченное количество таблиц. И вот хотелось бы, чтобы макрос собирал строки с одинаковой датой на третий лист. Название листов принципиально? Моих скудных познаний хватит, чтобы потом их в макросе переименовать...Albatros
Вообще-то, правильная методика учета как раз и предполагает, что "один лист - одна таблица". Другое дело, что, может быть,и не надо разносить таблицы - а надо, наоборот, объединить их все в одну, введя дополнительное поле для того, чтобы отличать, к какой "таблице" относится строка; да и вообще, если структуры данных (столбцы) в таблицах на разных листах совпадают тоже - то и разные листы можно объединить в один, опять же, квалифицировав нужный лист ("вид продукта") отдельным полем-столбцом... и получим обычную накопительную таблицу БД
Ладно, давайте решим пока так, как есть. Первый вариант - копированием строк с исходных листов. Недостаток - переносится ВСЁ, включая форматирование и формулы, так что, возможно, придётся дополнительно править момент переноса строки. Второй вариант - одним запросом через ADO. Но, опять же, всплывает известная проблема Jet'а с обработкой дат...
Вообще-то, правильная методика учета как раз и предполагает, что "один лист - одна таблица". Другое дело, что, может быть,и не надо разносить таблицы - а надо, наоборот, объединить их все в одну, введя дополнительное поле для того, чтобы отличать, к какой "таблице" относится строка; да и вообще, если структуры данных (столбцы) в таблицах на разных листах совпадают тоже - то и разные листы можно объединить в один, опять же, квалифицировав нужный лист ("вид продукта") отдельным полем-столбцом... и получим обычную накопительную таблицу БД
Ладно, давайте решим пока так, как есть. Первый вариант - копированием строк с исходных листов. Недостаток - переносится ВСЁ, включая форматирование и формулы, так что, возможно, придётся дополнительно править момент переноса строки. Второй вариант - одним запросом через ADO. Но, опять же, всплывает известная проблема Jet'а с обработкой дат...AndreTM
АндреТМ (я так думаю, что Вас зовут Андрей), спасибо огромное!!! Работают оба варианта, и оба меня вполне устраивают! А что касается конечного форматирования - это как раз не важно! Собранные данные все равно копируются в другой файл как текст (без формата). Спасибо Вам огромное! Удачи во всем!
АндреТМ (я так думаю, что Вас зовут Андрей), спасибо огромное!!! Работают оба варианта, и оба меня вполне устраивают! А что касается конечного форматирования - это как раз не важно! Собранные данные все равно копируются в другой файл как текст (без формата). Спасибо Вам огромное! Удачи во всем!Albatros
Упс. Поспешил немножко. Вы абсолютно правы. Копирование с формулами (по первому варианту) дало не совсем правильный результат. Можно ли в программу добавить такое условие, что копируемые строки (в них есть и формулы, и числовые значения) будут вставляться как текст?
Упс. Поспешил немножко. Вы абсолютно правы. Копирование с формулами (по первому варианту) дало не совсем правильный результат. Можно ли в программу добавить такое условие, что копируемые строки (в них есть и формулы, и числовые значения) будут вставляться как текст?Albatros
Если же копировать нужно вообще всю строку как текст - то придется обработать все ячейки строки. Например так (код, опять же, вместо предыдущего): [vba]
Код
For Each c In Intersect(cell.EntireRow, Sheets(cName).UsedRange) Cells(i, c.Column) = CStr(c.Value) Next
[/vba]Не забудьте добавить описание переменной с в Dim !
Если же копировать нужно вообще всю строку как текст - то придется обработать все ячейки строки. Например так (код, опять же, вместо предыдущего): [vba]
Код
For Each c In Intersect(cell.EntireRow, Sheets(cName).UsedRange) Cells(i, c.Column) = CStr(c.Value) Next
[/vba]Не забудьте добавить описание переменной с в Dim !AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Понедельник, 03.06.2013, 11:03
Прошу Вашей помощи никак не могу понять как правильно записать макрос условия которого состоят в следующем есть общая таблица (лист 1) учет выполнения заказа, нужно из этой таблицы скопировать строки определенных заказчиков в листы этих заказчиков, так чтоб они копировались в листы заказчиков по порядку.
Прошу Вашей помощи никак не могу понять как правильно записать макрос условия которого состоят в следующем есть общая таблица (лист 1) учет выполнения заказа, нужно из этой таблицы скопировать строки определенных заказчиков в листы этих заказчиков, так чтоб они копировались в листы заказчиков по порядку.narainbow
Добрый день. Есть строки с указанием количества позиций. Нужно сделать столько копий этой строки, сколько указанно в столбце количество. То есть 5 брюк, должно стать 5 строк с брюками. [moder]Читаем Правила форума Один вопрос - одна тема Эта тема закрыта
Добрый день. Есть строки с указанием количества позиций. Нужно сделать столько копий этой строки, сколько указанно в столбце количество. То есть 5 брюк, должно стать 5 строк с брюками. [moder]Читаем Правила форума Один вопрос - одна тема Эта тема закрытаfyx