Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/ВПР если нет значения - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
ВПР если нет значения
LOG Дата: Воскресенье, 19.01.2025, 16:05 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

02
Здравствуйте, не понимаю в чем ошибка, подскаэите пожалуйста почему если нет значения выводит ошибку?
при метке ставит предыдущие значение, но мне нужно, если нет значния, то ставить пусто
К сообщению приложен файл: makros_vpr.xlsm (18.2 Kb)
 
Ответить
СообщениеЗдравствуйте, не понимаю в чем ошибка, подскаэите пожалуйста почему если нет значения выводит ошибку?
при метке ставит предыдущие значение, но мне нужно, если нет значния, то ставить пусто

Автор - LOG
Дата добавления - 19.01.2025 в 16:05
Gustav Дата: Воскресенье, 19.01.2025, 18:02 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2821
Репутация: 1190 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Здравствуйте! Я бы придал Вашей процедуре примерно следующий вид:
[vba]
Код
Sub vpr_v2()
    Dim lastRow As Long
    Dim lookupRange As Range, resultRange As Range
    Dim finalResult As Variant
    Dim i As Long
    
    lastRow = Cells(Лист1.Rows.Count, "A").End(xlUp).Row

    Set lookupRange = Лист1.Range("A2:A" & lastRow)
    Set resultRange = Лист2.Range("C:D")

    On Error Resume Next
    For i = 2 To lastRow + 1
        finalResult = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, resultRange, 2, False)
        If Err Then
            Err.Clear
            Cells(i, "C").Value = ""
        Else
            Cells(i, "C").Value = finalResult
        End If
    Next i
    On Error GoTo 0
End Sub
[/vba]
Используемая у вас функция IsError здесь не лучший выбор, поскольку фактически дважды приходится выполнять ВПР для одной ячейки - сначала проверять на ошибку, а затем еще раз вычислять то же значение, если ошибки нет. Обработчик On Error Resume Next, который у вас, вроде как, упомянут в коде, но закомментирован - здесь самое то. Собственно, я его и реанимировал.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеЗдравствуйте! Я бы придал Вашей процедуре примерно следующий вид:
[vba]
Код
Sub vpr_v2()
    Dim lastRow As Long
    Dim lookupRange As Range, resultRange As Range
    Dim finalResult As Variant
    Dim i As Long
    
    lastRow = Cells(Лист1.Rows.Count, "A").End(xlUp).Row

    Set lookupRange = Лист1.Range("A2:A" & lastRow)
    Set resultRange = Лист2.Range("C:D")

    On Error Resume Next
    For i = 2 To lastRow + 1
        finalResult = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, resultRange, 2, False)
        If Err Then
            Err.Clear
            Cells(i, "C").Value = ""
        Else
            Cells(i, "C").Value = finalResult
        End If
    Next i
    On Error GoTo 0
End Sub
[/vba]
Используемая у вас функция IsError здесь не лучший выбор, поскольку фактически дважды приходится выполнять ВПР для одной ячейки - сначала проверять на ошибку, а затем еще раз вычислять то же значение, если ошибки нет. Обработчик On Error Resume Next, который у вас, вроде как, упомянут в коде, но закомментирован - здесь самое то. Собственно, я его и реанимировал.

Автор - Gustav
Дата добавления - 19.01.2025 в 18:02
i691198 Дата: Воскресенье, 19.01.2025, 18:06 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 114 ±
Замечаний: 0% ±

Добрый вечер. Попробуйте вместо функции Application.WorksheetFunction.VLookup использовать Application.VLookup или перед этой строкой вставить строку On Error Resume Next .
 
Ответить
СообщениеДобрый вечер. Попробуйте вместо функции Application.WorksheetFunction.VLookup использовать Application.VLookup или перед этой строкой вставить строку On Error Resume Next .

Автор - i691198
Дата добавления - 19.01.2025 в 18:06
_Boroda_ Дата: Понедельник, 20.01.2025, 10:27 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16766
Репутация: 6550 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А я бы вообще через словарь делал. Гораааааздо быстрее работать будет.
Юлия, если положите сюда файл в xlsx, то напишу код. Сейчас Ваш файл скачать не могу - он с макросами, а безопасники на работе заблокировали скачивание таких файлов с этого сайта


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА я бы вообще через словарь делал. Гораааааздо быстрее работать будет.
Юлия, если положите сюда файл в xlsx, то напишу код. Сейчас Ваш файл скачать не могу - он с макросами, а безопасники на работе заблокировали скачивание таких файлов с этого сайта

Автор - _Boroda_
Дата добавления - 20.01.2025 в 10:27
LOG Дата: Понедельник, 20.01.2025, 18:11 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

02
Gustav, спасибо большое!! все работает.
 
Ответить
СообщениеGustav, спасибо большое!! все работает.

Автор - LOG
Дата добавления - 20.01.2025 в 18:11
LOG Дата: Понедельник, 20.01.2025, 18:15 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

02
_Boroda_, спасибо за помощь, словарь для меня пока сложно. Хотя сейчас я пытаюсь посчитать количество через словарь, по типу счетеслимн. Если на днях не разберусь, буду просить помощи на сайте))
 
Ответить
Сообщение_Boroda_, спасибо за помощь, словарь для меня пока сложно. Хотя сейчас я пытаюсь посчитать количество через словарь, по типу счетеслимн. Если на днях не разберусь, буду просить помощи на сайте))

Автор - LOG
Дата добавления - 20.01.2025 в 18:15
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!