需要 Excel 宏来对可变长度范围求和

需要 Excel 宏来对可变长度范围求和

我正在尝试创建一个宏,该宏能够识别有多少行在其上方有值并且仅对该范围求和。如果您查看所附图片,我需要能够单击单元格 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

这有可能吗?据我所知,这应该是可能的,但使用宏来实现这一点非常棘手。

答案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

这适用于列中的数字,CF其更改为代码开头所需的任何其他范围(常数SourceRange)。

只要确保数字区域互相不接触即可。

答案2

在我看来,你所问的不是一个宏,而是已经是 Excel 的一部分作为一个特征,称为自动求和

只需将光标放在一组连续的数字(用 Excel 的话来说,是一个区域)下,然后按“自动求和”按钮即可。Excel 将为您计算出公式。

“自动求和”按钮位​​于功能区上的“主页”选项卡最右侧,有一个类似西格玛 ( ) 的图标。

这里有一个教程

相关内容