如何在活动单元格公式中使用相对引用

时间:2019-06-19 16:36:31

标签: excel vba

我要插入一个新的表格行按钮。它需要将行添加到两个单独的表中。第二行中的公式需要引用另一张表中插入的行。

所以我尝试了以下操作来插入第二个表行:

Sub Macro2()
'
' Macro2 Macro
'

'
    Range("Table2").Select
    Selection.End(xlDown).Select
    Selection.ListObject.ListRows.Add AlwaysInsert:=True
    ActiveCell.Offset(1, 0).Select
    ActiveCell.FormulaR1C1 = _
        "=IF(AND('Sheet2'!R[-452]C[10]>=R1C4,'Sheet2'!R[-452]C[10]<=R1C5),'Sheet2'!R[-452]C[-1],"""")"
    Range("C481").Select
End Sub

因此,我的公式旨在向table2第480行添加一行,该公式具有引用在sheet2 table1中添加的新行的公式,该行将是第13行(当前)。

有没有办法做到这一点? 目前,我手动将以下公式复制并粘贴到单元格中:

=IF(AND('Sheet2'!$M13>=$D$1,'Sheet2'!$M13<=$E$1),'Sheet2'!B13,"")

1 个答案:

答案 0 :(得分:0)

我不确定表在表中的位置,并且由于在公式中您使用的是绝对地址,因此我能够猜出您要在公式中引用哪些列。例如,此代码将在Table1和Table2中创建新行之后,在Table2的第一列和最后一行中创建一个公式,引用Table1的第一列和最后一行。您可以根据需要调整公式。这里只有一个警告,那就是第一次运行代码时Excel将复制公式,因为空列中没有公式,如果删除其他行中的公式,则在运行时它不会再次执行该操作它第二次。

Sub CreateFormula()
    Dim indx1 As Integer 'index of the row added to table1
    Dim indx2 As Integer 'index of the row added to table2

    Dim loRow1 As ListRow 'table row that will be added in table1
    Dim loRow2 As ListRow 'table row that will be added in table2

    Dim tbl1 As ListObject
    Dim tbl22 As ListObject

    Dim cell1 As Range
    Dim cell2 As Range

    'define tables first
    Set tbl1 = ActiveSheet.ListObjects("Table1") 'Activesheet can be thisworkbook.worksheets("Sheet2")
    Set tbl2 = ActiveSheet.ListObjects("Table2")

    'Insert new rows
    Set loRow1 = tbl1.ListRows.Add
    Set loRow2 = tbl2.ListRows.Add

    'get the index of the newly added rows
    indx1 = loRow1.Index
    indx2 = loRow2.Index

    'indert the formula
    Set cell1 = tbl1.DataBodyRange(indx1, 1) 'we will reference this in the formula
    Set cell2 = tbl2.DataBodyRange(indx2, 1) 'we will put the formula in this cell

    cell2.Formula = "=if(" & cell1.Address & ">0," & "1,0)"


End Sub