我尝试使用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
。
答案 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
答案 1 :(得分:-1)
好吧,可能不是最好的解决方案,但我想后者的ActiveCell.row是指Sheet2,如果我在Sheet2 Selection上。现在我必须在开始时存储一个临时行号以获得真正的ActiveCell.row,这是2-Jul
Dim tmpRow As Integer
tmpRow = ActiveCell.Row
然后我会稍后再打电话
ActiveCell.Formula = "='Sheet1'!C" & tmpRow + 3