Новости:

Подпишитесь на рассылку новых сообщений форума через службу рассылок: Subscribe.ru

Главное меню

Сумма по неопределённому даипазону

Автор Rayz8, 01.11.2011, 11:37

« назад - далее »

Rayz8

Здравствуйте, Уважаемые Знатоки!
Очень нужна Ваша помощь.
Емеется книга в которую вставляются данные о ценах разных Компаний.
Необходимо автоматически "собрать" и сложить цены из нескольких таблиц в одну, Итоговую таблицу.
Пытался "и так, и сяк" - нифига не получается :(
Чувствую, что надо как-то циклом делать, но не врубаюсь как...
Пытался вот такой конструкцией искать нужные данные через "Дату", но тоже не вышло:

Sub Сумма()
Dim x As Range
Set x = ActiveSheet.Columns(1).Find(what:="36892", lookat:=xlPart)
    x.Select
    MsgBox ("Нашел!") 
End Sub


Более понятно будет, если взглянуть на прикреплённый скриншот и сам файл.
Помогите пожалуйста.

Виктория Зуева

Посмотрите-почитайте про такую возможность Excel, как Консолидация. Самый ваш вариант! Ну, и макросом прописать реально.

Rayz8

Спасибо, Виктория!
Кажется это действительно то, что мне нужно!
Буду разбираться.
Благодарю Вас за "удочку" :)

Rayz8

Виктория, поискал-нашел-применил...

Sub Консолидация()
Selection.Consolidate Sources:=Array("Лист1!R2C1:R12C4", "Лист1!R15C1:R25C4"), Function:=xlSum
End Sub


...но только ума не приложу как этот код сделать "гибким", т.е., чтоб он сам диапазоны определял, не подскажите?
P.S. Хотя бы намекните. Уж очень нужно :(

nilem

Может лучше искать "Дата", и потом определять нужный диапазон. Типа такого:
Sub dfgdfg()
Dim r As Range, str As String, adr As String, cnt As Integer, wsh As Worksheet
Dim rSource As Range
str = "Дата"

For Each wsh In ThisWorkbook.Worksheets
    wsh.Activate    'это только для примера rSource.Select - MsgBox rSource.Address
    With wsh.Columns(1)
        Set r = .Find(What:=str)
        If Not r Is Nothing Then
            adr = r.Address
            Do
                Set rSource = Range(r, r.End(xlDown).End(xlToRight))
                rSource.Select
                MsgBox rSource.Address
                'тут что-то с чем-то складываем

                cnt = cnt + 1: Set r = .FindNext(r)
            Loop While r.Address <> adr
        End If
    End With
Next wsh

MsgBox cnt
End Sub

Rayz8

Спасибо большое, nilem!
Буду грызть дальше... :)