Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сумма по условию в динамическом диапазоне. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Сумма по условию в динамическом диапазоне.
Amator Дата: Вторник, 15.01.2019, 15:04 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте. Помогите ,пожалуйста,создать код.Пример во вложении.Суть такова.В столбце "Т" ищем последнюю заполненную ячейку.В столбце "В" ищем первую заполненную ячейку.В этом диапазоне идем по столбцу "Н". Если в ячейках "Сумма" , тогда суммируем ячейки в диапазоне "А:А" - "Т:Т" и сумму вставлям под последней заполненной ячейкой (столбце "Т").Заранее благодарю за оказанную помощь.
К сообщению приложен файл: 0405703.xlsm (19.6 Kb)


Сообщение отредактировал Amator - Вторник, 15.01.2019, 15:31
 
Ответить
СообщениеЗдравствуйте. Помогите ,пожалуйста,создать код.Пример во вложении.Суть такова.В столбце "Т" ищем последнюю заполненную ячейку.В столбце "В" ищем первую заполненную ячейку.В этом диапазоне идем по столбцу "Н". Если в ячейках "Сумма" , тогда суммируем ячейки в диапазоне "А:А" - "Т:Т" и сумму вставлям под последней заполненной ячейкой (столбце "Т").Заранее благодарю за оказанную помощь.

Автор - Amator
Дата добавления - 15.01.2019 в 15:04
StoTisteg Дата: Вторник, 15.01.2019, 15:17 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
В столбце "В" ищем первую заполненную ячейку
Она у Вас там одна. А что будет, если больше одной?


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
В столбце "В" ищем первую заполненную ячейку
Она у Вас там одна. А что будет, если больше одной?

Автор - StoTisteg
Дата добавления - 15.01.2019 в 15:17
_Boroda_ Дата: Вторник, 15.01.2019, 15:20 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так нужно?
[vba]
Код
Sub tt()
    r0_ = Cells(Rows.Count, 2).End(3).Row
    r1_ = Cells(Rows.Count, 8).End(3).Row
    With Cells(r1_ + 1, 9).Resize(1, 12)
        .FormulaR1C1 = "=SUM(R4C:R9C)/2"
        .Value = .Value
    End With
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
[vba]
Код
Sub tt()
    r0_ = Cells(Rows.Count, 2).End(3).Row
    r1_ = Cells(Rows.Count, 8).End(3).Row
    With Cells(r1_ + 1, 9).Resize(1, 12)
        .FormulaR1C1 = "=SUM(R4C:R9C)/2"
        .Value = .Value
    End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 15.01.2019 в 15:20
vikttur Дата: Вторник, 15.01.2019, 15:39 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Я понял так: общая сумма по строке вставляется в столбец Т в строку ниже
[vba]
Код
Sub Summ_()
Dim dSum As Double
Dim lRwS  As Long, lRwF As Long
Dim i As Long, j As Long
    With Worksheets("Пример")
        lRwS = .Cells(.Rows.Count, 2).End(xlUp).Row
        lRwF = .Cells(.Rows.Count, 8).End(xlUp).Row
        Application.ScreenUpdating = False
        
        For i = lRwS To lRwF
            If .Cells(i, 8).Value = "Сумма" Then
                dSum = 0
                
                For j = 9 To 20
                     dSum = dSum + .Cells(i, j).Value
                Next j
                
                .Cells(i + 1, 20).Value = dSum
            End If
        Next i
    End With
    
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: 5945998.xlsm (21.1 Kb)


Сообщение отредактировал vikttur - Вторник, 15.01.2019, 15:39
 
Ответить
СообщениеЯ понял так: общая сумма по строке вставляется в столбец Т в строку ниже
[vba]
Код
Sub Summ_()
Dim dSum As Double
Dim lRwS  As Long, lRwF As Long
Dim i As Long, j As Long
    With Worksheets("Пример")
        lRwS = .Cells(.Rows.Count, 2).End(xlUp).Row
        lRwF = .Cells(.Rows.Count, 8).End(xlUp).Row
        Application.ScreenUpdating = False
        
        For i = lRwS To lRwF
            If .Cells(i, 8).Value = "Сумма" Then
                dSum = 0
                
                For j = 9 To 20
                     dSum = dSum + .Cells(i, j).Value
                Next j
                
                .Cells(i + 1, 20).Value = dSum
            End If
        Next i
    End With
    
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - vikttur
Дата добавления - 15.01.2019 в 15:39
Amator Дата: Вторник, 15.01.2019, 15:42 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Немного изменил файл.В данном файле одна запись , которая добавлена из формы.После добавления записи на лист нужно просуммировать строки если в диапазоне "Н:Н" - "Сумма". После суммирования будет введена следующая запись, которую также нужно суммировать и т.д.
 
Ответить
СообщениеНемного изменил файл.В данном файле одна запись , которая добавлена из формы.После добавления записи на лист нужно просуммировать строки если в диапазоне "Н:Н" - "Сумма". После суммирования будет введена следующая запись, которую также нужно суммировать и т.д.

Автор - Amator
Дата добавления - 15.01.2019 в 15:42
Amator Дата: Вторник, 15.01.2019, 15:49 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
vikttur, общая сумма по столбцам вставляется в строку ниже последней заполненной.
 
Ответить
Сообщениеvikttur, общая сумма по столбцам вставляется в строку ниже последней заполненной.

