我有一个包含A列和B列信息的Excel文件。由于这些列的行数可能会有所不同,我想使用函数 offset ,以便我可以打印公式一次作为数组而不是循环遍历每个单元格的公式(数据集包含近100万个数据点)。
我的代码实际上是以我想要的方式工作我只是无法弄清楚如何在Range(D1:D5)中打印代码。结果现在打印在范围(D1:H1)中。有人知道如何在for语句中使用这个偏移量吗?
Sub checkOffset()
Dim example As Range
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ThisWorkbook.Worksheets("Sheet1")
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
Set example = Range("A1:A1")
For i = 1 To LastRow
example.Offset(0, i + 2).Formula = "=SUM(A" & i & ":B" & i & ")"
Next i
End Sub
答案 0 :(得分:3)
使用Offset(Row, Column)
,您希望使用行(i -1
)的增量和右侧的3列进行偏移(从列" A"到列&#34) ; d&#34)
尝试以下修改后的代码:
Set example = Range("A1")
For i = 1 To LastRow
example.Offset(i - 1, 3).Formula = "=SUM(A" & i & ":B" & i & ")"
Next i
答案 1 :(得分:3)
在一个步骤中输出公式而不循环到整个范围的一种方法是使用R1C1表示法:
编辑:修改代码以正确限定工作表参考资料
Option Explicit
Sub checkOffset()
Dim example As Range
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ThisWorkbook.Worksheets("Sheet1")
With sht
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
Set example = .Range(.Cells(1, 1), .Cells(LastRow, 1))
End With
example.Offset(columnoffset:=3).FormulaR1C1 = "=sum(rc[-3],rc[-2])"
End Sub
答案 2 :(得分:1)
您不需要为此使用VBA。只需在单元格D1中键入= sum(A1:B1),然后键入fill it down。
如果你还要使用VBA,请使用:
Sub checkOffset()
Dim example As Range
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ThisWorkbook.Worksheets("Sheet1")
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
Set example = Range("A1:A1")
For i = 1 To LastRow
example.Offset(i - 1, 3).Formula = "=SUM(A" & i & ":B" & i & ")"
Next i
End Sub
offset
的工作方式是行偏移,列偏移。您希望列始终固定在右侧的3位。