Excel VBA:如何递增For Each循环的范围?
解决VBA每隔7行插入SUM公式的问题
你确实不应该用For Each循环,因为它会遍历范围内的每一个单元格,完全不符合你“每隔7行插入公式”的需求。另外rcell = rcell +7的错误核心在于:Range对象不能直接和整数做运算,要定位下一个目标单元格,得用行号控制或者Offset方法。
修正后的代码
Option Explicit Sub Insert_Formula_Sum() Dim LastRow As Long, i As Long, c As Long Dim targetRow As Long Dim LI As Worksheet Set LI = Sheets("Lumber Inventory") ' 获取A列数据的最后一行 LastRow = LI.Range("A" & LI.Rows.Count).End(xlUp).Row ' 初始化SUM区间的起始、结束行 i = 3 c = 3 ' 从第8行开始,每隔7行插入公式,直到超出数据范围 For targetRow = 8 To LastRow Step 7 ' 给D列目标行设置SUM公式 LI.Cells(targetRow, "D").Formula = "=SUM(D" & i & ":D" & c & ")" ' 递增SUM的区间范围 i = i + 7 c = c + 7 Next targetRow End Sub
关键修正点
- 替换
For Each为带步长的For循环:For targetRow = 8 To LastRow Step 7里的Step 7是核心,它让循环每次跳7行,精准匹配“每隔7行插入”的需求。 - 修复范围引用错误:原代码
Range("D8:D" And LastRow)是语法错误,改用LI.Cells(targetRow, "D")直接定位目标单元格,同时始终指定工作表LI,避免因活动工作表变化导致的错误。 - 移除错误的
rcell = rcell +7:改用行号变量targetRow控制位置,逻辑更清晰,彻底解决类型不匹配问题。
额外优化提示
如果你的需求是SUM连续7行的区间(比如第一次SUM(D3:D9),第二次SUM(D10:D16)),只需把初始的c = 3改成c = 9,后续c = c +7就能自动生成对应的7行区间公式。
内容的提问来源于stack exchange,提问作者Zrhoden
相关产品推荐
相关产品推荐

