vba宏 - 使用ForumulaR1C1从另一个工作表中获取数据

时间:2015-07-08 18:58:38

标签: excel vba excel-vba

我尝试使用vba通过从同一工作簿中的另一个工作表中获取数据来自动化一个简单的过程。我不能只是复制,因为数据是动态更新的,如果另一张纸有变化,它会受到影响。

ActiveCell.FormulaR1C1 = "='Sheet2'!R[7]C[4]"

这是我第一次做vba,我认为R [7] C [4]意味着根据数字的积极性和消极性,垂直或水平获取值的坐标。

Sheet 1中

2-Jul
-------
item1     item2     3
item1.1   item2.2   43
          total     46
3-Jul
-------
item1     item2     3
item1.1   item2.2   41
          total     44

Sheet 2中

1-Jul     
2-Jul     46 (works here)
3-Jul     44 (does not work here)

它将贯穿第2页上的日期并相应地显示第2列上的总数。这就是我所做的。

For Each cell In Range("A1:A3")
    If cell.Value = selDate Then
        Range("B" & cell.row).Select
        ActiveCell.FormulaR1C1 = "='Sheet1'!R[3]C[3]"
    End If
Next cell

我将我选中的单元格放在2-Jul上,它使单元格正确并取46但是对于我通过将所选单元格放在3-Jul上运行的第二个单元格,数据仅比46低一个单元格而不是实际获得44

2 个答案:

答案 0 :(得分:0)

因为我怀疑你使用偏移R1C1公式是因为在Sheet2上为每个日期从Sheet1中检索'Total'的适当公式所引起的一些问题,所以我将会出局。

Sub get_dated_total()
    Dim rw As Long, ws1 As Worksheet, sFormulaR1C1 As String

    sFormulaR1C1 = "=IFERROR(INDEX(INDEX(Sheet1!C3,MATCH(RC1,Sheet1!C1,0)):INDEX(Sheet1!C3,ROWS(C3)),MATCH(""total"",INDEX(Sheet1!C,MATCH(RC1,Sheet1!C1,0)):INDEX(Sheet1!C,ROWS(C)), 0)), """")"
    Set ws1 = Worksheets("Sheet1")

    With Worksheets("Sheet2")
        For rw = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
            If IsDate(.Cells(rw, 1)) Then
                If CBool(Application.CountIf(ws1.Columns(1), .Cells(rw, 1).Value)) Then
                    .Cells(rw, 2).FormulaR1C1 = sFormulaR1C1
                End If
            End If
        Next rw
    End With

    Set ws1 = Nothing

End Sub

R1C1 for floating total

答案 1 :(得分:-1)

好吧,可能不是最好的解决方案,但我想后者的ActiveCell.row是指Sheet2,如果我在Sheet2 Selection上。现在我必须在开始时存储一个临时行号以获得真正的ActiveCell.row,这是2-Jul

Dim tmpRow As Integer
tmpRow = ActiveCell.Row

然后我会稍后再打电话

ActiveCell.Formula = "='Sheet1'!C" & tmpRow + 3