Как использовать относительные ссылки в формуле активной ячейки - PullRequest
0 голосов
/ 19 июня 2019

Я вставляю новую кнопку строки таблицы. Нужно добавить строки в две отдельные таблицы. Формула во второй строке должна ссылаться на строку, вставленную в другую таблицу.

Итак, я попробовал следующее для вставки второй строки таблицы:

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

Таким образом, моя формула предназначена для добавления строки в строку 480 таблицы2, которая имеет формулу, ссылающуюся на новую строку, добавленную в лист таблицы2, которая будет строкой 13 (в настоящее время).

Есть ли способ сделать это? В настоящее время я вручную копирую и вставляю в ячейки следующую формулу:

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

1 Ответ

0 голосов
/ 19 июня 2019

Я не был уверен в положении ваших таблиц на листе, и, поскольку в формуле вы используете абсолютные адреса, я смог угадать, какие столбцы вы использовали для ссылки в формуле. Например, этот код создаст формулу в первом столбце и последней строке таблицы 2, ссылающуюся на первый столбец и последнюю строку таблицы 1, после создания новой строки в таблицах 1 и 2. Вы можете настроить формулу, как вы хотите. Здесь есть только одна оговорка: 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...