Страницы: 1
RSS
Найти в разных книгах (при совпадении артикула и производителя) наименьшую цену
 
Друзья! Помогите, пожалуйста, решить проблему... Задача: найти в разных прайсах (книгах) совпадения строк по индексу ([@артикул]&[@производитель]) и выбрать из совпавших наименьшую цену. Собрал через "запрос => из книги" данные из разных прайсов, загрузил каждый на свой на свой лист.  Потом через ИНДЕКС-ПОИСКПОЗ отобрал позиции по своей  номенклатуре и вывалил все цены на один лист. Теперь нужно выделить наименьшую цену, но вот затык, НАИМЕНЬШИЙ не хочет воспринимать #Н/Д, даже ее подмену на "0". Памагити кто чем можыт))). "Создать запрос => объединить запросы" не подходит, т.к. прайсов больше 2-х. Прошу пардону, но я четь-чуть чайник в этом деле)))... НАИМЕНЬШИЙ в Солбец2
 
вам на форум по фотошопу - там нарисуют нужный наименьший
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Евгений Евгений написал:
объединить запросы" не подходит, т.к. прайсов больше 2-х
ну и что? хоть дцать, только Ігор Гончаренко правильно заметил - рисовать результат куда?
Соблюдение правил форума не освобождает от модераторского произвола
 
столбец2
 
Евгений Евгений, вам намекают что тут форум по ексель и пример соответствующий должен быть
Не бойтесь совершенства. Вам его не достичь.
 
При чем тут фотошоп?

Результат в столбце Н, пробовал  =НАИМЕНЬШИЙ(Лист_2[@[Цена Шатэ]:[Цена Автотр]];2) и =НАИМЕНЬШИЙ(F2:G2;2), один результат, в справке пишут, что если в данных есть ошибка, то и НАИМЕНЬШИЙ не сработает, даже если ошибку подменить на значение.
 
Цитата
Евгений Евгений написал:
Результат в столбце Н
как скажете
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, :D  
Не бойтесь совершенства. Вам его не достичь.
 
buchlotnik,  :D  :D  :D  
 
Евгений Евгений, и зачем столько файлов?  вы хотите это делать во всех открытых книгах?  
Изменено: Mershik - 25.04.2021 11:07:26
Не бойтесь совершенства. Вам его не достичь.
 
buchlotnik, задача - отобрать из прайсов Автотраст, Шатэ и других... (структура у всех разная) по артикулу и производителю номенклатуру, имеющуюся в "прайсе 1С" и выбрать из сопоставленных меньшую цену, потом сравнить эту наименьшую цену с ценой в 1С и выбрать из них большую. Цены по списку 1С из прайсов я отобрал, стр. "Отбор по цене", но не могу выбрать из них меньшую. Удобнее конечно через запрос в ПауэрКвери - объединить запросы, отобрать условным столбцом, но не хватает мозгов, как слепить больше 2х таблиц. Кучу разных запросов не хотелось бы городить, вываливать все данные в один лист по одноименным столбцам - тоже как-то не очень, получится за несколько миллионов строк...
 
в столбце I текст, потому и ошибка, лечится =ЕСЛИОШИБКА(--ИНДЕКС(Прайс_Шатэ...
в остальном логика не ясна, почему =НАИМЕНЬШИЙ(F2:G2;2) ?
Соблюдение правил форума не освобождает от модераторского произвола
 
Евгений Евгений, ничего не понятно, но я придумал) но да не заметил что там текст ...
Изменено: Mershik - 25.04.2021 11:28:59
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Mershik написал:
и зачем столько файлов?  вы хотите это делать во всех открытых книгах?  
Не совсем... В общем, есть номенклатура в 1С, т.е. ассортимент, какие-то позиции есть в наличии, закуплены, а каких-то нет. Есть несколько поставщиков со своим ассортиментом товаров в несколько сотен тысяч позиций, включая и некоторые наши позиции. Уникальный идентификатор позиции - это "артикул" & "производитель". Прайсы от поставщиков приходят ежедневно на почту, структура таблиц у всех разная,. Так вот я пытаюсь взять свой ассортимент (прайс 1С), отыскать позиции прайса 1С в прайсах поставщиков (Автотраст, Шатэ итд) и отобрать из найденных поставщика с наименьшей ценой (>0).
P.s. Только сейчас дошло - наименьший-то не подойдет :D , меньшую цену я покажу в колонке, а как я потом узнаю, чья это цена :qstn:  :D  
 
Евгений Евгений, совет - показать 1 файл пример, в нем отдельно исходные даныне, а рядом ли на другом листе желаемый результат  БЕЗ ФОРМУЛ ВАШИХ ПРОСТО РЕЗУЛЬТАТ и его описание
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Mershik написал:  показать 1 файл пример..
Отбор поставщика - это результат, остальное исходники. Спасибо :)  
 
