1

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

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

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

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

Макро сценарий использования снимка экрана

Макросы, которые я использовал, будут суммировать только заданный диапазон ячеек (например, будут суммироваться только те 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

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

2 ответа2

1

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

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).

Просто убедитесь, что ваши области чисел не касаются друг друга.

0

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

Просто поместите курсор под непрерывный набор чисел (регион, в языке Excel) и нажмите кнопку Автосумма. Excel придумает формулу для вас.

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

Вот учебник.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .