【发布时间】:2018-03-06 22:49:33
【问题描述】:
我录制了一个宏,确保选择了使用相对引用,但是在运行宏时,sum 函数总是选择将出现总数的单元格上方的 8 个单元格,即使我使用 Ctrl录制了它>+Shift+向上箭头选择正上方的所有非空白单元格:
ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)
我查看了与我想要实现的目标相似的以下内容,但我的目标是相反的,并且无法弄清楚如何修改我的代码,它将对向上移动的每个单元格求和,直到它命中一个空白单元格。
目标是能够在工作表中的不同点输入小计,在这些点对不同单元格数量的范围求和。
如果有助于查看上下文,这就是整个宏的样子:
Sub InsertTotal()
'
' InsertTotal Macro
' Insert blank rows, bold line and total amount
'
' Keyboard Shortcut: Ctrl+y
'
ActiveCell.Rows("1:2").EntireRow.Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(0, 7).Range("A1").Select
Selection.Font.Bold = True
ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)"
ActiveCell.Offset(-1, -7).Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
ActiveCell.Select
End Sub
任何 cmets 或建议都会有很大帮助
【问题讨论】:
-
我感觉部分原因是您使用了
.Select。尝试avoid using.Select/.Activate` 看看是否有帮助。 -
让我直说。这里的问题是:如何制作一个公式,总结上面的所有单元格,在第一个空白单元格处停止。对吗?
-
@BruceWayne 同意,但不要忘记他使用了宏记录器。我认为 Excel 教给人们的坏习惯比其他任何东西都多。老实说,我认为
.Select、.Activate、ActiveWorkbook等存在的唯一原因是让录制宏成为可能。
标签: vba excel excel-formula