идентифицировать строки с наименьшими значениями в массиве на основе идентичных значений в столбце этого массива

-2

У меня есть массив данных о продукте, который включает в себя код, описание и стоимость. код уникален, стоимость числова, а описание не уникально. Пожалуйста, посмотрите пример. Как я могу выбрать самый дешевый из каждого продукта на основе описания и цены?

enter image description here

Это результат использования формулы MIN.

enter image description here

Bartley
источник
Вы знаете, как использовать VBa?
Dave
о, и я надеюсь не использовать VBa !! :-)
Bartley
Я полагаю, ты шутишь? Если нет, то вы действительно должны были это прояснить!
Dave
1
Ваш вопрос не завершен. То, что вы написали, не соответствует вашему скриншоту; «код уникален, стоимость числова, а описание не уникально», однако на скриншоте показаны «продукт» и «стоимость».
CharlieRB
1
Можете ли вы объяснить, что вы пробовали, поскольку вопрос звучит так, как будто вы ничего не сделали и хотите, чтобы мы сделали все это для вас?
Dave

Ответы:

1

Добавьте эту формулу массива в качестве нового «самого низкого» столбца (настраивая диапазон для фактического диапазона) и скопируйте:

={IF(B2=MIN(IF($A$2:$A$9=A2,$B$2:$B$9)),"Y","")}
Madball73
источник
что РАБОТАЕТ БЛИЖАЙШЕЕ, однако, оно идентифицирует только абсолютное минимальное значение, а не идентифицирует самое низкое для каждого продукта. Я приложил изображение к своему вопросу, чтобы проиллюстрировать разницу.
Bartley
1
Я забыл сказать вам, чтобы положить его в виде формулы массива.
Madball73
Это работает: я скопировал вашу формулу, вставил ее в нужную ячейку и нажал CTRL + SHIFT + ENTER, чтобы сохранить формулу в виде формулы массива. Затем я смог расширить формулу по всей длине таблицы и показать все записи о продуктах по самым низким ценам. Очень ценят за ваше элегантное решение.
Bartley
0

Я написал следующий VBa для вас

    Dim hasRows As Boolean
    hasRows = True

    Dim currentRow As Integer
    currentRow = 2

    Dim previousProduct As String
    Dim currentProduct As String
    Dim rowOfProduct As Integer
    Dim lowPrice As Integer
    lowPrice = -999 ' dummy number
    Do While (hasRows)

        currentProduct = Range("A" & currentRow).Value

        If (previousProduct = "") Then
            previousProduct = currentProduct
        Else

            If (previousProduct <> currentProduct) Then
                lowPrice = -999 'dummy again
                Range("B" & rowOfProduct).Interior.ColorIndex = 36
            End If

        End If

        If (Range("A" & currentRow).Value = "") Then
            hasRows = False
            Exit Do
        End If

        If (lowPrice = -999) Then
            lowPrice = Range("B" & currentRow).Value
            rowOfProduct = currentRow
        Else
            If Range("B" & currentRow).Value < lowPrice Then
                lowPrice = Range("B" & currentRow).Value
                rowOfProduct = currentRow
            End If
        End If

        previousProduct = currentProduct
        currentRow = currentRow + 1
    Loop

enter image description here

Dave
источник