Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Фильтрация по двум столбцам - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Фильтрация по двум столбцам (Макросы/Sub)
Фильтрация по двум столбцам
Baton4ik48 Дата: Среда, 07.02.2024, 08:40 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

2021
Добрый день, подкажите пожалуйста как сделать фильтрацию по двум столбцам ? По отдельности столбцы фильтрует, но два вместе нет, если изменю Field на 5 у столбца E:E, то будет ошибка: "VBA Runtime Error 1004 "Application-defined or Object-defined error"
Не могу понять как правильно AutoFilter к двум столбцам

[vba]
Код
Sub HighlightDuplicates()
    Dim wb1 As Workbook
    Dim wb2 As Workbook
    Dim ws1 As Worksheet
    Dim ws3 As Worksheet
    Dim cell As Range
    Dim searchRange As Range
    Dim value As String
    
    ' Открытие файлов
    Set wb1 = Workbooks.Open("C:\Users\user\Desktop\Script\1.xlsx")
    Set wb2 = ThisWorkbook
    
    ' Выбор листов
    Set ws1 = wb1.Sheets("Сводный")
    Set ws3 = wb2.Sheets("Лист3")
    
    ' Очистка предыдущих заливок
    ws1.Cells.Interior.ColorIndex = xlNone
    ws3.Cells.Interior.ColorIndex = xlNone
    
    
    ' Применение фильтрации по двум столбцам
    ws1.Range("B:B").AutoFilter Field:=1, Criteria1:="Московское ЛПУМГ"
    ws1.Range("E:E").AutoFilter Field:=1, Criteria1:="Сужающее устройство", Operator:=xlAnd

    
    ' Перебор значений в столбце A листа 3
    For Each cell In ws3.Range("A1:A" & ws3.Cells(ws3.Rows.Count, "A").End(xlUp).Row)
        value = CStr(cell.value)
        
        ' Поиск значения в отфильтрованном столбце G листа 1
        On Error Resume Next
        Set searchRange = ws1.Range("G:G").SpecialCells(xlCellTypeVisible).Find(What:=value, LookIn:=xlValues, LookAt:=xlWhole)
        On Error GoTo 0
        
        If Not searchRange Is Nothing Then
            ' Если значение найдено, выделяем его желтым
            searchRange.Interior.Color = RGB(255, 255, 0)
            cell.Interior.Color = RGB(255, 255, 0)
        Else
            ' Если значение не найдено, выделяем его красным
            cell.Interior.Color = RGB(255, 0, 0)
        End If
    Next cell
    
    ' Отмена фильтров
    'ws1.AutoFilterMode = False
    
    ' Сохранение изменений и закрытие файла 1.xlsx
    'wb1.Close SaveChanges:=True
End Sub
[/vba]
 
Ответить
СообщениеДобрый день, подкажите пожалуйста как сделать фильтрацию по двум столбцам ? По отдельности столбцы фильтрует, но два вместе нет, если изменю Field на 5 у столбца E:E, то будет ошибка: "VBA Runtime Error 1004 "Application-defined or Object-defined error"
Не могу понять как правильно AutoFilter к двум столбцам

[vba]
Код
Sub HighlightDuplicates()
    Dim wb1 As Workbook
    Dim wb2 As Workbook
    Dim ws1 As Worksheet
    Dim ws3 As Worksheet
    Dim cell As Range
    Dim searchRange As Range
    Dim value As String
    
    ' Открытие файлов
    Set wb1 = Workbooks.Open("C:\Users\user\Desktop\Script\1.xlsx")
    Set wb2 = ThisWorkbook
    
    ' Выбор листов
    Set ws1 = wb1.Sheets("Сводный")
    Set ws3 = wb2.Sheets("Лист3")
    
    ' Очистка предыдущих заливок
    ws1.Cells.Interior.ColorIndex = xlNone
    ws3.Cells.Interior.ColorIndex = xlNone
    
    
    ' Применение фильтрации по двум столбцам
    ws1.Range("B:B").AutoFilter Field:=1, Criteria1:="Московское ЛПУМГ"
    ws1.Range("E:E").AutoFilter Field:=1, Criteria1:="Сужающее устройство", Operator:=xlAnd

    
    ' Перебор значений в столбце A листа 3
    For Each cell In ws3.Range("A1:A" & ws3.Cells(ws3.Rows.Count, "A").End(xlUp).Row)
        value = CStr(cell.value)
        
        ' Поиск значения в отфильтрованном столбце G листа 1
        On Error Resume Next
        Set searchRange = ws1.Range("G:G").SpecialCells(xlCellTypeVisible).Find(What:=value, LookIn:=xlValues, LookAt:=xlWhole)
        On Error GoTo 0
        
        If Not searchRange Is Nothing Then
            ' Если значение найдено, выделяем его желтым
            searchRange.Interior.Color = RGB(255, 255, 0)
            cell.Interior.Color = RGB(255, 255, 0)
        Else
            ' Если значение не найдено, выделяем его красным
            cell.Interior.Color = RGB(255, 0, 0)
        End If
    Next cell
    
    ' Отмена фильтров
    'ws1.AutoFilterMode = False
    
    ' Сохранение изменений и закрытие файла 1.xlsx
    'wb1.Close SaveChanges:=True
