Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/40: Рейтинг темы: голосов - 40, средняя оценка - 4.53
 Аватар для AndreA SN
1021 / 125 / 2
Регистрация: 26.08.2011
Сообщений: 1,219
Записей в блоге: 2

Работа с массивами при фильтрации в Excel

08.03.2015, 01:49. Показов 7958. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть двумерный массив данных
Нужно отфильтровать данные в Excel согласно этому массиву
Как грамотно указать, что сортировка идет по первому или второму полю массива poles?

Создаем и наполняем массив poles (привожу механику создания и наполнения массива poles)
Visual Basic
1
2
3
4
5
6
7
8
9
10
        Dim poles(), k
        ReDim poles(1, 0)
        poles(0, 0) = CStr(prVar(1))
        poles(1, 0) = CStr(prVarID)
        
        For k = 0 To UBound(Исправленный_вариант, 2)
            ReDim Preserve poles(1, UBound(poles, 2) + 1)
            poles(0, UBound(poles, 1)) = CStr(Исправленный_вариант(2, k))
            poles(1, UBound(poles, 1)) = CStr(Исправленный_вариант(0, k))
        Next k
отключаем ранее примененные фильтры
Visual Basic
1
        Selection.AutoFilter ' ВЫКЛЮЧАЕМ ФИЛЬТРАЦИЮ
Задаем новые условия для фильтрации (не работает)
Visual Basic
1
2
        ActiveSheet.Range("$A$1:$w$" & CStr(N)).AutoFilter Field:=2, Criteria1:=Array(poles, 0), Operator:=xlFilterValues
        ActiveSheet.Range("$A$1:$w$" & CStr(N)).AutoFilter Field:=id_st, Criteria1:=Array(poles, 1), Operator:=xlFilterValues
как указать правильно что Excel должен фильтровать сначала по значениям первого столбца массива Poles, затем по значениям второго столбца массива Poles?
если бы poles был одномерным - проблем бы не возникло.

Добавлено через 11 минут
или лучше создавать запрос по полям и вставлять его вместо массива?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.03.2015, 01:49
Ответы с готовыми решениями:

Работа с массивами Excel
Здравствуйте. Прошу у вас помощи/совета в решении моей задачи. Имеется два массива из строк и столбцов, в каждой ячейке по одному...

Как в Excel при фильтрации по дате вывести только студентов, родившихся в марте или июне?
::)

Использование операторов ввода (InputBox) и вывода (MsgBox) при работе с массивами данных в Excel
Составить программу, формирующую одномерный массив из сумм квадратов элементов соответствующих строк мат¬рицы А размера 4x4. ...

7
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.03.2015, 14:33
Задача именно поставить фильтр, или отобрать нужные строки?
Я не люблю эти фильтры, я бы прошёлся циклом по строкам массива и отобрал нужные данные (в другой массив), или скрыл ненужные строки листа.
Как вариант для фильтра - поставить через массив метки на листе в свободном столбце, отфильтровать по нему.
Сравнение данных - сперва собираем в словарь критерии, затем сверяемся с словарём.

Вообще если был пример что погонять - можно бы погонять
Сколько вообще данных планируется обрабатывать? Если сотню - одно дело, если миллион - другое.
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
08.03.2015, 14:36
Цитата Сообщение от AndreA SN Посмотреть сообщение
Нужно отфильтровать данные в Excel согласно этому массиву
Как грамотно указать, что сортировка идет по первому или второму полю массива poles?
Так Вам отфильтровать надо или отсортировать?
Если Вы хотите фильтровать или сортировать массив методами листа Excel, надо формировать "вертикальный" массив и выгружать его на новый лист. Для фильтрации удобно использовать "расширенный фильтр", чтобы получить отфильтрованные значения в другом месте листа или на другом листе, можно поменять порядок полей. То есть можно забрать отфильтрованные значения в массив одной командой, а не проверяя строки на предмет видимости, как в случае автофильтра.
0
 Аватар для AndreA SN
1021 / 125 / 2
Регистрация: 26.08.2011
Сообщений: 1,219
Записей в блоге: 2
08.03.2015, 17:20  [ТС]
Ребята. Извиняюсь. Писал во втором часу ночи. Отфильтровать конечно.
Я временно сделал залипуху (строки с 12 по 24). Но хотелось бы проще.
В строках 27 и 28 идет фильтрация по одномерным массивам. А можно ли сослаться на первый либо второй столбец двумерного массива?
Тогда разделение на два одномерных массива будет не нужным.

