Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Сложный автофильтр с условием "содержит". Доработка макроса., фильтрация номеров заказов с несколькими дополнительными условиями
 
Есть макрос, который автоматически фильтрует номера заказов с несколькими дополнительными условиями. Пример прикреплен.
Его работа:
На листе 2 - база заказов по которым все фильтруется. На листе 3 - 2 столбца, значения которых записываются в фильтр. Первый - номер заказа, второй - номера деталей. После работы автофильтра на 2 листе все неподходящие строки скрываются и то что осталось копируется в лист 1.

Сейчас к нему хочу дописать еще одно условие - фильтровать номера заказов по условию "содержит" (так как раньше были короткие номера заказов, то было проще их вручную записать и не париться, а теперь новый вид, который руками в 10 раз дольше забивать. Придумали способ сокращенной записи для всех, а в базе так нельзя, вот и возникла потребность в изменении макроса). Как сделать не могу понять, еще и систему работы макроса не могу правильно составить, а начальство твердит: "Надо".
Нашел как записать код для "содержит":
Код
Selection.AutoFilter Field:=1, Criteria1:="*" & Cells(1, 1) & "*", Operator:=xlAnd
но не для определенных значений, а любых, которые могут быть в ячейках, но не смог его правильным образом встроить. Так как хотел оставить текущую работу макроса, чтобы искал полные совпадения по ячейкам и добавить новое условие: "содержит" в ячейке, то возник вопрос - не будет ли работа макроса двойной? Например, сначала он найдет все по полному совпадению, а потом по "содержит" и отобразит дубликаты? Здесь важно оставить именно двойное условие, так как могут быть номера 1001 или 10011, а по "содержит" найдет оба варианта.

Очень надеюсь, что Вы поможете с этим вопросом. Обращался ни один раз и всегда выручали. Другие форумы так не могут)
Цикл копирования ячеек, которые не пустые.
 
Простейший цикл, казалось бы, а извилины не работают так, чтобы сделать как надо.
Есть задача копировать содержимое одной ячейки в другую на разных столбцах. При этом копировать должны только ячейки содержащие "*20-*" или "*21-*" (надеюсь верно показал пример "содержит") и в пределах текущей строки. Пример файла прикрепил. В файле есть макрос, который показывает как должно все сработать, только без условия "содержит". Он тяжелый, упростить как раз хотел с помощью циклов. При этом количество строк может быть больше 40000, а те ячейки, которые надо проверять могут быть пустыми 50/50.
Изменено: victorSwild - 11.12.2020 14:33:11
Фильтр всех заказов из диапазона со списком заказов, с дополнительными условиями фильтрации
 
Есть макрос, который был написан около года назад, с Вашей помощью, за что спасибо. А сейчас его полезности не хватает. Точнее нужно больше функций.
Сам макрос работает как автофильтр, который берет диапазон номеров заказов из одного листа и применяет его в фильтре другого листа, где ищет совпадения и выдает таблицу с отобранными заказами. После этого копирует все полученное в другой лист.
Сейчас надо добавить еще один фильтр в этот цикл. В таблице заказов кроме номера заказа теперь появляется еще одна переменная - номер детали в заказе. То есть нужно при фильтрации каждого заказа фильтровать еще и номера деталей. В каждом заказе количество деталей разное, от 1 до 50, и нужно выбирать всегда разные. При этом количество заказов может быть тоже от 1 до 100. В итого работа макроса должна иметь тот же вывод, что и сейчас, но еще и уметь выбирать номера деталей для каждого заказа.
В программировании VBA не силен, больше в Pithon работаю, поэтому не догоняю многих вещей из VBA. Думал добавить в оператор цикла for еще и while, чтобы работал так: взять из списка значений для фильтра первое и присвоить в автофильтр фильтруемого диапазона на другом листе; пока фильтруем текущее значение по номеру заказа, запускаем фильтр по номеру детали (номера деталей записаны на том же листе, где и номера заказов. В одной ячейке указаны номера через запятую. Ячейка с номерами деталей напротив ячейки с номерами заказов), полученный двойной автофильтр для первого заказа оставляем и переходим на следующий заказ (i+1) и повторяем те же действия. Полученный результат из всех фильтрованных заказов с деталями копируем в лист1.
Пример файла прикрепил, только там попыток изменить нету, так как ни одна не сработала я решил оставить только исходную рабочую версию макроса.
Мозгов не хватает как это дело сделать параллельным. Объяснение, конечно, тоже хромает.
Если эта тема уже была где-то на форуме, то буду очень не против ее прочесть, чтобы сделать задуманное, но пока подобное не получилось найти. Может плохо ищу)
Автоматическая фильтрация столбца с определенными значениями, взятыми из другого столбца.
 
