我正在尝试创建一个宏,该宏能够识别有多少行在其上方有值并且仅对该范围求和。如果您查看所附图片,我需要能够单击单元格 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
这适用于列中的数字,C
将F
其更改为代码开头所需的任何其他范围(常数SourceRange
)。
只要确保数字区域互相不接触即可。
答案2
在我看来,你所问的不是一个宏,而是已经是 Excel 的一部分作为一个特征,称为自动求和。
只需将光标放在一组连续的数字(用 Excel 的话来说,是一个区域)下,然后按“自动求和”按钮即可。Excel 将为您计算出公式。
“自动求和”按钮位于功能区上的“主页”选项卡最右侧,有一个类似西格玛 ( ∑
) 的图标。
这里有一个教程。