Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2011, 13:15   #1
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию фильтр массива

данный код вызывает ошибку 13 type mismatch

не могу понять, что я неправильно делаю?


Код:
Option Explicit
Option Base 1


Sub test()

Dim arrA(3, 3) As String
Dim arrB As Variant

arrA(1, 1) = "a"
arrA(1, 2) = "b"
arrA(1, 3) = "c"
arrA(2, 1) = "a"
arrA(2, 2) = "b"
arrA(2, 3) = "c"
arrA(3, 1) = "a"
arrA(3, 2) = "b"
arrA(3, 3) = "c"


arrB = Filter(arrA, "b")


End Sub
-Anton- вне форума Ответить с цитированием
Старый 02.07.2011, 13:28   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

ищем слово Filter в доке по ВБА, читаем:
...
sourcearray Required. One-dimensional array of strings to be searched.
...

так работает:
Код:
Sub test()
  Dim arrA(3) As String
  Dim arrB As Variant
  arrA(1) = "a"
  arrA(2) = "b"
  arrA(3) = "c"
  arrB = Filter(arrA, "b")
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.07.2011, 13:35   #3
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
ищем слово Filter в доке по ВБА, читаем:
...
sourcearray Required. One-dimensional array of strings to be searched.
...

так работает:

End Sub[/CODE]
Точно. не обратил внимания.

А не подскажете, есть ли какой-нибудь встроенный фильтр двумерного массива?
-Anton- вне форума Ответить с цитированием
Старый 02.07.2011, 13:36   #4
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию

или только перебором?
-Anton- вне форума Ответить с цитированием
Старый 02.07.2011, 13:44   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Готовая функция фильтра для двумерного массива:
http://excelvba.ru/code/ArrAutofilter

Код:
Sub ПримерИспользования()
    arrB = ArrAutofilterEx(arrA, "1=b")
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 02.07.2011, 14:18   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

для вашего примера (привязано к размерам вашего массива)
добавил лист
положил на него массив
отфильтровал
забрал результаты в новый массив
удалил лист

Код:
Sub test()

  Dim arrA(3, 3) As String
  Dim arrB As Variant
  
  arrA(1, 1) = "a":  arrA(1, 2) = "b":  arrA(1, 3) = "c"
  arrA(2, 1) = "b":  arrA(2, 2) = "a":  arrA(2, 3) = "c"
  arrA(3, 1) = "c":  arrA(3, 2) = "b":  arrA(3, 3) = "a"
  
  Sheets.Add after:=Sheets(Sheets.Count)
  [a1] = 1: [b1] = 2: [c1] = 3 `шапка
  [a1:c1].Copy Destination:=[e1]: [f2] = "b" `фильтр
  [A2:C4] = arrA `данные
  [A1:C4].AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=[E1:G2], CopyToRange:=[I1], Unique:=False
  arrB = Range("i2:k" & Cells(Rows.Count, 9).End(xlUp).Row)
  da = Application.DisplayAlerts: Application.DisplayAlerts = False
  Sheets(Sheets.Count).Delete
  Application.DisplayAlerts = da
End Sub
получилось не 5 строк а 9 потому что дополнительно
сделал шапку над данными
сформировал диапазон критериев для расширенного фильтра
убрал панику системы по поводу удаления листа
вернул настройку на место
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 02.07.2011 в 14:25.
IgorGO вне форума Ответить с цитированием
Старый 24.03.2018, 11:24   #7
Kot_Begemot
Новичок
Джуниор
 
Регистрация: 24.03.2018
Сообщений: 2
По умолчанию Фильтрация массива по ComboBox

Добрый день.

Прошу помочь разобраться с обработкой 2-мерного массива с помощью нескольких ComboBox.
Задача следующая.
По выбору значения из одного ComboBox в остальных ComboBox должны остаться только те значения, которые соответствуют совпадениям из массива по первому ComboBox.
Причем без повторений, без пробелов и в порядке возрастания (числа) или алфавитном (строки).
И желательно посадить это все в событие ComboBox1_Change(), чтоб сразу - без лишнего нажатия кнопки.
Соответственно, при выборе критерия во втором ComboBox с остальными происходило тоже самое.

Подскажите шаблончик. Спасибо.
Вложения
Тип файла: xlsx Пример.xlsx (9.4 Кб, 8 просмотров)
Kot_Begemot вне форума Ответить с цитированием
Старый 25.03.2018, 02:14   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в примере нет ни "одного ComboBox" ни "остальных ComboBox".
не затруднит-ли Вас более детально описать задачу?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 25.03.2018, 14:27   #9
Kot_Begemot
Новичок
Джуниор
 
Регистрация: 24.03.2018
Сообщений: 2
По умолчанию

Добрый день, Игорь.
Спасибо, что откликнулись. Последний ответ в теме был 7 лет назад.
Когда пытаюсь сюда вставить файл с макросом, мне выдает ошибку "Некорректный файл".
Поэтому вложил только таблицу для примера и включил "Фильтр".
Суть вопроса та же. Комбобоксами нужно продублировать работу фильтра в Excel.
При фильтрации таблицы по одному из полей, фильтры других полей преобразуются: остаются критерии только оставшихся строк, причем без повторов и в порядке возрастания.
Вот как сделать тоже самое, но комбобоксами, и не из таблицы, а из массива?
Вложения
Тип файла: xlsx Пример.xlsx (10.4 Кб, 10 просмотров)
Kot_Begemot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтр Magicmax Microsoft Office Excel 11 22.06.2010 12:20
Фильтр leno4ka_09 Microsoft Office Excel 2 13.05.2010 14:39
Фильтр Машенька Microsoft Office Access 1 16.12.2009 20:27
Фильтр Инночка Помощь студентам 4 30.04.2008 20:27