0 / 0 / 0
Регистрация: 16.04.2014
Сообщений: 6
1

Макрос для фильтра строк по совпадению номера в коде и таблице

28.04.2014, 13:23. Показов 2096. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!

Возник такой вопрос, пытаюсь отфильтровать большую таблицу путем введения в код определенных номеров статей. Хотелось бы, чтобы фильтровалось путем совпадения статьи в коде и таблице. Прилагаю кусок таблицы для примера. Код который у меня он конечно работает, но из за того что он фильтрует по 2 статьи приходится дополнительно вводить макрос для удаления пустых строк, именно поэтому с шагом 100 делал. Подскажите пожалуйста, может можно сделать это через массив и будет проще.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Фильтр()
With Sheets("Лист1").Range("B1").CurrentRegion
.AutoFilter Field:=1, Criteria1:="2020", Operator:=xlOr, Criteria2:="4022"
.Copy Sheets("Лист2").Range("A2")
.AutoFilter
End With
With Sheets("Лист1").Range("B1").CurrentRegion
.AutoFilter Field:=1, Criteria1:="4028", Operator:=xlOr, Criteria2:="4033"
.Copy Sheets("Лист2").Range("A100")
.AutoFilter
End With
 MsgBox "Фильтрация произведена!", vbInformation
End Sub
Вложения
Тип файла: xlsx Пример.xlsx (14.2 Кб, 20 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2014, 13:23
Ответы с готовыми решениями:

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

Макрос Outlook для сохранения вложения в папку по частичному совпадению имени файла
Всем добрый день! Каждый день приходит в одном письме множество файлов. Есть ли макрос который...

Cделать в таблице формы одну из строк - строкой фильтра
Друзья, есть мысль сделать в таблице формы одну из строк - строкой фильтра! Т.е. есть таблица с ФИО...

Макрос для создания фильтра
Уважаемые знатоки макросов! Помогите, пожалуйста, справиться со следующей задачей: Мне нужно...

5
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
28.04.2014, 13:57 2
Через массив - кстати, макрорекордер это записывает.
Visual Basic
1
  .AutoFilter Field:=1, Criteria1:=Array("2020", "4022", "4028", "4033"), Operator:=xlFilterValues
0
0 / 0 / 0
Регистрация: 16.04.2014
Сообщений: 6
29.04.2014, 09:25  [ТС] 3
Да, но в такой массив не получается загнать все номера статей....
Visual Basic
1
2
.AutoFilter Field:=1, Criteria1:=Array("1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008", "1009", "1010", "1011", "1012", "1013", "1014", "1015", "1016", "1021", "1022", "1028", "1053", "1070", "1075", "1084", "1086", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2017", "2020", "2027", "2028", "2029", "2030", "2031", "2032", "2033", "2034", "2035", "2036", "2037", "2038", "2039", "2040", "2041", "2042", "2043", "2051", "2052", "2053", "2214", "2215", "2216", "2217", "2218", "2219", "2220", "2221", "2222", "2223", "2224", "2225", "2226", "2227", "2401", "2402", "2403", "2404", "2405", "2406", "2407", "2408", "2409", "2410", "2411", "2412", "2413", "2414", "2415", "2416", "2417", "2418", "2419", "2420", "2421", "2422", "2431", "2432", "2433", "2582", "2583", "2584", "2585", "2586", "2587", "2588", "2589", "2590", "2601", "2602", "2603", "2611", "2612", "2613", "2616", "2617", "2618", "2621", "2622", "2623"), Operator:=xlFilterValues,
    Criteria2:=Array("3008", "3009", "3010", "3011", "3016", "3019", "3020", "3021", "3022", "3047", "3048", "3055", "3101", "3102", "3103", "3104", "3105", "3106", "3107", "3108", "3109", "3110", "3111", "3112", "3113", "3114", "3115", "3116", "3117", "3118", "3119", "3120", "3121", "3122", "3130", "3131", "3132", "3140", "3141", "3142", "3143", "3144", "3145", "3146", "3147", "3148", "3149", "3151", "3155", "3156", "3158", "3159", "3163", "3201", "3202", "3203", "3204", "3205", "3206", "3207", "3208", "3209", "3210", "3211", "3213", "3214", "3215", "3218", "3219", "3221", "3230", "3231", "3232", "3239", "3301", "3302", "3303", "3304", "3305", "3306", "3307", "3308", "3309", "3310", "3311", "3312", "3313", "3314", "3315", "3316", "3317", "3320", "3321", "3322", "3330", "3331", "3340", "3341", "3342", "3343", "3344", "3345", "3346", "3347", "3349", "3350", "3359", "3363", "3401", "3402", "3403", "3404", "3405", "3406", "3407", "3408", "3410", "3411")
Как можно загнать в обработку такое кол-во статей, причем тут еще не все, а 70% от всех статей.
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
29.04.2014, 13:38 4
Ph0enixx, почему не получается? Я убедился, что у функции Array может быть не менее 256 аргументов:
Написать программу, которая выводит двоичное представление введенного с клавиатуры числа в диапазоне от 0 до 255
В вашем случае можно
1. использовать интервал значений: автофильтр - текстовые фильтры - настраиваемый фильтр - больше или равно... И меньше или равно ...
2. иметь список значений на отдельном листе и считывать его в массив.
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
29.04.2014, 15:59 5
Я бы неспеша загнал все статьи в словарь, затем цикл по исходному массиву, сверка со словарём, перекладываем найденное тут же в начало массива.
Собранную верхушку выгружаем.

Ну их эти фильтры...

Писать не на чем - списка статей нет, пример к коду не подходит, куда выгружать - непонятно...
0
0 / 0 / 0
Регистрация: 16.04.2014
Сообщений: 6
12.05.2014, 16:22  [ТС] 6
Спасибо ребят, уже сделал через фильтр который имеет эксел, просто загнал в макрос нужные статьи. Но пришлось написать макрос на перенос того, что он отфильтровал на другой лист с шапкой таблицы.
Вот прилагаю отрывки решения проблемы, может кому пригодится.
PureBasic
1
2
3
4
5
6
7
8
Sub ФильтрВаг()
With Sheets("Преобразованная таблица").Range("A1:B10000").CurrentRegion
    .AutoFilter Field:=1, Criteria1:=Array( _
    "1031", "1032", "1033", "1034", "1040", "1041", "1042", "1044", "1045", "1046", "1047", "1052", "2015", "2061", "2062", "2063", "6001", "6002", "6004", "6008", _
    "6021", "6022", "6075"), Operator:=xlFilterValues
    .AutoFilter Field:=2, Criteria1:="Специфические (прямые производственные) расходы"
End With
End Sub
А это макрос для переноса на другой лист:
PureBasic
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
27
28
Sub ПеренестиВ()
Dim rng As Range
Dim rng2 As Range
 
With ActiveSheet.AutoFilter.Range
 On Error Resume Next
   Set rng2 = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
       .SpecialCells(xlCellTypeVisible)
 On Error GoTo 0
End With
If rng2 Is Nothing Then
   MsgBox "Нет данных для копирования"
Else
   Worksheets("В").Cells.Clear
   Set rng = ActiveSheet.AutoFilter.Range
   rng.Offset(1, 0).Resize(rng.Rows.Count - 1).Copy _
     Destination:=Worksheets("В").Range("A4")
End If
   'ActiveSheet.ShowAllData
    'копирование шапки
    Sheets("Преобразованная таблица").Select
    Rows("4:6").Select
    Selection.Copy
    Sheets("В").Select
    Rows("1:3").Select
    ActiveSheet.Paste
    Range("P8").Select
End Sub
0
12.05.2014, 16:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2014, 16:22
Помогаю со студенческими работами здесь

Макрос: удаление строк в таблице Excel
День добрый! Возникла такая задачка: В последнем столбце таблице будет кнопка, на которой будет...

Макрос удаления пустых строк в таблице
Имеется таблица. Если в столбце Н строки не содержат никаких значений (пустые) то такие строки...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru