У меня есть несколько продуктов, и я ценю их.

Я использовал min() чтобы найти наименьшее значение, а затем использовал Index , match чтобы получить соответствующее название продукта. Но у меня есть несколько продуктов, которые имеют одинаковую ценность.

В этом случае минимальное значение равно 54. Так, как я могу получить все три имени, которые сопоставлены с ним, например, он должен показать продукт A, продукт P, продукт Q против 54.

На данный момент он показывает только продукт P

3 ответа3

1

С такими данными, как:

Введите следующую пользовательскую функцию в стандартном модуле:

Public Function FindAll(v As Variant, rng As Range) As String
    Dim i As Long
    ary = rng

    For i = LBound(ary, 1) To UBound(ary, 1)
        If v = ary(i, 1) Then FindAll = FindAll & "," & ary(i, 2)
    Next i
    FindAll = Mid(FindAll, 2)
End Function

Выберите ячейку, скажите D7 и введите:

 =MIN(A:A)

и в C7 введите:

=findall(D7,A1:B25)

Пользовательские функции (UDF) очень просты в установке и использовании:

  1. ALT-F11 открывает окно VBE
  2. ALT-I ALT-M открывает новый модуль
  3. вставьте материал и закройте окно VBE

Если вы сохраните книгу, UDF будет сохранен вместе с ней. Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как .xlsm, а не .xlsx

Чтобы удалить UDF:

  1. откройте окно VBE, как указано выше
  2. очистить код
  3. закройте окно VBE

Чтобы использовать UDF из Excel:

= MyFunction (А1)

Чтобы узнать больше о макросах в целом, смотрите:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

а также

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

а подробности о UDF смотрите в:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

Макросы должны быть включены, чтобы это работало!

1

Ваша проблема может быть решена с использованием только функций, уже доступных в Excel. Я использовал эту ссылку, а затем подправил ее для вашей проблемы. Предполагая, что ваши продукты находятся в столбце A, а ваши значения - в столбце B, используйте следующую формулу:

=IFERROR(INDEX($B$2:$B$20,SMALL(IF($A$2:$A$20=$E$3;ROW($A$2:$A$20)-1);ROW()-2));"")

Войдите с помощью Ctrl + Shift + Enter (формула массива) и перетащите вниз, чтобы просмотреть все ваши случаи.

Как это работает? Функция if сначала проверяет, равно ли значение в диапазоне поиска значению поиска, и если да, то возвращает индекс этого значения. (Вы должны сделать row(..)-1 потому что ваши данные начинаются со строки 2. row()-2 в конце предназначена для того, чтобы убедиться, что вы получаете первое, второе и ... минимальное значение при перетаскивании вниз. -2 требуется, потому что ваша формула будет в третьем ряду листа. Я, наконец, обернул все в функцию iferror чтобы показывались только хорошие значения и никаких сообщений об ошибках.

0

Несколько не VBA подходов:

Формула:

С заголовками в строке 1 и вашими данными в столбцах A:B и =MIN(Product) в E3:

F3: =IFERROR(INDEX(Value,AGGREGATE(15,6,1/1/(Product=$E$3)*ROW(Product),ROWS($1:1))-1),"")

Зашел нормально и заполняй пока не увидишь пробелы

Вы можете отсортировать данные по продуктам, а затем использовать следующий условный формат:

Предполагая, что ваша отсортированная таблица начинается в O12 с первой строки данных в O13

=O13=O12

Format As:   Custom Number Format:  ;;;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .