Страницы: 1
RSS
Консолидация двух массивов в один с выбором максимального значения и удаления дубликатов с минимальным значением
 

Здравствуйте!

Есть 2 массива данных из  двух столбцов каждый (2 прайс-листа с разными датами): Наименование, Цена

Задача: Нужно составить единый общий массив из всех наименований (без дубликатов) с Максимальной ценой.

 
Код
Sub ОгурцовыйПрайс()
    Dim ar1 As Variant: ar1 = Range("B3:C9")
    Dim ar2 As Variant: ar2 = Range("F3:G9")
    
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
    JobArr ar1, dic
    JobArr ar2, dic
    
    With Range("I3")
        .Cells(1, 1).Resize(dic.Count, 1) = Application.Transpose(dic.Keys())
        .Cells(1, 2).Resize(dic.Count, 1) = Application.Transpose(dic.Items())
    End With
End Sub

Sub JobArr(arr As Variant, dic As Object)
    Dim y As Long
    For y = 1 To UBound(arr, 1)
        If Not dic.Exists(arr(y, 1)) Then
            dic.Item(arr(y, 1)) = arr(y, 2)
        Else
            If dic.Item(arr(y, 1)) < arr(y, 2) Then
                dic.Item(arr(y, 1)) = arr(y, 2)
            End If
        End If
    Next
End Sub
 

Ой. Спасибо, конечно. Но такие символы я не осилю((

 
Тогда так
Код
I2 и ниже        =ЕСЛИ(СТРОКА()<СЧЁТЗ(B:B)+2;B3;ВПР(СТРОКА()-СЧЁТЗ(B:B)-1;D:G;3;0))
J2 и ниже        =МАКС(ЕСЛИОШИБКА(ВПР(I3;B:C;2;0);0);ЕСЛИОШИБКА(ВПР(I3;F:G;2;0);0))
D2 и ниже        =D2+1-СЧЁТЕСЛИМН(B:B;F3)
 
Так гораздо приятнее)) Огромное Вам спасибо!
 
Не проще было:
Скопировать 2 прайс и добавить в конце первого.
Отсортировать по наимен. и цена общий список.
И "Удалить Дубликаты" через меню.

Тогда и название темы можно было упростить: "Прайс с максимальными ценами без дубликатов"
Изменено: Marat Ta - 28.04.2021 15:07:47
 

Проще. Спасибо!

Сортировать по наименованию не обязательно, а сортировать по цене обязательно по убыванию.

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

Ещё раз спасибо!!!

 
Еще вариант.
Формула массива в K3:
Код
=IFERROR(IFERROR(INDEX($B$3:$B$10,MATCH(1,(COUNTIF($K$2:K2,$B$3:$B$10)=0)*($B$3:$B$10<>""),0)),INDEX($F$3:$F$10,MATCH(1,(COUNTIF($K$2:K2, $F$3:$F$10)=0)*($F$3:$F$10<>""),0))),"")

В L3:
Код
=MAX(INDEX(($B$3:$B$10=$I3)*$C$3:$C$10,0),INDEX(($F$3:$F$10=$I3)*$G$3:$G$10,0))
Изменено: memo - 28.04.2021 22:27:45
Страницы: 1
Наверх