![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
![]() |
#11 | |||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Какие у Вас в файле ужасные формулы:
![]() Цитата:
Цитата:
А вот на основании отфильтрованных значений - формировать отчёт. Так будет намного проще - достаточно будет макросом скопировать отфильтрованные значения на новый лист. Цитата:
Можно попробовать сделать так, что форма просто назначает нужные параметры для автофильтра. Впрочем, и перебрать все значения не сложно. Вот только какие строки обрабатывать? (до 96 строки, или после 120-й) Если те, что после 120-й, участвуют в поиске, то для тестирования кода необходим файл с данными, а не с формулами. Для этого надо выделить все ячейки листа в тот момент, когда в ячейках присутствуют значения, скопировать их, после чего при помощи Специальной вставки вставить только значения. Зачем было запихивать значения для выпадающих списков внутрь таблицы???? Не проще ли было вынести их на отдельный лист? Источник данных для выпадающего списка может находиться и на другом листе - для этого можно использовать именованные диапазоны. Подумаем, что можно сделать. Но сначала надо определиться с выпадающими списками - внутри таблицы им не место... PS: А гиперссылки на Википедию - это круто ![]()
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 26.02.2009 в 20:00. |
|||
![]() |
![]() |
#12 | |
Пользователь
Регистрация: 24.02.2009
Сообщений: 17
|
![]() Цитата:
Я обдумал Ваши комментарии и хочу предложить вариант (в приложении). Он основан на тех Ваших словах, что можно данные перетащить на новый лист: При запуске программы, сначала создать промежуточный временный лист, в который из БД скопировать как числа все необходимые заполненные поля (колонки C, E, G, I, L, O уже не нужны, как и списки - аппендиксы в строках с 2 по 84) и снять с ячеек условия проверки. Далее лист фильтруется по заданным ранее критериям (как? автофильтр же не поставишь?), полученный массив копируется на лист, промежуточный лист исчезает, на итоговом листе рассчитывается итоговая по данной группе строка. Только вот я не знаю все это возможно или нет. Если да, то тогда можно, чтобы при повторном переключении на лист БД, диалоговое окно возникало заново, и можно было бы повторить процедуру заново, при этом не удаляя лист, сформированный при первой итерации (для сравнения анализируемых групп). Вообще списки сделаны для пользователей. С именованными диапазонами не разобрался. Справка Microsoft (http://office.microsoft.com/ru-ru/ex...CL100570551049) не помогла (честно, они ни когда мне не помогали), что-то там не то. Последний раз редактировалось mex32; 27.02.2009 в 14:29. |
|
![]() |
![]() |
#13 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Попробуйте пока такой вариант:
1) Открываете файл (отображается лист БД) 2) Нажимаете на кнопку "Создать выборку" (при этом формируется новый лист) 3) На сформированной выборке выставляете параметры автофильтра (к примеру, в ячейке J2 устанавливаете фильтр по значению "Трейдер") 4) Нажимаете на зелёную кнопочку ("Применить") (происходит удаление лишних строк с листа выборки) Назначение желтой и красной кнопки, надеюсь, сами поймёте. Пока итоговая строка формируется пустой, и столбец с НДС не заполняется - с этим чуть позже. Потом в неё пропишу формулы. Но мне надо знать: 1) подойдёт ли вообще такой вариант (без формы) 2) какие столбцы в выборке будем удалять? (наверняка, есть лишние) 3) в какие столбцы ставить формулы суммы 4) нужны ли в итоговой строке форулы типа =СУММПРОИЗВ(N85:N96;$K85:$K96)/СУММ($K85:$K96) PS: На листе Критерии есть красная кнопка для удаления всех сформированных выборок. |
![]() |
![]() |
#14 | |
Пользователь
Регистрация: 24.02.2009
Сообщений: 17
|
![]() Цитата:
Спасибо Вам большое за Ваш труд. Кнопка Очистить - идеальное решение, придает программе некую завершенность. 1. Форму все-таки добавить было бы не лишне – сильно улучшит интерфейс, сделает его более дружественным. Дело в том, что конечные пользователи – люди вообще без знания Excel, им надо попроще, заполнил табличку – получи результат. 2. После нажатия кнопки Создать выборку колонки B, C, E, G, I, L, O уже не нужны. 3. Формулы суммы в колонках Q, R (объемные показатели). 4. Это формула средневзвешенной цены, рассчитывается через объем. В ситуации когда поставщик возит 100 кг по 10 руб., а другой 200 по 9 руб., средняя получится 9.5, что не правильно. Верная цена (100*10+200*9)/300=9.33. Формула типа =СУММПРОИЗВ(N85:N96;$K85:$K96)/СУММ($K85:$K96) по сути тоже самое. Формулы средневзвешенной через объем нужны в итоговых полях колонок S, T, U, V, W. Дополнительная колонка расчета цены с доставкой заканчивается, по аналогии с вышеперечисленными, формулой средневзвешенной. В данной колонке в формуле расчета цены используется константа – значение 3.4. P.S. Можно, что бы закладки сформированных листов имели нумерацию отличную от существующей. Сначала я подумал, что над их именем работает генератор случайных чисел. Потом понял что это текущее время. Классная задумка. А можно след. формат: Выборка БД_МММ-ГГ ЧЧ:ММ (Выборка БД_фев-09 17:32)? Если нет, то оставляйте так. |
|
![]() |
![]() |
#15 | ||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Цитата:
Одно дело, когда я одной командой устанавливаю автофильтр: Range("D2:P2").AutoFilter, (Excel сам подбирает значения для выпадающего списка автофильтра) и совсем другое, если придётся перебирать все ячейки, и формировать список для каждого поля. (более 100 строк кода, плюс десятки строк кода обработчиков событий, проверки условий, и т.д.) К тому же, в текстовое поле в форме пользователь может ввести всё что угодно (такого значения может не быть в столбце) Автофильтр в данном случае - лучшее решение. К тому же, для выборки по другим полям в моём варианте надо изменить лишь одну букву в коде (в строке Range("D2:P2").AutoFilter), а в случае с формой работы будет на порядок больше. Для "дружественности" интерфейса можно добавлять (временно) над таблицей пару строк с подробной инструкцией для пользователя (туда, где рисуются цветные кнопки) - это намного проще реализовать. Цитата:
Не исчезайте надолго - возможно, будут вопросы. Цитата:
Главное, придумайте, что должно происходить при их нажатии ![]() И на каком листе будут располагаться эти кнопки? Можно над базой данных (на листе БД) добавить одну - две строки, и туда поместить все кнопки меню
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 27.02.2009 в 18:42. |
||||
![]() |
![]() |
#16 | |
Пользователь
Регистрация: 24.02.2009
Сообщений: 17
|
![]() Цитата:
Может вместо формы создать Лист с кнопками и раскрывающимися списками критериев (по аналогии с формой) – лист управления. Возможно, тогда структура документа будет следующая: лист управления, лист БД, а остальные расчетные. Это проще чем создавать форму? И просьба, после нажатия кнопки Создать выборку, можно удалить условия на проверку во все таблице, чтобы не было в ячейках этих списков. |
|
![]() |
![]() |
#17 | ||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
А условное форматирование (во 2-м столбце, к примеру) оставляем? Цитата:
Все функции на этом листе доступны... Цитата:
![]() Сейчас реализую основную функциональность, а потом подумаем. И ещё хотел спросить - на выборку в строку Итого обязательно добавлять формулы, или достаточно будет соответствующих значений (макрос сам вычисляет значение, и записывает под столбцом)? Цитата:
Проблема в том, что имена листов должны быть уникальными. А если кто-то успеет создать 2 выборки за одну минуту, вылетит ошибка... Теперь листы именуются примерно так: Выборка БД_фев-09 20-54-12
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 27.02.2009 в 18:55. |
||||
![]() |
![]() |
#18 |
Пользователь
Регистрация: 24.02.2009
Сообщений: 17
|
![]() |
![]() |
![]() |
#19 |
Пользователь
Регистрация: 24.02.2009
Сообщений: 17
|
![]() |
![]() |
![]() |
#20 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Ещё не закончил с последним столбцом (где вычисляется цена)
Жду замечаний по предварительному варианту: (в следующей версии исправлю ошибку, если в выборке одна строка)
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 27.02.2009 в 19:57. |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите создать макрос | Светлана632 | Microsoft Office Excel | 9 | 10.02.2009 06:18 |
Необходимо создать файл, содержащий информацию о багаже пасажиров | Андрю)(@ | Помощь студентам | 3 | 27.11.2008 10:08 |
Необходимо создать файл, содержащий информацию о багаже пасажиров | Андрю)(@ | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 26.11.2008 23:58 |
Имеется список,элементами которого являются вещественные числа.Создать консольное приложение,описывающее | Smart | Помощь студентам | 1 | 06.05.2008 08:09 |
Извлечь в одну ячейку несколько значений из строки которые удовлетворяют заданному условию. | Dorvir | Microsoft Office Excel | 5 | 08.04.2008 16:12 |