powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сложности с автофильтром
9 сообщений из 9, страница 1 из 1
Сложности с автофильтром
    #37757064
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане, Здравствуйте!
1. "Начните изучение VBA на конкретной задаче" - Начал.
2. "Изучайте материалы форума" - Старался. Кое-что прояснил, использовал. Многие материалы : "Читал газету Жиньминь Жибао и не угадал ни одной буквы", т.к одного желания мало.
На форум не выходил дабы не попасть "под раздачу" от космонавтов форума, как бедолага Эндрю.
Однако в решении задачи уперся, а ответов на форуме не обнаружил:
Проблема : На первом листе отфильтровываются данные, в результате чего на втором листе показываются нужные. НО! на втором листе стоят собственные автофильтры при работе с которыми открывается весь лист с данными, что не входит в задуманное. Файл прилагаю. До оптимизации далеко (имею ввиду статью Shocker Pro). Вопрос : Куда двигаться, чтобы разрешить эту проблему?
...
Рейтинг: 0 / 0
Сложности с автофильтром
    #37765010
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас странно сформулирована задача...
Что является данными? Что должно отбираться? Вернее, так: "нарисуйте" безо всяких фильтров пример исходных данных и что (и на основании чего) долждно получиться.
И не беспокойтесь за славу ЦЭ и BZ - вряд ли пытающийся сам делать что-то "попадёт под раздачу"...
...
Рейтинг: 0 / 0
Сложности с автофильтром
    #37765081
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Искренне благодарен Вам за ответ, а то становилось уныло...
Относительно задачи. Попробую сформулировать.
Лист "Выбор":
- в столбце Банк приведены названия кредитных учреждений ( приведено 3, хотя на самом деле их внесено 200);
- в столбце Город указаны города, где эти банки присутствуют (в полном варианте заполнено порядка 1500 городов);
- в столбце Область, край отмечена принадлежность города к тому или иному субъекту РФ, чтобы можно было посмотреть. что творится в области и т.д.
Пользователь на листе Выбор отбирает нужное ( в качестве примера в файле был отфильтрован город Барнаул, где присутствует банк Авангард и Абсолют, но нет Автоваза)
Лист RUR (вклады в рублях. Для отладки приведен один, хотя при работающем алгоритме можно будет отразить любые продукты банков).
В результате фильтрации на листе Выбор на листе RUR должны остаться только вклады Авангарда и Абсолюта (коряво, но работает).
Но у каждого вклада банка имеются свои особенности (выплата в конце срока, ежемесячно, пополнение и т.д, которые отмечены знаками + / -), поэтому на странице RUR установлены свои автофильтры, которые должны предоставлять возможность пользователю выбирать и, следовательно, сравнивать ставки банков-конкурентов в этом городе.
Вот здесь и возник нюанс: при попытке отфильтровать, скажем, вклад с выплатой в конце срока "вылезают" вклады Автоваза, которого в этом городе нет!
Что делать? уводить отфильтрованные данные на др. лист? Пытаюсь найти ...
...
Рейтинг: 0 / 0
Сложности с автофильтром
    #37765136
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо , вы избрали несколько, э-э-э... неверный путь решения задачи...
Да и инструмент (Excel) - несколько не тот. Хотя и позволяет сделать нужное вам.

Отвлекитесь от уже сделанного вами кода - и представьте себе:
- что у вас есть: данные по предложениям-банковским вкладам, при этом конкретизация этих предложений привязывается к банку, местоположению филиала, виду вклада, шкале сумм...
- что вы хотите получить в конечном итоге: сравнить доходность(?) вкладов, отобранных по каким-то критериям
Так вот. Сначала нужно построить достаточно "нормальную" схему данных (исходных). В реляционной модели. То есть, как минимум, у вас будут (например) таблицы "Банки", "Местоположения", "Вклады-Параметры"; таблицы "Банки-Филиалы", "Банки-КонкретныеВклады", "КонкретныеВклады-КонкретныеПараметры", etc...
А уж затем - аналитику из "типа правильной" модели получить - как об асфальт ударить...

