ВПР из другой электронной таблицы с использованием VBA

#excel #vba #excel-formula

#excel #vba #excel-формула

Вопрос:

У меня есть основная электронная таблица, которая анализирует записи из другой электронной таблицы, в которой количество строк достигает 1,4 миллиона.

Ниже приведены соответствующие фрагменты из кода:

     Sub Whyamidoingthis()

    Dim USISINLfp As String
    Dim ISINL As String
    Dim echeck As String
    Dim wUSISIN As Workbook
    Dim lastrow As Long
    Dim Result As Worksheet
    Dim i As Long

    Set OutShVar = ThisWorkbook.Worksheets("in1")
    ISINL = "CONSOLIDATED - Country_Of_Incorp_US_2019-03-01 (Consolidated).xlsx"

    USISINLfp = "W:Product PlatformsISIN- CUSIP Country of IncorporationMarch 2019"

    Workbooks.Open (USISINLfp amp; ISINL)
    Set wUSISIN = Workbooks(ISINL)

    With Result
        lastrow = .Cells(.Rows.Count, "H").End(xlUp).Row
    End With

     'US Security 1

    For i = 2 To lastrow
        With Result
            echeck = Trim(.Range("O" amp; i))
            If echeck = "" Then
                .Range("P" amp; i amp; ":Q" amp; i).Value = "N"
            Else
                .Range("P" amp; i).Value = "=ifna(vlookup(O" amp; i amp; "," amp; ISINL amp; "First Sheet'!$B:$C,2,false)," amp; Chr(34) amp; "N" amp; Chr(34) amp; ")"
                .Range("Q" amp; i).Value = "=ifna(vlookup(O" amp; i amp; "," amp; ISINL amp; "Second Sheet'!$B:$C,2,false)," amp; Chr(34) amp; "N" amp; Chr(34) amp; ")"
                'Debug.Print "=ifna(vlookup(O" amp; i amp; "," amp; ISINL amp; "Second Sheet'!$B:$C,2,0)," amp; Chr(34) amp; "N" amp; Chr(34) amp; ")"
            End If

      'US Security 2
            echeck = Trim(.Range("S" amp; i))
            If echeck = "" Then
                .Range("T" amp; i amp; ":U" amp; i).Value = "N"
            Else
                .Range("T" amp; i).Value = "=ifna(vlookup(S" amp; i amp; "," amp; ISINL amp; "First Sheet'!$A:$C,3,false)," amp; Chr(34) amp; "N" amp; Chr(34) amp; ")"
                .Range("U" amp; i).Value = "=ifna(vlookup(S" amp; i amp; "," amp; ISINL amp; "Second Sheet'!$A:$C,3,false)," amp; Chr(34) amp; "N" amp; Chr(34) amp; ")"
            End If

        End With
    Next I

    If Not wUSISIN Is Nothing Then wUSISIN.Close savechanges:=False

    End Sub
  

Код застревает на следующей строке:

 .Range("T" amp; i).Value = "=ifna(vlookup(S" amp; i amp; "," amp; ISINL amp; "First Sheet'!$A:$C,3,false)," amp; Chr(34) amp; "N" amp; Chr(34) amp; ")"
  

Всякий раз, когда найден результат и ошибка является ошибкой, определенной приложением.

Комментарии:

1. Вы пытаетесь установить значение или формулу ? Если последнее, используйте .Range("P" amp; i).Formula вместо .Range("P" amp; i).Value (не то чтобы это было проблемой здесь)

2. Формула, изменил ее. Хороший момент. Все еще выдает мне ошибку, хотя

Ответ №1:

Попробуйте эту формулу:

 "=ifna(vlookup(O" amp; i amp; ",'[" amp; ISINL amp; "]First Sheet'!$B:$C,2,false)," amp; Chr(34) amp; "N" amp; Chr(34) amp; ")"
  

Это заключает название книги в квадратные скобки, а сочетание «книга-рабочий лист» — в одинарные кавычки. Смотрите это руководство по использованию ВПР из другой книги.