End Sub
[/vba]

Автор - Baton4ik48
Дата добавления - 07.02.2024 в 08:40
Nic70y Дата: Среда, 07.02.2024, 09:40 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 8760
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
без Вашего файла проверить не могу,
как-то так, наверное
[vba]
Код
    ws1.Range("B:E").AutoFilter Field:=1, Criteria1:="Московское ЛПУМГ"
    ws1.Range("B:E").AutoFilter Field:=4, Criteria1:="Сужающее устройство"
[/vba]


ЮMoney 41001841029809

Сообщение отредактировал Nic70y - Среда, 07.02.2024, 09:43
 
Ответить
Сообщениебез Вашего файла проверить не могу,
как-то так, наверное
[vba]
Код
    ws1.Range("B:E").AutoFilter Field:=1, Criteria1:="Московское ЛПУМГ"
    ws1.Range("B:E").AutoFilter Field:=4, Criteria1:="Сужающее устройство"
[/vba]

Автор - Nic70y
Дата добавления - 07.02.2024 в 09:40
Baton4ik48 Дата: Среда, 07.02.2024, 09:57 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

2021
Такая же ошибка VBA Runtime Error 1004, приложил файлы , удалил там лишнее, что бы поменьше весил файл
К сообщению приложен файл: 0899027.xlsx (298.7 Kb) · makros.xlsm (32.7 Kb)


Сообщение отредактировал Serge_007 - Четверг, 08.02.2024, 10:12
 
Ответить
СообщениеТакая же ошибка VBA Runtime Error 1004, приложил файлы , удалил там лишнее, что бы поменьше весил файл

Автор - Baton4ik48
Дата добавления - 07.02.2024 в 09:57
Nic70y Дата: Среда, 07.02.2024, 10:21 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 8760
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
Baton4ik48, вот с файлом сразу видно
[vba]
Код
    ws1.Range("B:E").AutoFilter Field:=2, Criteria1:="Московское ЛПУМГ"
    ws1.Range("B:E").AutoFilter Field:=5, Criteria1:="Сужающее устройство"
[/vba]это же порядковый № фильтра на листе


ЮMoney 41001841029809
 
Ответить
СообщениеBaton4ik48, вот с файлом сразу видно
[vba]
Код
    ws1.Range("B:E").AutoFilter Field:=2, Criteria1:="Московское ЛПУМГ"
    ws1.Range("B:E").AutoFilter Field:=5, Criteria1:="Сужающее устройство"
[/vba]это же порядковый № фильтра на листе

Автор - Nic70y
Дата добавления - 07.02.2024 в 10:21
Baton4ik48 Дата: Среда, 07.02.2024, 11:01 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

2021
это же порядковый № фильтра на листе


Да, действительно работает, но почему то когда я исполняю макрос на 22к строках, то у меня ошибку 1004 выдаёт, странно, на том файле какой Вам скинул всё отлично отфильтровало. Я сюда его изначально хотел прикрепить, но он 5 мб весит


Сообщение отредактировал Baton4ik48 - Среда, 07.02.2024, 11:04
 
Ответить
Сообщение
это же порядковый № фильтра на листе


Да, действительно работает, но почему то когда я исполняю макрос на 22к строках, то у меня ошибку 1004 выдаёт, странно, на том файле какой Вам скинул всё отлично отфильтровало. Я сюда его изначально хотел прикрепить, но он 5 мб весит

Автор - Baton4ik48
Дата добавления - 07.02.2024 в 11:01
Nic70y Дата: Среда, 07.02.2024, 11:08 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 8760
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
попробуйте так Range("B13:E25000")