Ребят, HELP!!! Не пойму как сделать макрос, который будет работать с фильтрами. Цель такая: Есть первый столбец с n количеством значений и есть второй столбец, в другом листе этой же книги, который содержит в себе повторяющиеся значения как в первом столбце. Нужно отфильтровать первый столбец так, чтобы фильтр взял за основу значения из второго столбца, засунул себе в критерий отбора (не знаю как правильно, для меня это список значений с галочками, которые вручную очень долго надо клацать) и выдал результат в виде отфильтрованных значений. Я приложил файл где пример этих столбцов есть. Я даже не понимаю с чего начать, поэтому и обращаюсь к Вам.

Пример макроса могу показать из макрорекордера со своими дополнениями, но как обычно по незнанию лезут ошибки.
Код
Sub Ìàêðîñ1()
    ActiveSheet.Range("$D$2:$I$51586").AutoFilter Field:=3, Criteria1:=Array( _
        ActiveWorkbook.Worksheets("Ëèñò3").Range("$D$2:$I$51586")), Operator:=xlFilterValues
End Sub
Изменено: victorSwild - 18.07.2019 13:55:56
Заменить формулы на значения и удалить нули
 
 Нашел как удалять формулы из всей книги, применил и работает, остаются только значения. Нашел и вторую часть замысла - удалить ноли, путем автозамены через макрос, пример взял с этого же сайта, но там всего дня двух столбцов было условие, а мне нужно на всю книгу. Тут я в тупике.
Первая часть:
Код
Sub DelFormula()
For Each sh In ActiveWorkbook.Sheets
 sh.UsedRange.Value = sh.UsedRange.Value
Next
End Sub

Это вот чудо удаляет формулы оставляя значения (на удивление быстро, случайно нашел макрос на форумах), в книге более 100 листов, каждый заполнен прилично. Вес книги от 10мб до 56(в среднем). Макрос работает, к нему претензий нет.

Вторая часть:
Код
Sub Del_zero()
Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        ws.Replace What:="0", Replacement:="", LookAt:=xlWhole
    Next
End Sub

это уже удаление нолей. Уже сам пытался нахимичить рабочую версию, но никак. Для всего листа не работает, а когда что-то пытается запуститься, то выдает ошибку, типа: "Эта команда не может выполнятся для всех листов". Может чего и путаю, но вот с этим макросом у меня проблема. Нужно, чтобы он так же как и первый выполнялся во всей книге.

Изначально выглядел данный макрос так:
Код
Sub Удалить_нули()   
   Columns("A:B").Replace What:="0", Replacement:="", LookAt:=xlWhole   
End Sub

После чего я попытался его на всю книгу применить, но увы...

Помогите, пожалуйста.
Копирование примечания из одного листа в другой с условием.
 
Думаю эта тема уже была у Вас, но как-то ее не нашел. Заранее извиняюсь за повтор темы.
Есть два листа. На одном ведется учет принятия заказов и вся инфа о них. И в нем же есть один столбец, в котором множество разных значений(около 150), которые беспорядочно могут повторятся. Эти значения - это артикулы товара.
На втором листе есть два столбца, первый - в нем как раз вся номенклатура артикулов товара, а второй - это ссылки на изображение, которое является примечанием к каждой ячейке первого столбца. Благодаря одной из тем на форуме получилось при помощи макроса быстро создать такой список.
В прикрепленном файле пришлось удалить все примечания на втором листе потому, что 5 мб у Вас нельзя заливать). Оставил одно.
Задумка следующая: скопировать примечания ячеек со значениями из второго листа в первый таким образом, чтобы примечание было прикреплено к ячейке с нужным значением(артикулом). Может загнул, но пересмотрел достаточное количество форумов и просторов интернета, а вот подходящего варианта решения такой задачи не нашел. Может искал не так, а может и не то искал.
Идея в том, чтобы в итоге получилась как бы подсказка в виде примечаний с картинками в основном первом листе наводя мышь на артикул с товаром.
И есть еще нюанс - прайс будет увеличиваться, и заказы тоже будут каждый день приходить, поэтому буду очень признателен, если объясните как правильно сделать\править макрос, чтобы не было необходимости его каждый раз при добавлении 5-10 заказов переписывать.
Прочитав немало разных тем понял то, что такое нужно макросом делать, причем учитывать условия, чтобы примечания присваивались только к нужным ячейкам(значениям). if и then - не хватило мозгов чтобы разобраться. Понял сам принцип их работы, а вот совместить с поиском совпадений и т.п. не разобрался.
Изменено: victorSwild - 19.07.2017 14:57:45
Страницы: 1
Наверх