Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
ВПР макросом возвращает неправильный результат
 
Всем привет!

Мне нужно подвприть макросом значения к столбцу, делаю я это следующим методом:
Код
Cells(7, Cnt) = WorksheetFunction.VLookup(WorksheetFunction.Substitute(Range("A7") & Range("B7") & Range("C7"), " ", ""), Sheets("Pivot").Range("A:B"), 2)


По непонятной причине вместо ошибки #Н/Д он возвращает неправильно число,по отсутствующим значениям, я не могу понять почему?

Спасибо!
 
xlankasterx, у Вас, наверное, и файл с данными есть?
 
Да тянуться данные из Final3 в Data_rub.

Данные за 2019-11-30 должны добавляться макросом, для этого в ячейки будет циклом вставляться формула(она руками сейчас добавлена для проверки работы макроса).
Так вот первой значение он считает некорректно а второе корректно.
Изменено: xlankasterx - 19 Ноя 2019 19:18:28
 
Если внимательно почитать про аргументы ВПР() - можно догадаться почему.
 
Предположу что речь идет об опущенном последнем аргументе, если да то его добавление вызывает runTimeError 1004.
И насколько я знаю этот аргумент можно опустить ибо он по умолчанию 0.
Изменено: xlankasterx - 20 Ноя 2019 10:39:50
 
опустиь можно, а по умолчанию там 1
вы или не читали про агргументы ВПР или читали не внимательно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
xlankasterx написал:
Так вот первой значение он считает некорректно а второе корректно.
Долго я пытался понять, что сие значит.  :D
Код
Sub мяу()
    Dim lr&, Cnt&
    Worksheets("Pivot").PivotTables(1).PivotCache.Refresh
    With Worksheets("Page1-1")
        'Определим позицию следующего отчетного месяца
        Cnt = .Cells(6, .Columns.Count).End(xlToLeft).Column + 1
        lr = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Cells(6, Cnt) = Format(WorksheetFunction.EoMonth(Cells(6, Cnt - 1), 1), "YYYY-MM-DD")
        With .Range(.Cells(7, Cnt), .Cells(lr, Cnt))
           .FormulaR1C1 = "=VLOOKUP(SUBSTITUTE(RC1&RC2&RC3,"" "",""""),Pivot!C1:C2,2,0)"
            .Value = .Value
        End With
    End With
End Sub
Изменено: RAN - 19 Ноя 2019 20:58:21
 
RAN, спасибо ЗА ОТВЕТ!
 
Все-таки для понимания, почему если я добавляю последний аргумент ВПР этот код выдает ошибку 1004?

Код
Cells(7, Cnt) = WorksheetFunction.VLookup(WorksheetFunction.Substitute(Range("A7") & Range("B7") & Range("C7"), " ", ""), Sheets("Pivot").Range("A:B"), 2,0)
 
xlankasterx, функция возвращает ошибку при отсутствии искомого значения. Используйте IfError.
Изменено: Polkilo - 20 Ноя 2019 10:18:26
 
Уже пробовал:

Код
Cells(7, Cnt) = WorksheetFunction.IfError(WorksheetFunction.VLookup(WorksheetFunction.Substitute(Range("A7") & Range("B7") & Range("C7"), " ", ""), Sheets("Pivot").Range("A:B"), 2, 0), 0)

Но выдает ошибку 1004(скрин во вложении)

Спасибо за помощь!
Ошибка.png (4.49 КБ)
 
F1
Use the IFERROR function to trap and handle errors in a formula
И где у вас формула?
 
Цитата
RAN написал:
F1Use the IFERROR function to trap and handle errors in a formula И где у вас формула?

Cells(7, Cnt) = WorksheetFunction.IfError(WorksheetFunction.VLookup(WorksheetFunction.Substitute(Range("A7") & Range("B7") & Range("C7"), " ", ""), Sheets("Pivot").Range("A:B"), 2, 0), 0)

Выделил жирным)
Изменено: xlankasterx - 20 Ноя 2019 10:52:11
 
Не жмите н кнопку цитирования без необходимости. После Вас убирать - нет никакого удовольствия
 
И что, вы считаете, что от выделения жирным формула народилась?
В макросе формулы не работают, макросом можно только записать формулу на лист.
См. аналогичную строку в #7. Вот там IfError работать будет.
Изменено: RAN - 20 Ноя 2019 11:03:02
 
Чего не знал того не знал.

Спасибо за консультацию тему можно закрыть.
Страницы: 1
Читают тему (гостей: 1)
Наверх