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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2014, 00:14   #61
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вот только что писал два точно таких макроса, но наоборот (два потому, что первый раз не успел сохранить ), третий не хочу
http://www.excelworld.ru/_fr/92/_new2.rar
Можно брать и переделывать.

P.S. Вообще есть в том коде одна помарка - массив b нужно в начале иметь пустой. Т.е. определить необходимый размер и создать массив под размер, который и заполнить.
Потому что иначе для тех, кого нет в выбранном месяце - останутся старые данные!

Или же "бюджетный вариант": если t нет в словаре - очищаем текущую строку массива b.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.02.2014 в 00:24.
Hugo121 вне форума Ответить с цитированием
Старый 28.02.2014, 00:40   #62
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Можно брать и переделывать.
Понял буду смотреть.

Цитата:
P.S. Вообще есть в том коде одна помарка - массив b нужно в начале иметь пустой. Т.е. определить необходимый размер и создать массив под размер, который и заполнить
.
Как это определить?
Одна машина может в день несколько раз выехать.

Цитата:
Или же "бюджетный вариант": если t нет в словаре - очищаем текущую строку массива b.
t - номер машины?
valerij вне форума Ответить с цитированием
Старый 28.02.2014, 00:47   #63
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

В том коде t - это номер клиента и месяц. У Вас как ключ можно хранить номер машины и месяц, если там в месяц по одной машине в базе.

А нет, там по несколько раз машины встречаются.
Тогда собираете сразу данные в словаре. И нужно делать иначе - отбирать в словарь данные только за конкретный выбранный месяц.
Для простоты - делайте 4 параллельных словаря, на каждый столбец по словарю.

Да, 1:1 тот код использовать не получится. Но половину можно использовать.

Алгоритм думаю такой - базу в массив, цикл по массиву, анализируем месяц, если нужный - суммируем в 4-х словарях данные, как ключ достаточно только номер машины.
Далее цикл по отчёту - по номеру машины берём из словарей данные.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.02.2014 в 00:55.
Hugo121 вне форума Ответить с цитированием
Старый 28.02.2014, 01:00   #64
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Тогда собираете сразу данные в словаре. .
А где этот словарь?
Цитата:
Для простоты - делайте 4 параллельных словаря, на каждый столбец по словарю.
Я правильно понял в самом начале месяца при вводе данных(макрос такой у меня есть) буду эти данные копировать в 4-е столбца данных на один месяц, т. е. на год 48 столбцов.

Так?
valerij вне форума Ответить с цитированием
Старый 28.02.2014, 01:29   #65
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

В том коде словарь скрывается в
Код:
With CreateObject("scripting.dictionary")
Раз нужно делать 4 словаря - значит нужно 4 переменных, а не один/одно with
Про 48 не понял - там ведь отчёт на 1 месяц!
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.02.2014, 01:34   #66
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Валера, можно конечно макрос подогнать под производственный процесс, а можно... производственный процесс подогнать под макрос

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

Цитата:
Да, 1:1 тот код использовать не получится. Но половину можно использовать.
вот тут требуется уточнить (для Валеры) какую половину использовать верхнюю или нижнюю?
или может макрос вертикальной ломаной разбить на правую и левую половины. но вопрос остается открытым: какую половину использовать? правую или левую?

а если в макросе нечетное количество символов? макрос с половиной символа не записать, не использовать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.02.2014, 01:42   #67
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Про 48 не понял - там ведь отчёт на 1 месяц!
Ваще она, программа, годовая.
Цитата:
Сообщение от IgorGO Посмотреть сообщение
Валера, можно конечно макрос подогнать под производственный процесс, а можно... производственный процесс подогнать под макрос
Я завтра уточню в налоговой, данные в листе Отчёт, нужны на текущий месяц или на год.
valerij вне форума Ответить с цитированием
Старый 28.02.2014, 01:53   #68
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Судя по тому, что выбор выбирает только один месяц - отчёт будет на месяц!
Но конечно можно отработать 12 раз, нагенерить 12 отчётов, никто не мешает. И код можно не менять
Когда он конечно будет написан...

Да, про половины - думаю лучше брать верхнюю... Хотя...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.02.2014 в 01:57.
Hugo121 вне форума Ответить с цитированием
Старый 28.02.2014, 02:13   #69
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Судя по тому, что выбор выбирает только один месяц - отчёт будет на месяц!
Почему один? 12 там

На один месяц у меня так и не важно сколько раз машина в день выезжает.
Этот код находится в UserForm1.
Код:
NumsAuto = ":ББ ЦЦЦЦ ББ:АН 0308 ЕТ:АН 2950 НР:АН 3824 ІН:АН 3962 ЕР:АН 5097 ЕМ:АН 7144 ЕО:АН 7145 ЕО:АН 7146 ЕО:АН 7440 ЕР"
  NumsAuto = NumsAuto & ":АН 7484 ЕР:АН 7880 СР:АН 8102 НТ:АН 8266 ЕО:АН 8267 ЕО:АН 8835 ЕР:АН 9357 ЕР:АН 9358 ЕР:АН 9359 ЕР"
    iRow = (InStr(NumsAuto, NumAuto) - 2) / 11 + 1

            With Sheets(6)
                .Cells(iRow, 2) = .Cells(iRow, 2) + Cells(ActiveCell.Row, "I"): _
                    .Cells(iRow, 3) = .Cells(iRow, 3) + Cells(ActiveCell.Row, "AA"): _
                    .Cells(iRow, 4) = .Cells(iRow, 4) + Cells(ActiveCell.Row, "AD"): _
                .Cells(iRow, 5) = .Cells(iRow, 5) + Cells(ActiveCell.Row, "AF")
            End With
                iRow = 0: ActiveWindow.ScrollColumn = 3: Cells(i + 1, "A").Activate
Ни что мне не мешает складывать данные не в готовую таблицу, а в др. место и потом по выбору месяца уже спокойно читать от туда.
№ машин вводятся через форму.

Последний раз редактировалось valerij; 28.02.2014 в 02:58.
valerij вне форума Ответить с цитированием
Старый 28.02.2014, 02:20   #70
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

"и потом по выбору месяца" - вот я и поймал
По выбору месяца, а не месяцев!
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите упростить простой макрос frantic150 Microsoft Office Excel 2 23.06.2009 04:55
проверьте плз код!можно ли его оптимизировать или упростить? -ushёl- Помощь студентам 10 23.04.2009 21:07
Вот! Тот макрос, который заставил обратится меня на этот форум! Дмитрий Фукс Microsoft Office Excel 6 10.04.2009 10:29
Запереть макрос можно? zander Microsoft Office Excel 1 15.02.2009 15:40