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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.02.2009, 19:52   #11
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Какие у Вас в файле ужасные формулы:
Цитата:
=ЕСЛИ(A86>0;СЦЕПИТЬ(C86;E86;G86;I86 ;ЕСЛИ(K86>9;ЕСЛИ(K86>99;K86;СЦЕПИТЬ ("0";K86));СЦЕПИТЬ("00";K86));L86;Е СЛИ(N86>9;ЕСЛИ(N86>99;N86;СЦЕПИТЬ(" 0";N86));СЦЕПИТЬ("00";N86));O86;ЕСЛ И(Q86>9;Q86;СЦЕПИТЬ("0";Q86));ЕСЛИ( R86=0;"00";ЕСЛИ(R86>9;R86;СЦЕПИТЬ(" 0";R86)));ЕСЛИ(S86=0;"0000";ЕСЛИ(ОК РУГЛ(S86;2)<=9,99;СЦЕПИТЬ("0";ФИКСИ РОВАННЫЙ(S86;2)*100);ФИКСИРОВАННЫЙ( S86;2)*100));ЕСЛИ(T86=0;"000";ЕСЛИ( ОКРУГЛ(T86;2)<1;СЦЕПИТЬ("0";ФИКСИРО ВАННЫЙ(T86;2)*100);ФИКСИРОВАННЫЙ(T8 6;2)*100));ЕСЛИ(U86=0;"000";ОКРУГЛ( U86;2)*100);ЕСЛИ(V86=0;"000";ОКРУГЛ (V86;2)*100);ЕСЛИ(W86=0;"000";ЕСЛИ( ОКРУГЛ(W86;2)<1;СЦЕПИТЬ("0";ФИКСИРО ВАННЫЙ(W86;2)*100);ФИКСИРОВАННЫЙ(W8 6;2)*100)));"<-укажите название поставщика ")
Мне до такого ещё очень далеко...

Цитата:
По средствам автофильтра это можно сделать, но как быть с построением итоговой строки (с расчетом средневзвешенной цены по группе)?
Так и надо это делать автофильтром.
А вот на основании отфильтрованных значений - формировать отчёт.
Так будет намного проще - достаточно будет макросом скопировать отфильтрованные значения на новый лист.

Цитата:
Наличие представленного интерфейса - большое дело.
Форму-то состряпать не проблема.
Можно попробовать сделать так, что форма просто назначает нужные параметры для автофильтра.
Впрочем, и перебрать все значения не сложно.
Вот только какие строки обрабатывать? (до 96 строки, или после 120-й)

Если те, что после 120-й, участвуют в поиске, то для тестирования кода необходим файл с данными, а не с формулами.
Для этого надо выделить все ячейки листа в тот момент, когда в ячейках присутствуют значения, скопировать их, после чего при помощи Специальной вставки вставить только значения.

Зачем было запихивать значения для выпадающих списков внутрь таблицы????
Не проще ли было вынести их на отдельный лист?
Источник данных для выпадающего списка может находиться и на другом листе - для этого можно использовать именованные диапазоны.

Подумаем, что можно сделать. Но сначала надо определиться с выпадающими списками - внутри таблицы им не место...

PS: А гиперссылки на Википедию - это круто

Последний раз редактировалось EducatedFool; 26.02.2009 в 20:00.
EducatedFool вне форума
Старый 27.02.2009, 14:21   #12
mex32
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 17
Восклицание

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Так и надо это делать автофильтром.
А вот на основании отфильтрованных значений - формировать отчёт.
Так будет намного проще - достаточно будет макросом скопировать отфильтрованные значения на новый лист.
Я в данную книгу (книгу с программой) буду копировать записи из других первоисточников. Всего в БД будет 500-600 записей. А в перспективе и все 1000.

Я обдумал Ваши комментарии и хочу предложить вариант (в приложении). Он основан на тех Ваших словах, что можно данные перетащить на новый лист:

При запуске программы, сначала создать промежуточный временный лист, в который из БД скопировать как числа все необходимые заполненные поля (колонки C, E, G, I, L, O уже не нужны, как и списки - аппендиксы в строках с 2 по 84) и снять с ячеек условия проверки. Далее лист фильтруется по заданным ранее критериям (как? автофильтр же не поставишь?), полученный массив копируется на лист, промежуточный лист исчезает, на итоговом листе рассчитывается итоговая по данной группе строка.

