Похожие вопросы

Развертывание только выбранных строк в Excel с помощью макросов VBA
Как запустить макрос LibreOffice из командной строки без графического интерфейса?
Ошибка выполнения VBA 1004: метод "OpenText" объекта "книги" не удалось
Код VBA для фильтрации столбца с помощью поля ввода
Анимация PowerPoint или проблема VBA: одно имя, изображение появляется, исчезает, второе имя появляется в том же месте
Как выполнить надстройку Excel 2010?
Макрос Word для изменения цвета страницы
VBA для перемещения данных из одного столбца в другой
Как заполнить большой ряд (более 10 000 строк) в Microsoft Excel без перетаскивания или выбора ячеек?
Остановить макрос VBA при достижении пустой строки
Легко удалить макросы Excel 2003
Как управлять панелью навигации MS Access с помощью макроса или VBA?
Групповая политика для блокировки макросов office
Объединение строк в Excel
Найдите и замените одной точкой несколько рядов из двух точек, прикрепленных к концу слова

Нужен макрос в Excel сумма диапазона переменной длины

Я пытаюсь создать макрос, который способен распознавать, сколько строк имеют значения выше этого и только этого диапазона. Если вы посмотрите на прикрепленное изображение, мне нужно иметь возможность щелкнуть в ячейках B4, B10 и B21 и выполнить макрос и просуммировать только значения в этом диапазоне.

Итак, для ячейки B4 мне нужно, чтобы макрос знал, что он должен суммировать ячейки B1 до B3.

для ячейки B10 мне нужно, чтобы макрос автоматически знал, что ему нужно суммировать диапазон 4 ячеек (из B6 к B9).

для ячейки B21 мне нужен макрос, чтобы автоматически определить, что диапазон для суммирования теперь составляет 9 строк (от B12 до B20).

Macro use case screen shot

макросы я использовал либо только сумму заданного диапазона ячеек (например, только сумма на 5 клеток выше ячейки, в которой выполняется макрос (см. ниже код СНиП):

Sub Macro22()
'
' Macro22 Macro
' With Relative References turned on.
'
' Keyboard Shortcut: Ctrl+o
'
ActiveCell.FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)"
End Sub

моя вторая попытка заставит макрос суммировать все ячейки над ним.

Sub test()
ActiveCell.Value = "=SUM(" & Range(Cells(1, ActiveCell.Column), Cells(ActiveCell.Row - 1, ActiveCell.Column)).Address(False, False) & ")"
End Sub

это даже возможно? Из того, что я видел, это должно быть возможно, но очень сложно заставить макрос это сделать.

5
задан Raystafarian
источник

2 ответов

и если вы действительно хотите макрос, использовать это (взято в основном из здесь, С некоторыми улучшениями):

Option Explicit

Sub AutoSum()
    Const SourceRange = "C:F"
    Dim NumRange As Range, formulaCell As Range
    Dim SumAddr As String
    Dim c As Long

    For Each NumRange In Columns(SourceRange).SpecialCells(xlConstants, xlNumbers).Areas
        SumAddr = NumRange.Address(False, False)
        Set formulaCell = NumRange.Offset(NumRange.Count, 0).Resize(1, 1)
        formulaCell.Formula = "=SUM(" & SumAddr & ")"

        'change formatting to your liking:
        formulaCell.Font.Bold = True
        formulaCell.Font.Color = RGB(255, 0, 0)

        c = NumRange.Count
    Next NumRange

End Sub

это работает на цифры в Столбцах C до F, измените его на любой другой диапазон, который вы хотите в начале кода (константа SourceRange).

просто убедитесь, что ваши цифры не соприкасались друг с другом.

1
отвечен pgr 2015-02-13 18:13:58
источник

вместо макроса мне кажется, что вы спрашиваете уже часть Excel в качестве функции, называется AutoSum.

просто поместите курсор под непрерывный набор чисел (область, в Excel-speak) и нажмите кнопку AutoSum. Excel придумает для вас формулу.

кнопка AutoSum находится на ленте, на вкладке "Главная", далеко справа, и имеет значок, как Сигма ().

здесь a учебник.

0
отвечен pgr 2015-02-13 17:45:40
источник