ЮMoney 41001841029809
 
Ответить
Сообщениепопробуйте так Range("B13:E25000")

Автор - Nic70y
Дата добавления - 07.02.2024 в 11:08
Baton4ik48 Дата: Среда, 07.02.2024, 11:16 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

2021
попробуйте так Range("B13:E25000")

такая же ошибка

вот сам файл, может он не прогружает его ? я просто с VBA не работаю, тяжело разобраться, но на работе python нельзя использовать... эх...

1.xlsx (гугл диск)
 
Ответить
Сообщение
попробуйте так Range("B13:E25000")

такая же ошибка

вот сам файл, может он не прогружает его ? я просто с VBA не работаю, тяжело разобраться, но на работе python нельзя использовать... эх...

1.xlsx (гугл диск)

Автор - Baton4ik48
Дата добавления - 07.02.2024 в 11:16
Nic70y Дата: Среда, 07.02.2024, 11:22 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 8760
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
1.xlsx (гугл диск)
Error 401


ЮMoney 41001841029809
 
Ответить
Сообщение
1.xlsx (гугл диск)
Error 401

Автор - Nic70y
Дата добавления - 07.02.2024 в 11:22
Baton4ik48 Дата: Среда, 07.02.2024, 11:30 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

2021
Error 401

Забыл доступ открыть Тык


Сообщение отредактировал Baton4ik48 - Среда, 07.02.2024, 11:30
 
Ответить
Сообщение
Error 401

Забыл доступ открыть Тык

Автор - Baton4ik48
Дата добавления - 07.02.2024 в 11:30
Nic70y Дата: Среда, 07.02.2024, 11:41 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 8760
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
    ws1.Range("A13:E25000").AutoFilter Field:=2, Criteria1:="Московское ЛПУМГ"
    ws1.Range("A13:E25000").AutoFilter Field:=5, Criteria1:="Сужающее устройство"
[/vba]


ЮMoney 41001841029809
 
Ответить
Сообщение[vba]
Код
    ws1.Range("A13:E25000").AutoFilter Field:=2, Criteria1:="Московское ЛПУМГ"
    ws1.Range("A13:E25000").AutoFilter Field:=5, Criteria1:="Сужающее устройство"
[/vba]

Автор - Nic70y
Дата добавления - 07.02.2024 в 11:41
Baton4ik48 Дата: Среда, 07.02.2024, 12:04 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

2021
    ws1.Range("A13:E25000").AutoFilter Field:=2, Criteria1:="Московское ЛПУМГ"
    ws1.Range("A13:E25000").AutoFilter Field:=5, Criteria1:="Сужающее устройство"


Да работает! а что изменилось то в файле ? кроме кол-ва строк ?
было же от "B:E" , стало от A:E
 
Ответить
Сообщение
    ws1.Range("A13:E25000").AutoFilter Field:=2, Criteria1:="Московское ЛПУМГ"
    ws1.Range("A13:E25000").AutoFilter Field:=5, Criteria1:="Сужающее устройство"


Да работает! а что изменилось то в файле ? кроме кол-ва строк ?
было же от "B:E" , стало от A:E

Автор - Baton4ik48
Дата добавления - 07.02.2024 в 12:04
Nic70y Дата: Среда, 07.02.2024, 12:08 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 8760
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
а что изменилось
в файле нет фильтра.
стало от A:E
на всякий случай, есть фильтр или нет - будет работать (наверное)


ЮMoney 41001841029809
 
Ответить
Сообщение
а что изменилось
в файле нет фильтра.
стало от A:E
на всякий случай, есть фильтр или нет - будет работать (наверное)

Автор - Nic70y
Дата добавления - 07.02.2024 в 12:08
Baton4ik48 Дата: Среда, 07.02.2024, 12:27 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

2021
на всякий случай, есть фильтр или нет - будет работать (наверное)


А, я понял, вы жёстко задали гранницы от и до, спасибо огромное, буду дальше додедлывать макрос
 
Ответить
Сообщение
на всякий случай, есть фильтр или нет - будет работать (наверное)


А, я понял, вы жёстко задали гранницы от и до, спасибо огромное, буду дальше додедлывать макрос

Автор - Baton4ik48
Дата добавления - 07.02.2024 в 12:27
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Фильтрация по двум столбцам (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!