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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2013, 09:06   #1
FoxRiver
Пользователь
 
Регистрация: 28.07.2008
Сообщений: 35
По умолчанию Помогите оптимизировать цикл

Здравствуйте, в примере есть таблица. Необходимо суммировать значения строк диапазона в зависимости от цвета ячейки и результат вписывать в определенные ячейки данной строки.

Прошу помощи в оптимизации цикла в следующем коде:
Код:
Sub sumcolor()

Application.Volatile True
Dim i As Range
   For Each i In ThisWorkbook.Worksheets("Лист1").Range("B2:H2")
        If i.Interior.ColorIndex = 43 And i.Value <> "" And IsNumeric(i.Value) _
               Then Сумцвет = Сумцвет + i.Value
   Next
    ThisWorkbook.Worksheets("Лист1").Range("A2").Value = Сумцвет
    
   Сумцвет = 0
   
   For Each i In ThisWorkbook.Worksheets("Лист1").Range("B3:H3")
        If i.Interior.ColorIndex = 43 And i.Value <> "" And IsNumeric(i.Value) _
               Then Сумцвет = Сумцвет + i.Value
   Next
    ThisWorkbook.Worksheets("Лист1").Range("A3").Value = Сумцвет
    
    
    Сумцвет = 0
   
   For Each i In ThisWorkbook.Worksheets("Лист1").Range("B4:H4")
        If i.Interior.ColorIndex = 43 And i.Value <> "" And IsNumeric(i.Value) _
               Then Сумцвет = Сумцвет + i.Value
   Next
    ThisWorkbook.Worksheets("Лист1").Range("A4").Value = Сумцвет
    
    
End Sub
Не хочется писать данный код на каждую строку (строк в реальном документе больше ста). Помогите сделать цикл который после проверки первой строки суммировал данные в ячейке потом спускался на вторую строку и т.д.
Вложения
Тип файла: rar Пример.rar (8.1 Кб, 9 просмотров)
FoxRiver вне форума Ответить с цитированием
Старый 23.10.2013, 09:20   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Sub sumcolor()

   ' Application.Volatile True 'зачем?
    Dim i As Range, x&
    With ThisWorkbook.Worksheets("Лист1")
        For x = 2 To 14
            For Each i In .Range("B" & x & ":H" & x)
                If i.Interior.ColorIndex = 43 Then
                    If i.Value <> "" Then
                        If IsNumeric(i.Value) _
                           Then Сумцвет = Сумцвет + i.Value
                    End If
                End If
            Next
            .Range("A" & x).Value = Сумцвет: Сумцвет = 0
        Next
    End With
End Sub
Т.к. строк немного - думаю особо оптимизировать по скорости нужды нет. Но конечно есть где подкрутить...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 23.10.2013 в 09:24.
Hugo121 вне форума Ответить с цитированием
Старый 23.10.2013, 09:24   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

А не проще было использовать UDF?
Вложения
Тип файла: zip Пример.zip (12.3 Кб, 10 просмотров)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 23.10.2013, 10:15   #4
FoxRiver
Пользователь
 
Регистрация: 28.07.2008
Сообщений: 35
По умолчанию

Hugo121 Огромное спасибо!

DiemonStar
Цитата:
Сообщение от DiemonStar Посмотреть сообщение
А не проще было использовать UDF?
К сожалению необходимо чтобы в ячейке где идет суммирование была возможность ручного ввода определенной цифры.
FoxRiver вне форума Ответить с цитированием
Старый 23.10.2013, 11:05   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

ну тогда делаете так:

Код:
Public Function SumColor(ByRef Rng As Range)
  If Not Rng Is Nothing Then
    For Each El In Rng.Cells
      SumColor = SumColor + IIf(El.Interior.ColorIndex = 43, El.Value, 0)
    Next El
  Else
    SumColor = ""
  End If
End Function

Sub FillSum()
  For Each Rw In [A2:H14].Rows
    Rw.Cells(1, 1) = SumColor(Intersect([B:H], Rw))
  Next Rw
End Sub
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как оптимизировать код? цикл доводит работу процессора до 100% stdio Общие вопросы C/C++ 14 21.02.2012 00:52
Очень большой цикл, как оптимизировать? Marsel737 Общие вопросы Delphi 3 06.09.2010 10:08
помогите оптимизировать! kievlyanin Microsoft Office Excel 11 28.04.2009 14:19
Помогите оптимизировать! Altera Общие вопросы Delphi 6 25.03.2008 20:09
Помогите оптимизировать сайт Nadejda HTML и CSS 4 07.01.2007 21:04