Автор - Amator
Дата добавления - 15.01.2019 в 15:49
_Boroda_ Дата: Вторник, 15.01.2019, 15:51 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Мой код не подходит? Вы проверяли? Проверьте
Можно еще добавить надпись "Итого"
[vba]
Код
Sub tt()
    r0_ = Cells(Rows.Count, 2).End(3).Row
    r1_ = Cells(Rows.Count, 8).End(3).Row
    With Cells(r1_ + 1, 9).Resize(1, 12)
        .FormulaR1C1 = "=SUM(R4C:R9C)/2"
        .Value = .Value
        .Range("A1").Offset(, -1) = "Итого:"
    End With
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМой код не подходит? Вы проверяли? Проверьте
Можно еще добавить надпись "Итого"
[vba]
Код
Sub tt()
    r0_ = Cells(Rows.Count, 2).End(3).Row
    r1_ = Cells(Rows.Count, 8).End(3).Row
    With Cells(r1_ + 1, 9).Resize(1, 12)
        .FormulaR1C1 = "=SUM(R4C:R9C)/2"
        .Value = .Value
        .Range("A1").Offset(, -1) = "Итого:"
    End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 15.01.2019 в 15:51
vikttur Дата: Вторник, 15.01.2019, 16:00 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Цитата
общая сумма по столбцам вставляется в строку ниже последней заполненной

Подправил:
[vba]
Код
Sub Summ_()
Dim aSum(1 To 12)
Dim lRwS  As Long, lRwF As Long
Dim i As Long, j As Long
    With Worksheets("Пример")
        lRwS = .Cells(.Rows.Count, 2).End(xlUp).Row
        lRwF = .Cells(.Rows.Count, 8).End(xlUp).Row
        Application.ScreenUpdating = False
        
        For i = lRwS To lRwF
            If .Cells(i, 8).Value = "Сумма" Then
                For j = 9 To 20
                    aSum(j - 8) = aSum(j - 8) + .Cells(i, j).Value
                Next j
            End If
        Next i
        
        .Cells(lRwF + 1, 9).Resize(1, 12).Value = aSum
    End With
    
    Application.ScreenUpdating = True
End Sub
[/vba]


Сообщение отредактировал vikttur - Вторник, 15.01.2019, 16:00
 
Ответить
Сообщение
Цитата
общая сумма по столбцам вставляется в строку ниже последней заполненной

Подправил:
[vba]
Код
Sub Summ_()
Dim aSum(1 To 12)
Dim lRwS  As Long, lRwF As Long
Dim i As Long, j As Long
    With Worksheets("Пример")
        lRwS = .Cells(.Rows.Count, 2).End(xlUp).Row
        lRwF = .Cells(.Rows.Count, 8).End(xlUp).Row
        Application.ScreenUpdating = False
        
        For i = lRwS To lRwF
            If .Cells(i, 8).Value = "Сумма" Then
                For j = 9 To 20
                    aSum(j - 8) = aSum(j - 8) + .Cells(i, j).Value
                Next j
            End If
        Next i
        
        .Cells(lRwF + 1, 9).Resize(1, 12).Value = aSum
    End With
    
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - vikttur
Дата добавления - 15.01.2019 в 16:00
Amator Дата: Вторник, 15.01.2019, 16:08 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, В данном случае работает , но строк может быть гораздо больше . в том числе с ячейкой "Сумма" . Необходимо прикрутить условие "если Ячейка (i, 8) = "Сумма".Спасибо.
 
Ответить
Сообщение_Boroda_, В данном случае работает , но строк может быть гораздо больше . в том числе с ячейкой "Сумма" . Необходимо прикрутить условие "если Ячейка (i, 8) = "Сумма".Спасибо.

Автор - Amator
Дата добавления - 15.01.2019 в 16:08
_Boroda_ Дата: Вторник, 15.01.2019, 16:11 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
но строк может быть гораздо больше

И что? Попробуйте с большим количеством строк. Все равно получится правильно. Вы сначала попробуйте, а потом говорите


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
но строк может быть гораздо больше

И что? Попробуйте с большим количеством строк. Все равно получится правильно. Вы сначала попробуйте, а потом говорите

Автор - _Boroda_
Дата добавления - 15.01.2019 в 16:11
Amator Дата: Вторник, 15.01.2019, 16:42 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
vikttur, Спасибо. Ваш код работает.
 
Ответить
Сообщениеvikttur, Спасибо. Ваш код работает.

Автор - Amator
Дата добавления - 15.01.2019 в 16:42
vikttur Дата: Вторник, 15.01.2019, 16:50 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Отключение обновления экрана было нужно, когда шла работа с ячейками. Сейчас строки с Application.ScreenUpdating можно убрать - при одновременной разовой записи в нескольких ячеек эффекта не дает.
Или поставить их там, где они должны быть:
[vba]
Код
        ..............
         Application.ScreenUpdating = False
         .Cells(lRwF + 1, 9).Resize(1, 12).Value = aSum
          Application.ScreenUpdating = True
     End With
End Sub
[/vba]
 
Ответить
СообщениеОтключение обновления экрана было нужно, когда шла работа с ячейками. Сейчас строки с Application.ScreenUpdating можно убрать - при одновременной разовой записи в нескольких ячеек эффекта не дает.
Или поставить их там, где они должны быть:
[vba]
Код
        ..............
         Application.ScreenUpdating = False
         .Cells(lRwF + 1, 9).Resize(1, 12).Value = aSum
          Application.ScreenUpdating = True
     End With
End Sub
[/vba]

Автор - vikttur
Дата добавления - 15.01.2019 в 16:50
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!