Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [VBA] Работа с ячейками


Автор: AlexArs 13.3.2007, 13:36
Выбрать строку, где сумма ячеек, начиная с 8-го столбца максимальна. Покрасить ее в другой цвет и скопировать под диапазон, пропустив одну строку.

Автор: Genyaa 13.3.2007, 23:47
Код

Sub nnn()
'Выберет строку, где сумма ячеек, начиная с 8-го столбца максимальна.
'Покрасит ее в другой цвет и скопирует под диапазон, пропустив одну строку.
'предполагается, что первая строка листа - заголовки таблицы    
    Dim mx As Long
    Dim rw As Range, tb As Range, sb As Range
'определим область таблицы - текущий регион данных от первой ячейки листа
    Set tb = ActiveSheet.Cells(1, 1).CurrentRegion
'определим область суммирования по строкам в таблице
    Set sb = tb.Resize(tb.Rows.Count - 1, tb.Columns.Count - 7).Offset(1, 7)
'начальное значение индекса строки с максимальной суммой
    mx = 1
'цикл по строкам области суммирования по строкам
    For Each rw In sb.Rows
'если сумма очерендной строки больше суммы строки по индексу mx, то переопределить индекс
        If WorksheetFunction.Sum(sb.Rows(mx)) < WorksheetFunction.Sum(rw) Then mx = rw.Row - 1
'конец цикла по строкам
    Next rw
'вычислим реальный номер строки в таблице
    mx = mx + 1
'покрасить в красный
    tb.Rows(mx).Interior.Color = vbRed
'скопировать под диапазон таблицы через строку
    tb.Rows(mx).Copy Destination:=tb.Offset(tb.Rows.Count + 1, 0).Resize(1, tb.Columns.Count)
End Sub

Автор: AlexArs 14.3.2007, 01:03
Genyaa, Спасибо большое smile, а где поменять чтоб с первой строки считало?
Чето глючит:
http://imageshack.us

Автор: Genyaa 14.3.2007, 07:58
Если заголовков не должно быть, то так:
Код

Sub nnn()
'Выберет строку, где сумма ячеек, начиная с 8-го столбца максимальна.
'Покрасит ее в другой цвет и скопирует под диапазон, пропустив одну строку.
'предполагается, что заголовков таблицы нет
    Dim mx As Long
    Dim rw As Range, tb As Range, sb As Range
'определим область таблицы - текущий регион данных от первой ячейки листа
    Set tb = ActiveSheet.Cells(1, 1).CurrentRegion
'определим область суммирования по строкам в таблице
    Set sb = tb.Resize(tb.Rows.Count, tb.Columns.Count - 7).Offset(0, 7)
'начальное значение индекса строки с максимальной суммой
    mx = 1
'цикл по строкам области суммирования по строкам
    For Each rw In sb.Rows
'если сумма очерендной строки больше суммы строки по индексу mx, то переопределить индекс
        If WorksheetFunction.Sum(sb.Rows(mx)) < WorksheetFunction.Sum(rw) Then mx = rw.Row
'конец цикла по строкам
    Next rw
'покрасить в красный
    tb.Rows(mx).Interior.Color = vbRed
'скопировать под диапазон таблицы через строку
    tb.Rows(mx).Copy Destination:=tb.Offset(tb.Rows.Count + 1, 0).Resize(1, tb.Columns.Count)
End Sub

А в предыдущем варианте действительно была одна небольшая ошибка. Забыл, что исопльзовал один дополнительный столбец при отладке. Теперь исправил и тоже работает.

Автор: AlexArs 14.3.2007, 10:40
Все ОК smile, спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)