Excel VBA偏移函数

时间:2017-08-09 17:41:57

标签: excel excel-vba offset vba

我有一个包含A列和B列信息的Excel文件。由于这些列的行数可能会有所不同,我想使用函数 offset ,以便我可以打印公式一次作为数组而不是循环遍历每个单元格的公式(数据集包含近100万个数据点)。

My data is as follow:

我的代码实际上是以我想要的方式工作我只是无法弄清楚如何在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

3 个答案:

答案 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)

  1. 您不需要为此使用VBA。只需在单元格D1中键入= sum(A1:B1),然后键入fill it down

  2. 如果你还要使用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
    
  3. offset的工作方式是行偏移,列偏移。您希望列始终固定在右侧的3位。