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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2010, 11:52   #1
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию Проверка на условие (математическое) и составление списка

Здравствуйте.
Помогите пжлста с макросом.
Есть книга с двумя листами: на одном список с id и соответствующими суммами (по месяцам), а на другой нужно, чтобы выводился список тех id, по которым суммы снизились за месяц и за квартал, т.е. например янв10/дек09<1 и (июл09+авг09+сен09)/(окт09+нояб09+дек09)<1. И соответствующее значение в %.
Я плохо знаю Vba, и в том что я написала постоянно вылезает ошибка overflow. И еще не знаю как правильно написать цикл по пустым ячейкам.
Спасибо.
(Если кто-то захочет помочь, просьба выкладывать макрос в doc или txt. ))
robbe вне форума Ответить с цитированием
Старый 02.02.2010, 11:54   #2
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию

забыла приложить сам файл.
Вложения
Тип файла: rar осн.rar (13.1 Кб, 9 просмотров)
robbe вне форума Ответить с цитированием
Старый 02.02.2010, 14:07   #3
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Вот сделал снижение за месяц. Посмотрите. Макрос byMonth().

А по кварталам не понятно: надо за календарный квартал, или за фактические последние три месяца?
Вложения
Тип файла: rar осн1.rar (21.8 Кб, 10 просмотров)
Maxx вне форума Ответить с цитированием
Старый 02.02.2010, 14:12   #4
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию

Maxx, спасибо.
А вы не могли бы прикрепить ваш макрос в явном виде, не в архиве, или в блокноте или документе word. Архив я не могу посмотреть
robbe вне форума Ответить с цитированием
Старый 02.02.2010, 14:30   #5
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Код:
Sub byMonth()
Application.ScreenUpdating = False
    Dim i As Long, j As Long, a(), b()

    Sheets("Суммы").Select
    endTable = Cells(1, Columns.Count).End(xlToLeft).Column - 1
    a = Range([A2], Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1).Offset(0, endTable)).Value
    
    ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))

    For i = 1 To UBound(a, 1)
        
        For j = 2 To UBound(a, 2) - 1
            
            If a(i, j) = "" And a(i, j + 1) = "" Then delMonth = ""
            If a(i, j) = "" And a(i, j + 1) <> 0 Then delMonth = "1-ая цена"
            If a(i, j) <> 0 And a(i, j + 1) = "" Then delMonth = "нет цены"
            If a(i, j) <> 0 And a(i, j + 1) <> 0 Then delMonth = ((a(i, j + 1) / a(i, j)) - 1)
            
            b(i, 1) = a(i, 1)
            b(i, j) = delMonth
        
        Next j
        
    Next i

    Sheets("Список с упавшими суммами").Select
    
    Range([B3], Cells(UBound(b, 1) + 2, 2).Offset(0, endTable)).Value = b
Application.ScreenUpdating = True
End Sub
Только сделайте на Листе "Список с упавшими суммами" формат ячеек с С3 и далее "Процентный" или поменяйте
в коде
Код:
If a(i, j) <> 0 And a(i, j + 1) <> 0 Then delMonth = ((a(i, j + 1) / a(i, j)) - 1)
на
Код:
If a(i, j) <> 0 And a(i, j + 1) <> 0 Then delMonth = Round(((a(i, j + 1) / a(i, j)) - 1)*100, 2)

Последний раз редактировалось Maxx; 02.02.2010 в 14:38.
Maxx вне форума Ответить с цитированием
Старый 02.02.2010, 15:24   #6
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию

Maxx, спасибо.
Но в итоге получается не совсем то, что надо. На листе Список с упавшими ценами должно быть всего 3 колонки: id, изменение сумм за месяц (то что и считали, т.е. например, янв10/дек09 в %) и изменение сумм за квартал. Наверно я не очень понятно написала первый раз.
И еще, можно как-нибудь сделать так, чтобы на лист Список с упавшими ценами попападали только те id, для которых выполняется условие: янв10/дек09 < 1?

В любом случае, спасибо вам за помощь.
robbe вне форума Ответить с цитированием
Старый 02.02.2010, 16:31   #7
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию

Уважаемые программисты!
Помогите пжлста оптимизировать мой код.
Я сделала, чтобы на лист "Список с оборотами" копоровались номера клиентов и считалось изменение по месяцу о кварталу (колонки B, C, D). Но я не знаю, как сделать так, чтобы не было пустых клеток, т.е. на лист "Список с оборотами" значения копировались подряд друг за другом. Наверно, это не очень сложно, для знающих людей. Прошу помочь.
Спасибо.
robbe вне форума Ответить с цитированием
Старый 02.02.2010, 16:32   #8
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию

опять забыла прилоть файл...
Вложения
Тип файла: rar макрос.rar (580.2 Кб, 9 просмотров)
robbe вне форума Ответить с цитированием
Старый 02.02.2010, 16:36   #9
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Это все не сложно, НО:

1.
Цитата:
На листе Список с упавшими ценами должно быть всего 3 колонки: id, изменение сумм за месяц (то что и считали, т.е. например, янв10/дек09 в %) и изменение сумм за квартал
За какой месяц? За последный?
За какой квартал? Тоже за последный?

2.
Цитата:
И еще, можно как-нибудь сделать так, чтобы на лист Список с упавшими ценами попападали только те id, для которых выполняется условие: янв10/дек09 < 1?
Можно!

3.
Цитата:
Я сделала, чтобы на лист "Список с оборотами"...
Что за Лист такой. Может это Лист "Список с упавшими ценами"?
Maxx вне форума Ответить с цитированием
Старый 02.02.2010, 16:46   #10
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию

1. Да, за последний, т.е. если ММ-текущий месяц, а ММ-1 предыдущий в этом году, можно записать как ММ/(ММ-1)
То же самое для квартала: отношение последнего квартала к предпоследнему за год
3. Это один и тот же лист. Просто пока писала макрос, переименовывала. Извиняюсь.
robbe вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверка списка с помощю empty jon888 PHP 5 09.11.2009 13:24
Составление "списка" из строки spamer Общие вопросы Delphi 8 25.08.2009 12:23
Как увеличить длинну выпадающего списка: ДАННЫЕ-ПРОВЕРКА-СПИСОК kay Microsoft Office Excel 3 10.02.2009 12:59
Математическое задание! werser Помощь студентам 4 17.02.2008 17:02
Математическое задание werser Помощь студентам 1 12.02.2008 20:57