Только вот я не знаю все это возможно или нет. Если да, то тогда можно, чтобы при повторном переключении на лист БД, диалоговое окно возникало заново, и можно было бы повторить процедуру заново, при этом не удаляя лист, сформированный при первой итерации (для сравнения анализируемых групп).

Вообще списки сделаны для пользователей. С именованными диапазонами не разобрался. Справка Microsoft (http://office.microsoft.com/ru-ru/ex...CL100570551049) не помогла (честно, они ни когда мне не помогали), что-то там не то.
Вложения
Тип файла: rar Классификатор_РД Урал_макрос.rar (143.4 Кб, 13 просмотров)

Последний раз редактировалось mex32; 27.02.2009 в 14:29.
mex32 вне форума
Старый 27.02.2009, 16:04   #13
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Попробуйте пока такой вариант:

1) Открываете файл (отображается лист БД)
2) Нажимаете на кнопку "Создать выборку" (при этом формируется новый лист)
3) На сформированной выборке выставляете параметры автофильтра
(к примеру, в ячейке J2 устанавливаете фильтр по значению "Трейдер")
4) Нажимаете на зелёную кнопочку ("Применить")
(происходит удаление лишних строк с листа выборки)

Назначение желтой и красной кнопки, надеюсь, сами поймёте.

Пока итоговая строка формируется пустой, и столбец с НДС не заполняется - с этим чуть позже.
Потом в неё пропишу формулы.

Но мне надо знать:
1) подойдёт ли вообще такой вариант (без формы)
2) какие столбцы в выборке будем удалять? (наверняка, есть лишние)
3) в какие столбцы ставить формулы суммы
4) нужны ли в итоговой строке форулы типа =СУММПРОИЗВ(N85:N96;$K85:$K96)/СУММ($K85:$K96)

PS: На листе Критерии есть красная кнопка для удаления всех сформированных выборок.
Вложения
Тип файла: rar Классификатор_РД Урал_макрос.rar (156.1 Кб, 18 просмотров)
EducatedFool вне форума
Старый 27.02.2009, 18:00   #14
mex32
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 17
Восклицание

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Но мне надо знать:
1) подойдёт ли вообще такой вариант (без формы)
2) какие столбцы в выборке будем удалять? (наверняка, есть лишние)
3) в какие столбцы ставить формулы суммы
4) нужны ли в итоговой строке форулы типа =СУММПРОИЗВ(N85:N96;$K85:$K96)/СУММ($K85:$K96)
Я в восторге, получается очень классно. Нет слов.
Спасибо Вам большое за Ваш труд.
Кнопка Очистить - идеальное решение, придает программе некую завершенность.

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)? Если нет, то оставляйте так.
Вложения
Тип файла: rar Классификатор_РД Урал_макрос.rar (147.3 Кб, 13 просмотров)
mex32 вне форума
Старый 27.02.2009, 18:18   #15
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
А можно след. формат: Выборка БД_МММ-ГГ ЧЧ:ММ (Выборка БД_фев-09 17:32)
Можно. Только без двоеточия во времени - символ двоеточия не может встречаться в имени листа.

Цитата:
Форму все-таки добавить было бы не лишне – сильно улучшит интерфейс, сделает его более дружественным
Добавить-то форму можно, но это раз в 10 увеличит сложность проекта.

Одно дело, когда я одной командой устанавливаю автофильтр: Range("D2:P2").AutoFilter,
(Excel сам подбирает значения для выпадающего списка автофильтра)
и совсем другое, если придётся перебирать все ячейки, и формировать список для каждого поля. (более 100 строк кода, плюс десятки строк кода обработчиков событий, проверки условий, и т.д.)
К тому же, в текстовое поле в форме пользователь может ввести всё что угодно (такого значения может не быть в столбце)

Автофильтр в данном случае - лучшее решение.
К тому же, для выборки по другим полям в моём варианте надо изменить лишь одну букву в коде (в строке Range("D2:P2").AutoFilter), а в случае с формой работы будет на порядок больше.

Для "дружественности" интерфейса можно добавлять (временно) над таблицей пару строк с подробной инструкцией для пользователя (туда, где рисуются цветные кнопки) - это намного проще реализовать.

