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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2010, 17:22   #11
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Вот:
Код:
Sub Spisokkk()
Dim i As Long, wb As Worksheet, sb As Worksheet
Application.ScreenUpdating = False
    Sheets("обороты").Activate
    endTable = Cells(1, Columns.Count).End(xlToLeft).Column 'теперь не зависим от длины таблицы
    'ThisWorkbook.Worksheets("список с оборотами").Range("B3:F65000").ClearContents
    Set wb = ThisWorkbook.Worksheets("обороты")
    Set sb = ThisWorkbook.Worksheets("список с оборотами")
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        If wb.Cells(i, endTable) <> 0 And wb.Cells(i, endTable - 1) <> 0 _
            And wb.Cells(i, endTable - 2) <> 0 And wb.Cells(i, endTable - 3) <> 0 _
            And wb.Cells(i, endTable - 4) <> 0 And wb.Cells(i, endTable - 5) <> 0 _
            Then
                'месячные изменения
                chM = wb.Cells(i, endTable) / wb.Cells(i, endTable - 1) - 1
                'квартальные изменения
                chQ = (wb.Cells(i, endTable) + wb.Cells(i, endTable - 1) + wb.Cells(i, endTable - 2)) / (wb.Cells(i, endTable - 3) + wb.Cells(i, endTable - 4) + wb.Cells(i, endTable - 5)) - 1
                
                sb.Activate
                Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2).Offset(1) = wb.Cells(i, 3)
                Cells(Cells(Rows.Count, 3).End(xlUp).Row, 3).Offset(1) = chM
                Cells(Cells(Rows.Count, 4).End(xlUp).Row, 4).Offset(1) = chQ
        End If
    Next i
End Sub
Maxx вне форума Ответить с цитированием
Старый 02.02.2010, 17:38   #12
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию

То, что надо! Спасибо большое! Я добавила еще сортировку, и теперь совсем красота)
robbe вне форума Ответить с цитированием
Старый 02.02.2010, 17:40   #13
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

замените
Код:
sb.Activate
Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2).Offset(1) = wb.Cells(i, 3)
Cells(Cells(Rows.Count, 3).End(xlUp).Row, 3).Offset(1) = chM
Cells(Cells(Rows.Count, 4).End(xlUp).Row, 4).Offset(1) = chQ
на
Код:
If chM > 0 Then
    sb.Activate
    Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2).Offset(1) = wb.Cells(i, 3)
    Cells(Cells(Rows.Count, 3).End(xlUp).Row, 3).Offset(1) = chM
    Cells(Cells(Rows.Count, 4).End(xlUp).Row, 4).Offset(1) = chQ
End If
и тогда будут выводится вообще только те, где оборот за месяц вырос.
Maxx вне форума Ответить с цитированием
Старый 02.02.2010, 18:06   #14
robbe
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 28
По умолчанию

Заменила. У меня возникла еще небольшая проблема. Делаю сортировку по этим двум значениям возрастанию (мес и квартал), но сортируется только по одному значению. Может, я где-то что-то не так написала в макросе. Посмотрите пжлста.
Код:
 With sb.Range("A2:D10000")
        .Sort _
          Key1:=.Range("C1:C10000"), Order1:=xlAscending, _
          Key2:=.Range("D1:D10000"), Order2:=xlAscending, _
          Header:=xlGuess, Orientation:=xlTopToBottom
     'Next
    End With
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