Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2012, 21:48   #1
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию Замена ВПР2

Добрый день, уважаемые форумчане!
Очень нужная формула VLOOKUP2, но тормозит жутко. Перерыл поиск, понял, что многие сталкивались с аналогичной проблемой, но ничего путного не нашлось. Подскажите, чем можно заменить. Или код самой формулы у меня не совсем правильный?

Function VLOOKUP2(Table As Range, SearchColumnNum As Integer, SearchValue As Variant, _
n As Integer, ResultColumnNum As Integer)
Dim i As Integer
Dim iCount As Integer

For i = 1 To Table.Rows.Count
If Table.Cells(i, SearchColumnNum) = SearchValue Then
iCount = iCount + 1
End If
If iCount = n Then
VLOOKUP2 = Table.Cells(i, ResultColumnNum)
Exit For
End If
Next i
End Function
strannick вне форума Ответить с цитированием
Старый 21.05.2012, 22:51   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

По идее так должно быть пошустрее:
Код:
Function VLOOKUP2(Table As Range, SearchColumnNum As Integer, SearchValue As Variant, _
                n As Integer, ResultColumnNum As Integer)
    Dim i As Long, iCount As Long
    Dim avArr
    avArr = Table.Value
    For i = 1 To UBound(avArr, 1)
        If avArr(i, SearchColumnNum) = SearchValue Then
            iCount = iCount + 1
        End If
        If iCount = n Then
            VLOOKUP2 = avArr(i, ResultColumnNum)
            Exit For
        End If
    Next i
End Function
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 22.05.2012, 00:22   #3
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Ого!!! Суперам большой привет и огромное спасибо! Буду пробовать. Но, честно говоря, не первый раз сталкиваюсь с такой заторможенностью ВПР2. А в принципе, чем можно заменить? Какая другая функция (не макрос) может выполнять те же задачи?
strannick вне форума Ответить с цитированием
Старый 22.05.2012, 22:30   #4
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

В принципе, без макросов можно заменить формулой массива(ввод завершается нажатием не просто Enter, а Ctrl+Shift+Enter. Формула при этом будет заключена в фигурные скобки - {} ):
Код:
=ИНДЕКС(A1:B5;НАИМЕНЬШИЙ(ЕСЛИ(A1:A5="g";СТРОКА(A1:A5));3);2)
Если подставить в неё аргументы из ВПР2(для большего понимания), то получиться вот что:
Код:
=ИНДЕКС(Table;НАИМЕНЬШИЙ(ЕСЛИ(Ссылка_на_диапазон_для_поиска_значения=SearchValue;СТРОКА(Ссылка_на_диапазон_для_поиска_значения));n);ResultColumnNum)
Кол-во строк в Ссылка_на_диапазон_для_поиска_значе ния и в Table должно быть одинаковым.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замена Ия Ильина Паскаль, Turbo Pascal, PascalABC.NET 2 25.12.2011 15:52
Замена q на u, а u на q xkpukx Паскаль, Turbo Pascal, PascalABC.NET 3 15.12.2010 07:16
ЗАМЕНА ing60 Microsoft Office Excel 3 22.04.2009 12:41
Замена кода программы с Delhi5 на Delhi7 либо замена базы данных с Acessa на MySQL DorianLeroy Фриланс 8 18.02.2009 18:52
Замена Патрон Общие вопросы Delphi 6 05.11.2008 15:45