Цитата:
После нажатия кнопки Создать выборку колонки B, C, E, G, I, L, O уже не нужны.
Над этим, и над формулами сейчас поработаю.
Не исчезайте надолго - возможно, будут вопросы.

Цитата:
Кнопка Очистить - идеальное решение, придает программе некую завершенность
Да таких кнопок можно хоть 100 штук навешать.
Главное, придумайте, что должно происходить при их нажатии
И на каком листе будут располагаться эти кнопки?

Можно над базой данных (на листе БД) добавить одну - две строки,
и туда поместить все кнопки меню

Последний раз редактировалось EducatedFool; 27.02.2009 в 18:42.
EducatedFool вне форума
Старый 27.02.2009, 18:39   #16
mex32
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 17
Восклицание

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Добавить-то форму можно, но это раз в 10 увеличит сложность проекта.
Да таких кнопок можно хоть 100 штук навешать.
Главное, придумайте, что должно происходить при их нажатии
И на каком листе будут располагаться эти кнопки?

Можно над базой данных (на листе БД) добавить одну - две строки,
и туда поместить все кнопки меню
Я очень заинтерисован и ни куда не ухожу. У меня нет ни скайпа, ни прочих программ. Из средств связи, только телефон и mail.

Может вместо формы создать Лист с кнопками и раскрывающимися списками критериев (по аналогии с формой) – лист управления. Возможно, тогда структура документа будет следующая: лист управления, лист БД, а остальные расчетные. Это проще чем создавать форму?

И просьба, после нажатия кнопки Создать выборку, можно удалить условия на проверку во все таблице, чтобы не было в ячейках этих списков.
mex32 вне форума
Старый 27.02.2009, 18:47   #17
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
можно удалить условия на проверку во все таблице, чтобы не было в ячейках этих списков
Не проблема. Одна строка кода - sh.UsedRange.Validation.Delete
А условное форматирование (во 2-м столбце, к примеру) оставляем?

Цитата:
Может вместо формы создать Лист с кнопками и раскрывающимися списками критериев (по аналогии с формой) – лист управления
А чем временно формируемая выборка (пока на ней присутствуют цветные кнопки) не подходит под "Лист управления" ?
Все функции на этом листе доступны...
Цитата:
Это проще чем создавать форму?
Возможно, и проще. Но ненамного
Сейчас реализую основную функциональность, а потом подумаем.

И ещё хотел спросить - на выборку в строку Итого обязательно добавлять формулы, или достаточно будет соответствующих значений
(макрос сам вычисляет значение, и записывает под столбцом)?

Цитата:
А можно след. формат: Выборка БД_МММ-ГГ ЧЧ:ММ (Выборка БД_фев-09 17:32)
Всё-таки добавил в формат имени секунды.
Проблема в том, что имена листов должны быть уникальными.
А если кто-то успеет создать 2 выборки за одну минуту, вылетит ошибка...
Теперь листы именуются примерно так: Выборка БД_фев-09 20-54-12

Последний раз редактировалось EducatedFool; 27.02.2009 в 18:55.
EducatedFool вне форума
Старый 27.02.2009, 18:52   #18
mex32
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 17
Восклицание

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
И ещё хотел спросить - на выборку в строку Итого обязательно добавлять формулы, или достаточно будет соответствующих значений
(макрос сам вычисляет значение, и записывает под столбцом)?
Формулы совершенно не обязательны, главное это правильные цифры.
mex32 вне форума
Старый 27.02.2009, 18:56   #19
mex32
Пользователь
 
Регистрация: 24.02.2009
Сообщений: 17
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А условное форматирование (во 2-м столбце, к примеру) оставляем?
Этот столбец мы договорилиь удалить (и еще несколько), как строки с 2 по 84
mex32 вне форума
Старый 27.02.2009, 19:51   #20
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Ещё не закончил с последним столбцом (где вычисляется цена)

Жду замечаний по предварительному варианту:
(в следующей версии исправлю ошибку, если в выборке одна строка)
Вложения
Тип файла: rar Классификатор_РД Урал_макрос.rar (82.9 Кб, 25 просмотров)

Последний раз редактировалось EducatedFool; 27.02.2009 в 19:57.
EducatedFool вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите создать макрос Светлана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