Как я могу удалить # N / A из результатов макроса / также нескольких поисков, используя VBA? - PullRequest
0 голосов
/ 10 марта 2020

Я пытался собрать электронную таблицу, чтобы отследить несколько действий, используя некоторые макросы, полученные из разных мест, так как я не могу написать свой собственный

У меня 2 проблемы:

  1. Этот макрос выполняет поиск на одном листе и возвращает значение на другом

        Dim lngLastRow As Long
        Dim wsOutput   As Worksheet
        Dim wsSource   As Worksheet
    
        Application.ScreenUpdating = False
    
        Set wsOutput = Sheets("sheet 1") 'Sheet name for the following VBA to fill in
        Set wsSource = Sheets("sheet 2") 'Sheet name containing completed data for VLOOKUP
    
        lngLastRow = wsOutput.Range("A:G").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    
        With wsOutput
    
            With .Range("B2:B" & lngLastRow)
                .Formula = "=VLOOKUP(C2,'" & CStr(wsSource.Name) & "'!A:G,6,FALSE)"
                .Value = .Value 'Convert above formula to a value.  Comment out or remove if you want the formula to remain
         End With
        End With
    
        Set wsOutput = Nothing
        Set wsSource = Nothing
    
        Application.ScreenUpdating = True
    End Sub
    

    Поэтому я выполняю поиск по столбцу C на листе 1 в таблице на листе 2. Макрос выполняет поиск и возвращает значения в столбце B на листе 1. Макрос делает это для всех значений в столбце C на листе 1.

    Проблема: если значение не найдено, возвращается # N / A Как мне избавиться от этого, я не знаю, как использовать iferror в VBA

  2. Я использую тот же макрос, чтобы сделать то же самое, но для 2 других листов, и его вести себя по-разному. На этот раз я смотрю столбец А на листе 1, на листе 2.

    Проблема 1: Не работает! Он только ищет первое значение в столбце a и не go просматривает все значения в столбце a, так как я понятия не имею, что я делаю, я пытался изменить значение в «with. Часть «Range», это исправило проблему, но теперь похоже, что она пытается выполнить поиск на 300 ячеек, когда в столбце поиска есть только 17 ячеек со значениями

    Я понимаю, что, вероятно, делает Нет смысла, поэтому я прикрепил книгу

    https://easyupload.io/eehkw8

    Столбец C имеет значение with.range, заданное как C2: C, и проблема заключается в том, что он не выполняет поиск для всего столбца. Colomn D имеет значение with.range, установленное как D30: D, и проблема здесь состоит в том, что он выполняет поиск, даже если нет значения для поиска, он также добавляет # N / A

Изменить добавление второго макроса

Параметр Явный

Sub update_Co1newincidents ()

Dim lngLastRow As Long
Dim wsOutput   As Worksheet
Dim wsSource   As Worksheet

Application.ScreenUpdating = False

Set wsOutput = Sheets("New tickets") 'Sheet name for the following VBA to fill in
Set wsSource = Sheets("lookup") 'Sheet name containing completed data for VLOOKUP

lngLastRow = wsOutput.Range("C:W").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

With wsOutput
    'Formula for School Name
    With .Range("C2:C" & lngLastRow)
        .Formula = "=VLOOKUP(A2,'" & CStr(wsSource.Name) & "'!C:W,3,FALSE)"
        .Value = .Value 'Convert above formula to a value.  Comment out or remove if you want the formula to remain


 End With
End With

With wsOutput
    'Formula for School Name
    With .Range("D2:D30" & lngLastRow)
        .Formula = "=VLOOKUP(A2,'" & CStr(wsSource.Name) & "'!C:W,4,FALSE)"
        .Value = .Value 'Convert above formula to a value.  Comment out or remove if you want the formula to remain


 End With
End With


Set wsOutput = Nothing
Set wsSource = Nothing

Application.ScreenUpdating = True

Конец Sub

Это макет листа, который должен искать вывод

1 Ответ

0 голосов
/ 10 марта 2020
  1. Проверьте, чтобы результат был # N / A. Если это так, верните пустую строку, в противном случае верните значение поиска.

    .Formula = "=IF(ISNA(VLOOKUP(C2,'" & CStr(wsSource.Name) & "'!A:G,6,FALSE)), """", VLOOKUP(C2,'" & CStr(wsSource.Name) & "'!A:G,6,FALSE))"

  2. Возможно, полученная ссылка "lookup"! " неверно, хотя в имени листа "поиск" нет пробела. Попробуйте удалить одинарные кавычки. Это помогает?

    .Formula = "=VLOOKUP(A2," & CStr(wsSource.Name) & "!C:W,3,FALSE)"

    Для первой формулы у меня все еще нет решения. Но для второго:

    Вы говорите, что хотите использовать ячейки D30: D для следующей формулы. Так что вы должны использовать значение в A30, я думаю. Тогда я думаю, что следует изменить следующее:

    .Range("D2:D30" & lngLastRow) .Formula = "=VLOOKUP(A2,'" & CStr(wsSource.Name) & "'!C:W,4,FALSE)"

    на

    .Range("D30:D" & lngLastRow) .Formula = "=VLOOKUP(A30,'" & CStr(wsSource.Name) & "'!C:W,4,FALSE)"

...