Страницы: 1
RSS
Последовательный выбор всех значений по условию
 
Всем привет. Нужна помощь по функции ВПР.

Есть таблица, в ней список наименований(повторяющихся), и у каждого свой артикул. Если я пытаюсь сопоставить артикула со списком наименований, то впр находит первый попавшийся артикул.

Нужно как-то посчитать так, что если такой артикул через ВПР уже нашёлся, то он искал следующее соответствие. Пример файла во вложении. Там всё более чем понятно.

Буду очень благодарен за помощь в решении моей проблемы...
Изменено: vikttur - 22.06.2021 17:28:00
 
Вводить как формулу массива Ctrl+Shift+Enter
Код
=ИНДЕКС($B$1:$B$25;1000-НАИБОЛЬШИЙ(($A$2:$A$25=G2)*(1000-СТРОКА($A$2:$A$25));СЧЁТЕСЛИМН($G$1:G2;G2)))
 
Последовательный выбор всех значений по условию?
Код
=ИНДЕКС($B$2:$B$25;ПОИСКПОЗ(G2;$A$2:$A$25;0)+СЧЁТЕСЛИ(G$1:$G2;G2)-1)
Изменено: vokilook - 22.06.2021 17:28:32
 
МатросНаЗебре, vokilook, ребят, огромное Вам спасибо! Это то, что нужно.

EDIT: Сейчас проверил на реальном коде, к сожалению, оба варианта повторяют позиции... пример файла во вложении. Может я что-то не так делаю?
Изменено: Malcolm - 22.06.2021 21:42:47
 
Вот это Вы, видимо, не прочитали:
Цитата
МатросНаЗебре написал: Вводить как формулу массива Ctrl+Shift+Enter
 
Да вроде именно так и пробовал. Повторяет артикула. На всякий случай уточню, я работаю на excel 2007.

EDIT: если не сложно, можете написать формулу на примере файла test2.xlsx?
Изменено: vikttur - 23.06.2021 00:37:17
 
Попробуйте так:
Код
=INDEX($B$2:$B$1589;SMALL(IF(($A$2:$A$1589=G2);ROW($A$2:$A$1589)-ROW($A$2)+1);COUNTIF($G$1:G2;G2)))
 
Вот теперь вроде всё работает как надо. Спасибо!
Изменено: vikttur - 23.06.2021 07:41:36
 
memo, уважаемый, битый час ломаю голову над синтаксисом, уже и дробил по частям, и как только не старался - даже скопированное, применительно к моей таблице, не смог заставить корректно работать, не говоря уже о том, чтобы просто понять, как это вообще работает. Не могли бы вы объяснить? По отдельности-то я понимаю, как каждая из этих функций работает, но вот вместе, на Вашем примере - никак не получается.
 
Spartan1237, пока ждёте ответ, посмотрите здесь  
 
Павел \Ʌ/, само собой, первым, на что я наткнулся, была эта статья. Но формула массива мне не совсем подходит - надо как-то применять на длинной таблице, и делать это будут люди, которые с трудом понимают, что такое ВПР.
 
Spartan1237, как вариант для работы на конкретном месте - UDF
Например тот же результат даст формула
Код
=VLOOKUP2(A:B;1;G2;СЧЁТЕСЛИ($G$2:G2;G2);2)

где VLOOKUP2() - это UDF, код её
Код
Function VLOOKUP2(Table As Variant, SearchColumnNum As Long, SearchValue As Variant, _
                n As Long, ResultColumnNum As Long)
    Dim i As Long, iCount As Long
    If TypeName(Table) = "Range" Then Table = Intersect(Table.Parent.UsedRange, Table).Value
    VLOOKUP2 = ""
    For i = 1 To UBound(Table)
        If Table(i, SearchColumnNum) = SearchValue Then iCount = iCount + 1
        If iCount = n Then
            VLOOKUP2 = Table(i, ResultColumnNum)
            Exit For
        End If
    Next i
End Function
Изменено: Hugo - 30.04.2024 17:36:30
 
Всем спасибо! Проблема была решена кардинально - таблица перенесена в Google Spreadsheets, написана кнопка перебора и подстановки, права доступа ограничены.
Страницы: 1
Наверх