VBA Вложенный Iferror в функции If во время цикла - PullRequest
0 голосов
/ 15 декабря 2018

Я только начал использовать VBa и продолжаю получать сообщение об ожидаемо: конец оператора.Я не уверен, в чем проблема.Мне нужно VBA, чтобы зациклить оператор if с vlookup и iferror.Я не могу установить диапазон, потому что список будет динамическим.Чем больше я пытаюсь исправить код, тем более грязным он становится.Я искал в Интернете помощь.

Любая помощь будет полезна.

Формула работает на вкладке MasterData и извлекается из вкладки DataDrop.

Sub COAB()

    Dim i As Range
    Set i = Sheets("MasterData").Range("D2")
    Dim i2 As Range
    Dim i3 As Range
    Set i2 = Sheets("MasterData").Range("W2")
    Set i3 = Sheets("MasterData").Range("X2")
    Dim MasterData As Worksheet
    Dim DataDrop As Worksheet
    Set MasterData = ThisWorkbook.Sheets("MasterData")
    Set DataDrop = ThisWorkbook.Sheets("DataDrop")

    Do Until IsEmpty(i)
        i2 = "=IFERROR(IF(VLOOKUP(" & MasterData.Range("D2").Address(0, 0) & "," 
    & DataDrop.Range("A:C") & ",3,FALSE)" <> "NULL" & ", & ""Charged Off"" & "," 
    & "Active "),"& Active")"
        i3 = "=IFERROR(VLOOKUP(RC[-20],'DataDrop'!A:C,2,FALSE),0)"


    Set i = i.Offset(1)
    Set i2 = i2.Offset(1, 0)
    Set i3 = i3.Offset(1, 0)


   Loop

End Sub

Формула в одном столбце должна иметь вид = IFERROR (IF (VLOOKUP (D2, DataDrop! A: C, 3, FALSE) <> «NULL», «Charged Off», «Active»), «Active»)

А другой столбец должен быть = IFERROR (VLOOKUP (D2, DataDrop! A: C, 2, FALSE), 0)

1 Ответ

0 голосов
/ 15 декабря 2018

Нет необходимости в цикле, просто получите последнюю строку на основе столбца D и запишите формулы для всего рассматриваемого диапазона за один раз.Кроме того, кавычки в формулах должны быть удвоены.

Sub COAB()

    With ThisWorkbook.Sheets("MasterData")
        Dim lastRow As Long
        lastRow = .Cells(.Rows.Count, "D").End(xlUp).Row

        .Range(.Range("W2"), .Range("W" & lastRow)).Formula = _
            "=IFERROR(IF(VLOOKUP(D2,DataDrop!A:C,3,FALSE)<>""NULL"",""Charged Off"",""Active ""),"" Active"")"
        .Range(.Range("X2"), .Range("X" & lastRow)).Formula = _
            "=IFERROR(VLOOKUP(D2,DataDrop!A:C,2,FALSE),0)"
    End With

End Sub
...