对于我的生活,我无法弄清楚如何在列和向下行上循环公式。我把一些代码放在一起,我认为它们会在正确的轨道上:
Sub LoopAcrossColsRows()
Dim C As Integer
Dim R As Integer
Dim LastCol As Integer
Dim LastRow As Long
Dim lr As Long
Worksheets("Sheet1").Activate
LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
LastRow = Cells(Rows.Count, 20).End(xlUp).Row
lr = Cells(Rows.Count, 1).End(xlUp).Row
For C = 2 To LastCol
For R = lr + 3 To LastRow
.Cells(R, C).FormulaR1C1 = “=SUMPRODUCT(--(R6C:R7C>=RC1), --(R6C:R7C<=(RC1+30))*R4C)"
Next R
Next C
End Sub
该公式导致预期的列表分隔符或)错误。当我将它插入我的工作表时,该公式有效,所以我不知道会出现什么问题。感谢您提前帮助。
顺便说一下,无论如何都要创建一个输入框,提示输入新的工作表名称,这将反映为Worksheets("Sheet1").Activate
行中的新工作表名称,这样我就不会这样做了。必须不断更改vba代码中的工作表名称?
再次感谢,
答案 0 :(得分:2)
尝试
Cells(R, C).FormulaR1C1 = "=SUMPRODUCT(--(R6C:R7C>=RC1), --(R6C:R7C<=(RC1+30))*R4C)"
并且优于循环将是将公式分配给多单元范围对象的例程。
未经测试:
range(cells(lr+3,2),cells(lastrow,lastcol)).FormulaR1C1 = "=SUMPRODUCT(--(R6C:R7C>=RC1), --(R6C:R7C<=(RC1+30))*R4C)"
答案 1 :(得分:0)
该行
.Cells(R, C)...
应该是合格的:
ActiveSheet.Cells(R,C)...
更好的是,您应该在变量中保留对相应工作表的引用,而不是依赖于它是For
循环长度的活动工作表:
Dim wks As Worksheet
Set wks=Worksheets("Sheet1")
...
For R = lr + 3 To LastRow
wks.Cells(R, C).FormulaR1C1 = “=SUMPRODUCT(--(R6C:R7C>=RC1), --(R6C:R7C<=(RC1+30))*R4C)"
Next R
...
您的旁边是一个完全独立的问题,并不属于此处,但请考虑使用Excel Application.Inputbox
函数或VBA Inputbox
函数。
答案 2 :(得分:0)
我相信您需要代码
Activesheet.Cells(R,C)...
如果您不想使用名称来调用工作表,请使用索引
worksheet(1).cells(x,y)...
然而,只有在您从未更改工作表的顺序时,这才有用。因为工作表(1)始终转到工作簿的第一个工作表。
您也可以将变量设置为工作表并使用
Dim ws1 As Worksheet
'or set it = Worksheet(1)
Set ws1 = Worksheets("sheet"1)
ws1.cells(1,1) = "test"
对于名称问题,您可以尝试这个
Dim yourName as String
yourName = Application.InputBox("Enter name of worksheet")
worksheet(1).Name = yourName
答案 3 :(得分:0)
EDITED: 好的,所以仔细看看你的代码。这里有几处变化。
我不确定代码是否会无缝运行,或者是否会完全循环您需要的范围。但是试一试,看看它是否有效。希望这个原则能指导您找到解决方案:
Sub LoopAcrossColsRows()
Dim varC As Integer
Dim varR As Integer
Dim LastCol As Integer
Dim LastRow As Long
Dim lr As Long
Worksheets("Sheet1").Activate
LastRow = Cells.Find("*", [a1], , , xlByRows, xlPrevious).Row
LastCol = Cells.Find("*", [a1], , , xlByColumns, xlPrevious).Column
For varC = 2 To LastCol
For varR = (LastRow + 3) To LastRow Step -1
Worksheets("Sheet1").Cells(varR, varC).FormulaR1C1 = "=SUMPRODUCT(--(R6C:R7C1>=RC1),--(R6C:R7C1<=(RC1+30))*R4C)"
Next varR
Next varC
End Sub