Замените в вышеприведённом абзаце слова "Таблицы" на "Листы", забудьте про фильтры, соответственно, не смешивайте в коде визуализацию результатов с выборкой-аналитикой - возможно, впереди забрезжит путь
...
Рейтинг: 0 / 0
Сложности с автофильтром
    #37765153
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Спасибо за участие, хотя пока не могу выбить из головы мысль, что путь решения неверен. Нужно время и, наверное шишки при реализации.
...
Рейтинг: 0 / 0
Сложности с автофильтром
    #37765222
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будет не лень - попробую показать на ваших данных...
...
Рейтинг: 0 / 0
Сложности с автофильтром
    #37765560
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, Вам не отвечают т.к. в Вашем коде очень много ошибок, что не строка то либо ошибка либо некорректность, и к тому же код оформлен неудобно для чтения.
Вот мои комментарии
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Sub Сброс()
' Сброс "Выбор" и обнуление всех данных
Application.ScreenUpdating = False
ActiveWorkbook.Worksheets("Выбор").Activate 'непонятно зачем это строка, ведь если нажали на кнопку "Сброс" которая на листе "Выбор" значит этот лист уже активный (лишняя строка)
Range("c15:c48").Name = "All" ' присваивание имени диапазону ячеек не обязательно делать в коде, можно один раз присвоить ручками на листе, есть смысл присваивать, если диапазон меняется  (то же лишняя строка)
Range("All") = "" ' для очистки есть ClearContents
ShowAllData 'работает только если на листе установлен фильтр, следовательно, нужно делать проверку
ActiveWorkbook.Worksheets("RUR").Activate 'для того что бы работать с неактивным листом ненужно делать его активным
Dim a As Byte ' объявления лучше делать в начале кода
For a = 1 To 8
Selection.AutoFilter field:=a ' работать с объектом Selection не нужно 
Next
Dim h As Integer
For hRUR = 6 To 56
ActiveWorkbook.Worksheets("RUR").Rows(hRUR).Hidden = True ' неправильно выбранный подход, достаточно ShowAllData
Next
 ActiveWorkbook.Worksheets("Выбор").Activate ' если не было б ActiveWorkbook.Worksheets("RUR").Activate, не понадобилась бы эта строка
 Application.ScreenUpdating = True
 End Sub



Осмелюсь предложить Вам свой код для макроса Сброс
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub myShowAllData()
    Dim xlShR As Worksheet
    If Worksheets("Выбор").AutoFilterMode Then  ' проверка установлен ли фильтр
        For f = 1 To Worksheets("Выбор").AutoFilter.Filters.Count 'пробег по всем столбцам фильтра
            If Worksheets("Выбор").AutoFilter.Filters(f).On Then Worksheets("Выбор").ShowAllData: Exit For
        Next
    End If
    Set xlShR = Worksheets("RUR") 'можно установить ссылку на лист и затем пользоваться ссылкой (очень удобно)
    If xlShR.AutoFilterMode Then  ' проверка установлен ли фильтр
        For f = 1 To xlShR.AutoFilter.Filters.Count
            If xlShR.AutoFilter.Filters(f).On Then xlShR.ShowAllData: Exit For
        Next
    End If
    Worksheets("Выбор").Range("c15:c48").ClearContents
End Sub



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Проба_4()
' Отмечает выбранные строки и активиз ячейку
    Range("C14").Select
        ActiveCell.FormulaR1C1 = "o" 'вместо двух строк можно написать одну Range("C14").FormulaR1C1 = "o"
    Range("C14:C48").Select
    Selection.FillDown
    Range("C14") = ""
   Range("C14").Select
End Sub


Код: vbnet
1.
2.
3.
4.
5.
Private Sub mПроба_4()
' Отмечает выбранные строки и активиз ячейку
    Range("C15:C48").SpecialCells(xlCellTypeVisible) = "o"
    Range("C14").Select
End Sub



Я понимаю, что код записывался макрорекодером, но все же попробуйте хотя бы после записи убрать лишнее.

Относительно последнего кода, здесь действительно подход не верный, вам действительно нужно копировать отобранные строки на отдельный лист, и давать возможность дальше работать с ними.
...
Рейтинг: 0 / 0
Сложности с автофильтром
    #37765699
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodor
Код: vbnet
1.
Dim a As Byte ' объявления лучше делать в начале кода



вот тут спорно - чем меньше время жизни переменной, тем лучше.
...
Рейтинг: 0 / 0
Сложности с автофильтром
    #37766439
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо - не то слово! Искренняя благодарность за подробный разнос моего " ".
Фраза "в Вашем коде очень много ошибок, что не строка то либо ошибка, либо некорректность" , кроме благодарности вызвала чувство вины перед "читателями" моего первого " " за трату Вашего времени. Каюсь, что после прочтения Д. Уокенбаха, В. Короля, решений на форуме и попытке что-нибудь сотворить, ловил себя на мысли, что в голове "Смешались в кучу кони, люди...".
"Код" (взято в кавычки не по ошибке) был оформлен в соответствие с умением автора. Культура оформления характеризует уровень знаний предмета. Буду работать!
Искренне благодарен за подробные комментарии к моему " "! Не сомневаюсь, что предложенный Вами код надежнее и лучше, но буду его разбирать по сло-гам, т.к не хочу попасть в категорию форума "я ничего не знаю, сделайте все за меня".
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сложности с автофильтром
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]