Создание формулы Dynami c в Excel с использованием двух операторов FirstRow - PullRequest
0 голосов
/ 28 февраля 2020

Я использую строку кода, чтобы поместить формулу в ячейку в Excel. У меня есть формула, которая работает, но я хочу сделать ее динамической c, я использую функцию FirstRow для определения массива. Формула выглядит следующим образом:

Range("Q" & FirstRow).Offset(1).Formula = "=IF(P43<>P44,1,0)"

Я попытался поместить оператор FirstRow внутри формулы:

FirstRowOffset1 = Worksheets("WIP extract").Cells(Rows.Count, 1).End(xlUp).End(xlUp).Offset(1).Row
FirstRowOffset2 = Worksheets("WIP extract").Cells(Rows.Count, 1).End(xlUp).End(xlUp).Offset(2).Row

Range("Q" & FirstRow).Offset(1).Formula = "=IF(P" & FirstRowOffset1 & ") <> (P" & FirstRowOffset2 & "),1,0"

И я попытался использовать функцию Set для помещения в формулу :

FirstRowOffset1 = Worksheets("WIP extract").Cells(Rows.Count, 1).End(xlUp).End(xlUp).Offset(1).Row
FirstRowOffset2 = Worksheets("WIP extract").Cells(Rows.Count, 1).End(xlUp).End(xlUp).Offset(2).Row

Set fro1 = Worksheets("Compliance").Range("P" & FirstRowOffset1)
Set fro2 = Worksheets("Compliance").Range("P" & FirstRowOffset2)

Range("Q" & FirstRow).Offset(1).Formula = "=IF( & fro1 &  " <> " &  fro2 & ),1,0"

Но это только дает истинное ложное утверждение внутри ячейки, а не формула, которую я ищу. Как сделать формулу динамической c?

    LastRowInput = Worksheets("Input").Cells(Rows.Count, 1).End(xlUp).Offset().Row
    LastRowMatchC = Worksheets("Compliance").Cells(Rows.Count, 1).End(xlUp).Row
    LastRowSumC = Worksheets("Compliance").Cells(Rows.Count, 1).End(xlUp).Offset(0).Row 'Offset(-1,0)
    FirstRow = Worksheets("WIP extract").Cells(Rows.Count, 1).End(xlUp).End(xlUp).Row
    FirstRowFill = Worksheets("WIP extract").Cells(Rows.Count, 1).End(xlUp).End(xlUp).Offset(1).Row
    FirstRowOffset1 = Worksheets("WIP extract").Cells(Rows.Count, 1).End(xlUp).End(xlUp).Offset(1).Row
    FirstRowOffset2 = Worksheets("WIP extract").Cells(Rows.Count, 1).End(xlUp).End(xlUp).Offset(2).Row

    '~~> Autofill formules
    Range("P" & FirstRow) = "Check"
    Range("Q" & FirstRow) = "ID"

    Set frCP = Worksheets("Compliance").Range("P" & FirstRowFill & ":P" & LastRowMatchC)

    Range("P" & FirstRow).Offset(1).FormulaArray = "=IFERROR(INDEX(Input!$A$2:A$" & LastRowInput & ",MATCH(1,SEARCH(TRANSPOSE(Input!$A$2:A$" & LastRowInput & "),O43),0),0),""ZZ"")"
        Range("P" & FirstRow).Offset(1).Select
            Selection.AutoFill Destination:=frCP

    Set frCQ = Worksheets("Compliance").Range("Q" & FirstRowFill & ":Q" & LastRowMatchC)
    Range("Q" & FirstRow).Offset(1).Formula = "=IF(P" & FirstRowOffset1 & " <> (P" & FirstRowOffset2 & ",1,0)"

        Range("Q" & FirstRow).Offset(1).Select
            Selection.AutoFill Destination:=frCQ

1 Ответ

1 голос
/ 28 февраля 2020

Вы потеряли это )

Измените это:

Range("Q" & FirstRow).Offset(1).Formula = "=IF(P" & FirstRowOffset1 & ") <> (P" & FirstRowOffset2 & "),1,0"

на это:

Range("Q" & FirstRow).Offset(1).Formula = "=IF(P" & FirstRowOffset1 & " <> P" & FirstRowOffset2 & ",1,0)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...