Внутреннее суммирование диапазонов.

Программирование на Visual Basic for Applications
sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Внутреннее суммирование диапазонов.

Сообщение sonata » 27.03.2003 (Чт) 17:49

Внутреннее суммирование диапазонов.

Есть отсортированные данные по опред. объекту.(столбец С)
Нужно добавить после сделать внутреннее суммирование, по объектам.
1. добавляю пустые строчки
2. Записываю слово в нее "ИТОГО"
х-кол-во непустых строк...
x = ActiveCell.Offset(10000, 0).End(xlUp).Row
For i = x To 11 Step -1
'ПРОВЕРКА РАВЕНСТВА ОБЪЕКТОВ
If Cells(i, 3) <> Cells(i - 1, 3) Then
Cells(i, 3).EntireRow.Insert
Cells(i, 2) = "ИТОГО:"
Cells(i, 2).Select
Selection.RowHeight = 17.25
Selection.Font.Bold = True
End If
If i < 11 Then Exit For
Next i
Вопрос №1.
Selection.RowHeight = 17.25 - срабатывает для всех строк, а
Selection.Font.Bold = True - только для опред. кол-ва нижних строк,
не могу понять почему, вообще для меня не очень привычен обратный цикл.
Я его не совсем понимаю...
Почему нельзя при добавлении строк организовать прямой цикл...

Вопрос №2.

Как в соседн. ячейку добавить суммирование.
Вернее как правильно поставить в цикле условие?

Раньше было условие выполнять до тех пор пока формат не станет обычным,
а сейчас так как в отчет копируются только значения (без форматов),
то условие цикла нарушено:

Do While ActiveCell.NumberFormat <> "General"
Cells.Find(What:="ИТОГО:", After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True). _
Offset(0, 1).Activate
ActiveCell.NumberFormat = "#,##0.00"
ActiveCell.HorizontalAlignment = xlCenter
ActiveCell.Font.Bold = True
ActiveCell.Formula = "=sum(B" & ActiveCell.Offset(-2, -1).Row & ":B" _
& ActiveCell.Offset(-2, -1).End(xlUp).Row & ")"
ActiveCell.Offset(0, -1).Activate
ActiveCell.Font.Bold = True
ActiveCell.HorizontalAlignment = xlCenter
If ActiveCell.NumberFormat = "General" Then ActiveCell.Offset(0, 1) = _
[b7].Formula
Loop

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 27.03.2003 (Чт) 18:51



Вопрос №1.
Selection.RowHeight = 17.25 - срабатывает для всех строк, а
Selection.Font.Bold = True - только для опред. кол-ва нижних строк,
не могу понять почему, вообще для меня не очень привычен обратный цикл.
Я его не совсем понимаю...
Почему нельзя при добавлении строк организовать прямой цикл...


В вашей программе условие If i < 11 Then Exit For излишне потому, что в вашем цикле for оно не выполнится никогда.

обратный цикл применен потому, что когда вставляют новую строку ИТОГО в позицию i , то на следующем цикле эта строка не будет сравниваться, так как ш примет значение i-1 и будут сравниваться строки i-1 и i-2.

Selection.Font.Bold = True - не понятно, почему у вас сбоит на определенных строках, не должен сбоить.

[/code][/quote]

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 27.03.2003 (Чт) 19:17

Ну если я правильно понял, то вот так
Код: Выделить всё
Sub hgjhgjhgjhgjh()
i = 11
j = 11
Do While Cells(i, 3).Value <> ""
If Cells(i, 3).Value <> Cells(i + 1, 3).Value Then
Cells(i + 1, 3).EntireRow.Insert
   i = i + 1
        With Cells(i, 2)
           .RowHeight = 17.25
           .Font.Bold = True
           .HorizontalAlignment = xlCenter
           .Value = "ИТОГО:"
        End With
       
        With Cells(i, 3)
           .Font.Bold = True
           .NumberFormat = "#,##0.00"
           .HorizontalAlignment = xlCenter
           .Formula = "=sum(B" & Cells(i - 1, 3).Row & ":B" & Cells(j, 3).Row & ")"
        End With
j = i + 1
End If

i = i + 1
Loop
End Sub

Если нет, то уточни вопрс, а то трудновато въехать че надо :wink:

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 28.03.2003 (Пт) 10:10

:D Просто СУПЕР!!!! Именно то, что было нужно, и главное, все заработало!!!!!!!!!
Огромное спасибо!!!!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 21

    TopList