Цитата
buchlotnik написал:
в столбце I текст, потому и ошибка, лечится =ЕСЛИОШИБКА(--ИНДЕКС(Прайс_Шатэ...
в остальном логика не ясна, почему =НАИМЕНЬШИЙ(F2:G2;2) ?
Блин, текст...... :D .
Тоже не понятно, у меня так =НАИМЕНЬШИЙ(Таблица6[@[Цена Автотр]:[Цена Шатэ]];2) :D  
Изменено: Евгений Евгений - 25.04.2021 12:44:12
 
Евгений Евгений, открою Вам секрет можно писать в одном сообщении, это не чат - тему невозможно потом читать.
можно редактировать свои сообщения...(видите)

см. файл.
Код
Sub mrshkei()
Dim arr, arr2, arr3, arr4, i As Long, sh As Worksheet, sh2 As Worksheet
Dim lr As Long, lr2 As Long, lr3 As Long
Set sh = Worksheets("Прайс 1С"): Set sh2 = Worksheets("Прайс Автотраст"): Set sh3 = Worksheets("Прайс Шатэ")
lr = sh.Cells(Rows.Count, 1).End(xlUp).Row
lr2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
lr3 = sh3.Cells(Rows.Count, 1).End(xlUp).Row
arr = sh.Range("A2:H" & lr)
arr2 = sh2.Range("A2:H" & lr2)
arr3 = sh3.Range("A2:H" & lr3)
ReDim arr4(1 To lr, 1 To 2)
For i = LBound(arr) To UBound(arr)
    ind = arr(i, 8)
    If Application.WorksheetFunction.CountIf(sh2.Columns(8), ind) > 0 Then
    For n = LBound(arr2) To UBound(arr2)
        If ind = arr2(n, 8) Then
            If arr4(i, 1) = Empty Then
                arr4(i, 1) = CDbl(arr2(n, 5)): arr4(i, 2) = sh2.Name
            Else
                If arr4(i, 1) > CDbl(arr2(n, 5)) Then arr4(i, 1) = CDbl(arr2(n, 5)): arr4(i, 2) = sh2.Name
            End If
        End If
    Next n
    End If
    If Application.WorksheetFunction.CountIf(sh3.Columns(8), ind) > 0 Then
    For n = LBound(arr3) To UBound(arr3)
        If ind = arr3(n, 8) Then
            If arr4(i, 1) = Empty Then
                arr4(i, 1) = CDbl(arr3(n, 5)): arr4(i, 2) = sh3.Name
            Else
                If arr4(i, 1) > CDbl(arr3(n, 5)) Then arr4(i, 1) = CDbl(arr3(n, 5)): arr4(i, 2) = sh3.Name
            End If
        End If
    Next n
    End If
Next i
sh.Range("J2").Resize(UBound(arr4), 2) = arr4
End Sub

Изменено: Mershik - 25.04.2021 12:37:46 (изменил чуть макрос)
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, спасибо большое! К сожалению, я не очень с макросами дружу, но попробую ваш файл "повертеть - пощупать", попробую разобраться, рас уж глубже полез))). А без макросов не получится решить? Есть смысл в эту сторону рыть?
 
Евгений Евгений, а что в #13 не так?
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, вы просто гуру excel !!! не сразу увидел этот ответ... То что доктор прописал :excl:  :D

Цитата
buchlotnik написал: в столбце I текст, потому и ошибка,
buchlotnik, объясните, пожалуйста, несведущему, в каком месте текст? Я правильно понимаю, вы же не формат ячеек имеете ввиду, это где-то среди данных, собранных в формулу есть текст?
 
Цитата
Евгений Евгений написал: в каком месте текст?
гм,
Цитата
buchlotnik написал: в столбце I
все ненулевые значения - текст, на нём НАИМЕНЬШИЙ и спотыкается
Соблюдение правил форума не освобождает от модераторского произвола
 
Т.е. формула ИНДЕКС-ПОИСКПОЗ выдает значение в виде текста? А я понять не мог, почему если нули, ошибки нет...
Изменено: Евгений Евгений - 25.04.2021 16:02:18
 
Цитата
Евгений Евгений написал:
формула ИНДЕКС-ПОИСКПОЗ выдает значение в виде текста?
нет, ИНДЕКС выдает значение в виде ссылки на диапазон, т.е. на ячейку исходной таблицы - а там текст; в исходных таблицах текст потому что вы так их загрузили через PQ - в файлах-исходниках всё ок
Изменено: buchlotnik - 25.04.2021 16:31:13
Соблюдение правил форума не освобождает от модераторского произвола
 
Спасибо большое, учту в будущем...
 
Mershik, в файле из #13 в столбце J, АГРЕГАТ (15;6...........) не подходит, т.к. он не может проигнорировать только нули и можно отсекать либо первое минимальное либо со второго... А вот так работает {=МИН(ЕСЛИ(Таблица6[@[Цена Автотр]:[Цена Шатэ]]<>0;Таблица6[@[Цена Автотр]:[Цена Шатэ]];""))}
Изменено: Евгений - 26.04.2021 12:49:08
Страницы: 1
Наверх