Здравствуйте, уважаемые специалисты)) Вот такая вот появилась задачка: Есть файл, в котором есть 4 листа: 3 листа - таблицы откуда должны Копироваться данные при определенном условии, 4-й лист (для копирования) - куда должны копироваться эти данные. Условие: В таблицах есть столбец LEXWARE: если в этом столбце значения принимают 555555 или 444444, то строку нужно автоматически копировать в таблицу «Для Копирования» (по порядку - без пустых строк).
НО, наверно самое важное, хотел бы узнать, как сделать, чтобы при добавлении нового листа - такой же таблицы с данными и столбцом LEXWARE, данные также бы копировались в таблицу «Для Копирования».
Задачу, наверно лучше решить с помощью макросов. Но если возможно, с помощью формул - не откажусь и от такого варианта решения)
Здравствуйте, уважаемые специалисты)) Вот такая вот появилась задачка: Есть файл, в котором есть 4 листа: 3 листа - таблицы откуда должны Копироваться данные при определенном условии, 4-й лист (для копирования) - куда должны копироваться эти данные. Условие: В таблицах есть столбец LEXWARE: если в этом столбце значения принимают 555555 или 444444, то строку нужно автоматически копировать в таблицу «Для Копирования» (по порядку - без пустых строк).
НО, наверно самое важное, хотел бы узнать, как сделать, чтобы при добавлении нового листа - такой же таблицы с данными и столбцом LEXWARE, данные также бы копировались в таблицу «Для Копирования».
Задачу, наверно лучше решить с помощью макросов. Но если возможно, с помощью формул - не откажусь и от такого варианта решения)biomirror
Public Sub www() Dim sh As Worksheet With Sheets("Для Копирования") .UsedRange.Offset(1).Clear For Each sh In ThisWorkbook.Worksheets If sh.Name <> "Для Копирования" Then sh.AutoFilterMode = 0 sh.Range("$A$1").CurrentRegion.AutoFilter Field:=10, Criteria1:="=555555" _ , Operator:=xlOr, Criteria2:="=444444" sh.Range("$A$1").CurrentRegion.Offset(1).SpecialCells(12).Copy .[a65536].End(xlUp)(2, 1) sh.AutoFilterMode = 0 End If Next End With End Sub
[/vba]
[vba]
Код
Public Sub www() Dim sh As Worksheet With Sheets("Для Копирования") .UsedRange.Offset(1).Clear For Each sh In ThisWorkbook.Worksheets If sh.Name <> "Для Копирования" Then sh.AutoFilterMode = 0 sh.Range("$A$1").CurrentRegion.AutoFilter Field:=10, Criteria1:="=555555" _ , Operator:=xlOr, Criteria2:="=444444" sh.Range("$A$1").CurrentRegion.Offset(1).SpecialCells(12).Copy .[a65536].End(xlUp)(2, 1) sh.AutoFilterMode = 0 End If Next End With End Sub
KuklP, спасибо, работает. Только не подскажите, как сделать: 1. Чтобы данные переносились автоматически, без вызова макроса. 2. Как сделать, чтобы при добавлении нового листа, копировались строки, которые содержат 555555 или 444444
KuklP, спасибо, работает. Только не подскажите, как сделать: 1. Чтобы данные переносились автоматически, без вызова макроса. 2. Как сделать, чтобы при добавлении нового листа, копировались строки, которые содержат 555555 или 444444biomirror
1. Эммм... странно. Почему куда ни попадя. Нельзя сделать так, чтобы было все тоже самое, что сейчас, - только без вызова макроса или нажатия на кнопку? 2. Пробовал: а)в Файле есть скрытый лист, при его "открытии" и внесении в него значения "555555" - данные из строки не копируются. б) создал новый лист, ввел значение 555555 вышла ошибка: RunTime error '1004' Метод AutoFilter из класса Range завершен некорректно
Сильно извиняюсь, хотел бы еще узнать, что значит каждая строчка в коде, а то вот ошибка вышла, а я даже не знаю, как ее исправить))
1. Эммм... странно. Почему куда ни попадя. Нельзя сделать так, чтобы было все тоже самое, что сейчас, - только без вызова макроса или нажатия на кнопку? 2. Пробовал: а)в Файле есть скрытый лист, при его "открытии" и внесении в него значения "555555" - данные из строки не копируются. б) создал новый лист, ввел значение 555555 вышла ошибка: RunTime error '1004' Метод AutoFilter из класса Range завершен некорректно
Сильно извиняюсь, хотел бы еще узнать, что значит каждая строчка в коде, а то вот ошибка вышла, а я даже не знаю, как ее исправить))biomirror
создал новый лист, ввел значение 555555 вышла ошибка
- куда Вы ввели значение? Там есть таблица на листе? Вы бы еще на заборе "ввели", а потом бы удивлялись - чего это программа не поняла Ваших благих намерений.
создал новый лист, ввел значение 555555 вышла ошибка
- куда Вы ввели значение? Там есть таблица на листе? Вы бы еще на заборе "ввели", а потом бы удивлялись - чего это программа не поняла Ваших благих намерений.
Добавьте в код сотни проверок для защиты от криворуких юзверей
Я только спросил. Зачем сразу так ругаться... Если бы я знал ответ на вопрос или имел представление, как это работает, я б наверно на форуме бы не стал спрашивать...
- куда Вы ввели значение? Там есть таблица на листе?
Эмм... я не спец. в эксель, обычный пользователь. Как я вижу процесс копирования: на листе в столбце есть определенное значение => строка переносится на другой лист.
Добавьте в код сотни проверок для защиты от криворуких юзверей
Я только спросил. Зачем сразу так ругаться... Если бы я знал ответ на вопрос или имел представление, как это работает, я б наверно на форуме бы не стал спрашивать...
- куда Вы ввели значение? Там есть таблица на листе?
Эмм... я не спец. в эксель, обычный пользователь. Как я вижу процесс копирования: на листе в столбце есть определенное значение => строка переносится на другой лист.
В таблицах есть столбец LEXWARE: если в этом столбце значения
- там куда Вы "вставили", есть таблица? В НЕЙ есть столбец LEXWARE? Т.е. Вам жутко тяжело нажать кнопку для запуска макроса, но Вы тут же чудите как заблагорассудится и программист должен учесть все возможные косяки? Неужели Вы для создания текстового документа станете запускать дефрагментатор диска? Вот. В Экселе тоже есть правила работы с ним. Будете работать не по правилам, получите ошибки и проблемы. Так устроен мир. Все, машины, компы, бытовые приборы, общество в конце концов
В таблицах есть столбец LEXWARE: если в этом столбце значения
- там куда Вы "вставили", есть таблица? В НЕЙ есть столбец LEXWARE? Т.е. Вам жутко тяжело нажать кнопку для запуска макроса, но Вы тут же чудите как заблагорассудится и программист должен учесть все возможные косяки? Неужели Вы для создания текстового документа станете запускать дефрагментатор диска? Вот. В Экселе тоже есть правила работы с ним. Будете работать не по правилам, получите ошибки и проблемы. Так устроен мир. Все, машины, компы, бытовые приборы, общество в конце концов KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Сообщение отредактировал KuklP - Пятница, 04.03.2016, 18:32
Во, во во, все, понял :D Единственное, в скрытом листе, есть столбец LEXWARE. Почему тогда с этого листа строки не копируются, когда он становится открытым?
Т.е. Вам жутко тяжело нажать кнопку для запуска макроса
Просто подумал, что было бы неплохо, если бы строки "сами" копировались, вообще без участия человека. Если честно, я и сейчас думаю, что должно быть какое-нибудь простое несложное решение, чтобы не приходилось "нажимать на кнопку" (ну это же EXEL, он должен мочь)). Вопрос в том, КАК?
Во, во во, все, понял :D Единственное, в скрытом листе, есть столбец LEXWARE. Почему тогда с этого листа строки не копируются, когда он становится открытым?
Т.е. Вам жутко тяжело нажать кнопку для запуска макроса
Просто подумал, что было бы неплохо, если бы строки "сами" копировались, вообще без участия человека. Если честно, я и сейчас думаю, что должно быть какое-нибудь простое несложное решение, чтобы не приходилось "нажимать на кнопку" (ну это же EXEL, он должен мочь)). Вопрос в том, КАК?biomirror
Сообщение отредактировал biomirror - Пятница, 04.03.2016, 19:05
Ну вот, очередной перл от вас - скрытый лист. В топике есть хоть слово о нем? В примере есть скрытый лист? Как я могу судить о том чего в глаза не видел и даже не знал о его существовании? В макросе привязка к Ячейке А1: sh.Range("$A$1").CurrentRegion. Там есть что-нибудь в А1? Нет пропущенных строк? И т.д....
Ну вот, очередной перл от вас - скрытый лист. В топике есть хоть слово о нем? В примере есть скрытый лист? Как я могу судить о том чего в глаза не видел и даже не знал о его существовании? В макросе привязка к Ячейке А1: sh.Range("$A$1").CurrentRegion. Там есть что-нибудь в А1? Нет пропущенных строк? И т.д....KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Вот так скопирует со скрытого листа при наличии в колонке LEXWARE 555555, но смысл? Съехавшие данные, мусорник в результате. Неправильная работа. Лучше привести все листы к одному виду. Sub Копирование() [vba]
Код
Dim sh As Worksheet, m& With Sheets("Для Копирования") .UsedRange.Offset(1).Clear For Each sh In ThisWorkbook.Worksheets If sh.Name <> "Для Копирования" Then m = Application.Match("LEXWARE", Intersect(sh.UsedRange, sh.Rows(1)), 0) sh.AutoFilterMode = 0 sh.Range("$A$1").CurrentRegion.AutoFilter Field:=m, Criteria1:="=555555" _ , Operator:=xlOr, Criteria2:="=444444" sh.Range("$A$1").CurrentRegion.Offset(1).SpecialCells(12).Copy .[a65536].End(xlUp)(2, 1) sh.AutoFilterMode = 0 End If Next End With End Sub
[/vba]
Вот так скопирует со скрытого листа при наличии в колонке LEXWARE 555555, но смысл? Съехавшие данные, мусорник в результате. Неправильная работа. Лучше привести все листы к одному виду. Sub Копирование() [vba]
Код
Dim sh As Worksheet, m& With Sheets("Для Копирования") .UsedRange.Offset(1).Clear For Each sh In ThisWorkbook.Worksheets If sh.Name <> "Для Копирования" Then m = Application.Match("LEXWARE", Intersect(sh.UsedRange, sh.Rows(1)), 0) sh.AutoFilterMode = 0 sh.Range("$A$1").CurrentRegion.AutoFilter Field:=m, Criteria1:="=555555" _ , Operator:=xlOr, Criteria2:="=444444" sh.Range("$A$1").CurrentRegion.Offset(1).SpecialCells(12).Copy .[a65536].End(xlUp)(2, 1) sh.AutoFilterMode = 0 End If Next End With End Sub
Я эту задачу не совсем себе решаю... Просто коллектив далек от компьютеров да и от техники вообще (как, впрочем и я), но я один не шарахаюсь от различных компьютерных программ. Попросили что-нибудь придумать. Одной из задач было то, что я обозначил в топике:
НО, наверно самое важное, хотел бы узнать, как сделать, чтобы при добавлении нового листа - такой же таблицы с данными и столбцом LEXWARE, данные также бы копировались в таблицу «Для Копирования».
Видимо слова "такой же таблицы с данными" были лишними.
Увидел скрытый лист в примере. Там нет ни одной строки с 55555 и структура таблицы другая.
Я вбивал в столбец LEXWARE 55555 и другие данные в другие столбцы. Но строка, в которую я вбивал 55555 не скопировалась в "общую" таблицу.
Наверно, правильнее задание будет сформулировать так: Если в ячейке листа встречается 555555 или 444444, то строку в которой есть это значение, необходимо перенести в таблицу «Для Копирования». Как это реализовать?
Я эту задачу не совсем себе решаю... Просто коллектив далек от компьютеров да и от техники вообще (как, впрочем и я), но я один не шарахаюсь от различных компьютерных программ. Попросили что-нибудь придумать. Одной из задач было то, что я обозначил в топике:
НО, наверно самое важное, хотел бы узнать, как сделать, чтобы при добавлении нового листа - такой же таблицы с данными и столбцом LEXWARE, данные также бы копировались в таблицу «Для Копирования».
Видимо слова "такой же таблицы с данными" были лишними.
Увидел скрытый лист в примере. Там нет ни одной строки с 55555 и структура таблицы другая.
Я вбивал в столбец LEXWARE 55555 и другие данные в другие столбцы. Но строка, в которую я вбивал 55555 не скопировалась в "общую" таблицу.
Наверно, правильнее задание будет сформулировать так: Если в ячейке листа встречается 555555 или 444444, то строку в которой есть это значение, необходимо перенести в таблицу «Для Копирования». Как это реализовать?biomirror
Если в ячейке листа встречается 555555 или 444444, то строку в которой есть это значение, необходимо перенести в таблицу «Для Копирования».
Вы понимаете, что это полнейшая ахинея? Хотите заниматься ерундой - Ваше право, а меня увольте. Вот ваш файл с макросом из #14. В нем скрытый лист с проставленными ключевыми значениями. Напрягитесь, нажмите кнопку в углу. Посмотрите что получилось. Это УЖЕ не таблица с данными, это помойка. А если дебильные юзвери, коих трудно обучить ткнуть кнопку, начнут где не попадя пихать ключевые цифры...
Если в ячейке листа встречается 555555 или 444444, то строку в которой есть это значение, необходимо перенести в таблицу «Для Копирования».
Вы понимаете, что это полнейшая ахинея? Хотите заниматься ерундой - Ваше право, а меня увольте. Вот ваш файл с макросом из #14. В нем скрытый лист с проставленными ключевыми значениями. Напрягитесь, нажмите кнопку в углу. Посмотрите что получилось. Это УЖЕ не таблица с данными, это помойка. А если дебильные юзвери, коих трудно обучить ткнуть кнопку, начнут где не попадя пихать ключевые цифры...
Да, да, да вот так... Понял, что вы имели ввиду, когда сказали, что получается полнейшая ахинея - количество столбцов таблицы скрытого листа, откуда копируются данные, не совпадает с количеством столбцов таблицы, куда копируются данные. Хотел исправить ситуацию вставкой двух пустых столбцов и их последующим скрытием (думал, что скрипт просто переносит данные из столбца А одного листа в столбец А другого), но скрипт перестал работать... Как сделать, чтобы при вставке двух столбцов (после столбца D)и их последующем скрытии, скрипт работал?
Пробовал добавить лист, со структурой как в листе "Для копирования". Создал, внес в столбец LEXWARE в произвольную строчку 555555. Данные почему-то не копировались... Потом внес в другую строчку - стали копироваться. Ничего не мог понять. Потом только заметил, что в исходной таблице строки должны вносится по порядку, иначе копирования происходить не будет. Можно ли сделать так, чтобы строки копировались, если даже они занесены не по порядку?
Да, да, да вот так... Понял, что вы имели ввиду, когда сказали, что получается полнейшая ахинея - количество столбцов таблицы скрытого листа, откуда копируются данные, не совпадает с количеством столбцов таблицы, куда копируются данные. Хотел исправить ситуацию вставкой двух пустых столбцов и их последующим скрытием (думал, что скрипт просто переносит данные из столбца А одного листа в столбец А другого), но скрипт перестал работать... Как сделать, чтобы при вставке двух столбцов (после столбца D)и их последующем скрытии, скрипт работал?
Пробовал добавить лист, со структурой как в листе "Для копирования". Создал, внес в столбец LEXWARE в произвольную строчку 555555. Данные почему-то не копировались... Потом внес в другую строчку - стали копироваться. Ничего не мог понять. Потом только заметил, что в исходной таблице строки должны вносится по порядку, иначе копирования происходить не будет. Можно ли сделать так, чтобы строки копировались, если даже они занесены не по порядку?biomirror
Сообщение отредактировал biomirror - Суббота, 05.03.2016, 10:34
Ну уж нет, выловить все косяки стаи недолугих юзверей... Хлопотно это. Проще контингент обучить, а если не поддаются обучению - гнать в три шеи и набирать новых, поддающихся. Если уж я, сварщик смог освоить это, триста лет мне ненужное, то какой смысл платить зарплату инфузориям, которым это нужно, но они не в состоянии. Судите сами - хочешь работать в Эксе(Ворде, Винде да в чем угодно), изучаешь Экс. А не Экс подстраивается под каждого идиота
Ну уж нет, выловить все косяки стаи недолугих юзверей... Хлопотно это. Проще контингент обучить, а если не поддаются обучению - гнать в три шеи и набирать новых, поддающихся. Если уж я, сварщик смог освоить это, триста лет мне ненужное, то какой смысл платить зарплату инфузориям, которым это нужно, но они не в состоянии. Судите сами - хочешь работать в Эксе(Ворде, Винде да в чем угодно), изучаешь Экс. А не Экс подстраивается под каждого идиота KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728