Visual Basic
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
        Dim poles(), k
        ReDim poles(1, 0)
        poles(0, 0) = CStr(prVar(1))
        poles(1, 0) = CStr(prVarID)
        
        For k = 0 To UBound(Исправленный_вариант, 2)
            ReDim Preserve poles(1, UBound(poles, 2) + 1)
            poles(0, UBound(poles, 1)) = CStr(Исправленный_вариант(2, k))
            poles(1, UBound(poles, 1)) = CStr(Исправленный_вариант(0, k))
        Next k
        
        Dim q
 
        Dim pol1() As String
        ReDim pol1(UBound(poles, 2))
        For q = 0 To UBound(poles, 2)
            pol1(q) = poles(0, q)
        Next q
        
        Dim pol2() As String
        ReDim pol2(UBound(poles, 2))
        For q = 0 To UBound(poles, 2)
            pol2(q) = poles(1, q)
        Next q
        
        Selection.AutoFilter ' ВЫКЛЮЧАЕМ ФИЛЬТРАЦИЮ
        ActiveSheet.Range("$A$1:$w$" & CStr(N)).AutoFilter Field:=2, Criteria1:=Array(pol1), Operator:=xlFilterValues
        ActiveSheet.Range("$A$1:$w$" & CStr(N)).AutoFilter Field:=id_st, Criteria1:=Array(pol2), Operator:=xlFilterValues
Данных в массиве - десятки тысяч. Рабочий файл 50 Мб. Переслать - боль на сидячем месте....
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.03.2015, 18:20
Цитата Сообщение от AndreA SN Посмотреть сообщение
Переслать - боль на сидячем месте....
- зачем? Сделайте пример.
Отфильтровали - и что дальше? Смотреть на данные будете?
0
 Аватар для AndreA SN
1021 / 125 / 2
Регистрация: 26.08.2011
Сообщений: 1,219
Записей в блоге: 2
08.03.2015, 18:46  [ТС]
да там уже всё готово. мне важно не что будет после, а как задать условия фильтрации без лишних наворотов. Всего в проге больше 50 процедур, 8000 строк кода... выдрать кусок - ну просто головная боль.
сейчас занимаюсь рефакторингом уже готовой проги своего производства. После рефакторинга и разработки документации - буду переделывать ее в C#/ И тогда это будет коммерческий вариант

Добавлено через 4 минуты
вообще программка ищет несоответствия в логике разных частей единой базы данных. По умолчанию считается, что все данные сомнительны. И прога их проверяет. Алгоритм проверки - ноу хау, которое будет докладываться в составе докторской диссертации. Поэтому прошу отнестись с пониманием, почему вопросы частные. Чуть позже - у меня будут развязаны руки - тогда смогу показать больше.
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
08.03.2015, 20:43
Цитата Сообщение от AndreA SN Посмотреть сообщение
можно ли сослаться на первый либо второй столбец двумерного массива?
application.index(myArr,0,1), application.index(myArr,0,2)
Возвратит "вертикальный" массив (1 To число_эл_исх_массива, 1 To 1). Если нужен одномерный массив, используйте
application.transpose(application.index( myArr,0,1))
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.03.2015, 21:06
Но перебор массива в цикле и перекладывание нужных данных в другой массви отработает быстрее, чем этот application.index. Но если массив небольшой - тогда конечно разница малозначительна.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.03.2015, 21:06
Помогаю со студенческими работами здесь

Работа с массивами, при нажатии на btn пишет ошибку
1. В проекте предусмотреть ввод элементов массива с клавиатуры через компонент Memo. 2. Вывод полученных результатов на форму в...

Работа с одномерными массивами при адресации элементов обычным способом
Ввести в память машины одномерный целочисленный массив, размером не менее 30 элементов. Ввод осуществить с клавиатуры. Посчитать...

Макрос для фильтрации строк в Excel
Помогите написать макрос в Worde Который должен как в екселя фильровать строки (результат фильтрации нужно переносить в другой документ)....

Макрос для фильтрации строк в Excel.
Необходимо написать макрос в Worde Который должен как в екселя фильровать строки (результат фильтрации нужно переносить в другой...

Создать макрос фильтрации данных в excel
Есть 2 столбца: дисциплины и преподаватели (у каждого несколько дисциплин). Необходимо сделать макрос для распределения каждого...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru