Страницы: 1
RSS
Из разных номеров, выбрать наибольшее, у которой первые 4 цифры одинаковые
 
Если коротко изъяснить суть задачи, то получается, у меня на трех листах номера с разными сериями 2568 и 2622, мне нужно, чтобы выбирался наибольший номер из первой серии?
Изменено: Ибрагим Белхороев - 29.11.2021 11:26:11
 
Так у Вас вон формулы в файле работают ... или что-то не так? если не так..то наверное нужно описать задачу, показать в файле ручками желаемый результат
Изменено: Mershik - 29.11.2021 11:01:18
Не бойтесь совершенства. Вам его не достичь.
 
Советую в несколько столбцов разнести с помощью формул ЛЕВСИМВ и ПРАВСИМВ первые 4 цифры. В пятом столбце ПРОИЗВЕДЕНИЕ всех четырех значений. КОРЕНЬ и произведения этих четырех даст РАВЕНСТВО ячейки с первой цифрой. Далее искать НАИБОЛЬШИЙ с условием ЕСЛИ (итог корня=первой цифре).
Если напрячься малость, то можно объединить это все в одну  длинную формулу.
 
, я добавил описание.
 
, а как понять кто из них первая, а кто вторая или последующая серия? та что находится на первом листе? или так что меньше по порядку  или как?
Код
Sub mrshkei()
Dim arr, MX As Double, MN As Double, sh As Worksheet, lr As Long, i As Long
x = 99999: MX = 0: XX = "": MN = 9999: XXX = ""
For Each sh In Worksheets
With sh
    lr = .Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To lr
        If CLng(Left(.Cells(i, 1), 4)) < x Then x = CLng(Left(.Cells(i, 1), 4))
    Next i
End With
Next sh
For Each sh In Worksheets
With sh
    lr = .Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To lr
        If CLng(Left(.Cells(i, 1), 4)) = x Then
            If MX <= CLng(Right(.Cells(i, 1), 3)) Then: MX = CLng(Right(.Cells(i, 1), 3)): XX = .Cells(i, 1)
            If MN >= CLng(Right(.Cells(i, 1), 3)) Then: MN = CLng(Right(.Cells(i, 1), 3)): XXX = .Cells(i, 1)

        End If
    Next i
End With
Next sh
MsgBox "MINIMUM= " & XXX & vbLf & "Maximum= " & XX
End Sub
Изменено: Mershik - 29.11.2021 12:04:30
Не бойтесь совершенства. Вам его не достичь.
 
Действия похожие. Только ЛЕВСИМВ на четыре знака. А после наибольший. Если среди одинаковой серии НАИБОЛЬШИЙ по последним цифрам, то добавьте еще столбец ПРАВСИМВ на остаток артикула. Далее с ЕСЛИ. Можно использовать НАИБОЛЬШИЙ с условием ЕСЛИ, то СТРОКА. Точно я так и не понял описания задания
 
Код
=МАКС(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(ОБЪЕДИНИТЬ(СИМВОЛ(1);1;Лист1:Лист3!A1:A10);СИМВОЛ(1);"</i><i>")&"</i></j>";"//i[contains(.,'2568')]"))
 
, первая серия, это та которая в начале. В данном случае первая это 2568.
, допустим если в первом листе разные серии, то первая будет которая стоит выше. Аналогично и вдругих листах
 
Код
=МАКС(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(ОБЪЕДИНИТЬ(СИМВОЛ(1);1;Лист1:Лист3!A1:A10);СИМВОЛ(1);"</i><i>")
&"</i></j>";"//i[contains(.,'"&--ЛЕВБ(Лист1!A1;4)&"')]"))
Изменено: Тимофеев - 29.11.2021 13:14:18
 
, ошибка "#ИМЯ?"
 
ошибка "#Устаревшая версия Excel"
 
, А можно подобрать такую формулу, допустим формула =ЛЕВСИМВ(МИН(Лист1:Лист3!A1:A10);4), дает нам серию 2568, далее используя эту серию найти максимальное число с этой серией?
 
Такой изврат:
Код
=МАКС(ЕСЛИОШИБКА(ПОИСК(ЛЕВБ(МИН(Лист1:Лист3!A1:A10);4);ПСТР(СЦЕП(Лист1:Лист3!A1:A10);7*(СТРОКА(A1:A30)-1)+1;7);1);0)*ПСТР(СЦЕП(Лист1:Лист3!A1:A10);7*(СТРОКА(A1:A30)-1)+1;7))
 
Цитата
Ибрагим Белхороев написал:
А можно подобрать такую формулу,
можно, но она будет в разы сложнее и летучее чем та, что я показал в прошлой теме в старом Excel.
Изменено: БМВ - 29.11.2021 14:03:55
По вопросам из тем форума, личку не читаю.
 
Ибрагим Белхороев, макрос смотрели?
Не бойтесь совершенства. Вам его не достичь.
 
Код
=МАКС(ЕСЛИОШИБКА(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(ПСТР(СЦЕП(Лист1:Лист3!A1:A10);7*(СТРОКА(A1:A30)-1)+1;7);"";"</i><i>")&"</i></j>";"//i[contains(.,'"&ЛЕВБ(МИН(Лист1:Лист3!A1:A10);4)&"')]");0))
 
Тимофеев, не работает.

БМВ, а можете дать ссылку?

Mershik, смотрел, но мне непонятен её принцип, просто показывает наибольший номер серии 2568, а мне нужно чтобы это в  ячейке отображалось.
Изменено: Ибрагим Белхороев - 29.11.2021 16:12:45
 
пример
 
Ибрагим Белхороев, Вас не смущает что  все к кому вы обращаетесь е отображаются и понять кому что адресовано не возможно...ъ
если это
Цитата
, смотрел, но мне непонятен её принцип, просто показывает наибольший номер серии 2568, а мне нужно чтобы это в  ячейке отображалось.
то замените часть кода
Код
MsgBox "MINIMUM= " & XXX & vbLf & "Maximum= " & XX
на (куда нужно укажите)
Код
sh.cells(1,4)=xxx: sh.cells(1,5)=xx
Изменено: Mershik - 29.11.2021 14:39:37
Не бойтесь совершенства. Вам его не достичь.
 
вариант на pq - любые 4-значные серии из всех листов файла
Код
let
    a = Table.Combine(Excel.Workbook(Web.Contents("https://www.planetaexcel.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=470007&action=download"))[Data])[[Column1]],
    b = Table.AddColumn(a, "q", each Text.Start(Text.From([Column1]), 4)),
    c = Table.Group(b, {"q"}, {"w", each List.Sort(_[Column1], Order.Descending){0}})
in
    c
 
Тимофеев, в начале формула работает, но если два раза нажать на нее, то исчезают скобки { } и в ячейке появляется "#ИМЯ?"
Изменено: Ибрагим Белхороев - 29.11.2021 15:57:26
 
А если PQ.
Код
let
    Source = Excel.Workbook(File.Contents("C:\Users\seven\Documents\Documents\Кxlsx.xlsx"), null, true),
    Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data],
    #"Changed Type" = Table.TransformColumnTypes(Table1_Table,{{"Column1", Int64.Type}}),
    #"Appended Query" = Table.Combine({#"Changed Type", Table2, Table3}),
    #"Filtered Rows" = Table.SelectRows(#"Appended Query", each [Column1] <> null and [Column1] <> ""),
    #"Split Column by Position" = Table.SplitColumn(Table.TransformColumnTypes(#"Filtered Rows", {{"Column1", type text}}, "lt-LT"),"Column1",Splitter.SplitTextByPositions({0, 4}, false),{"Column1.1", "Column1.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Position",{{"Column1.1", Int64.Type}, {"Column1.2", Int64.Type}}),
    #"Filtered Rows1" = Table.SelectRows(#"Changed Type1", each ([Column1.1] = 2568)),
    #"Changed Type2" = Table.TransformColumnTypes(#"Filtered Rows1",{{"Column1.1", type text}, {"Column1.2", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type2", "Custom", each [Column1.1]&[Column1.2]),
    #"Changed Type3" = Table.TransformColumnTypes(#"Added Custom",{{"Custom", Int64.Type}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type3",{"Column1.1", "Column1.2"}),
    #"Sorted Rows" = Table.Sort(#"Removed Columns",{{"Custom", Order.Descending}}),
    #"Kept First Rows" = Table.FirstN(#"Sorted Rows",1)
in
    #"Kept First Rows"
 
Для старого Ctrl+Shift+Enter ввод массивных
 
Mershik, я заменил строку как вы сказали, появляется ошибка "Object variable or With block variable not set"
 
Цитата
написал:
если два раза нажать на нее
Ибрагим, доброго вечера! Постарайтесь вникать во ВСЕ сообщения (ответы) на Ваш вопрос, и если
Цитата
написал:
не работает
файл в студию. Почти 400 сообщений от Вас на форуме... Вы конкретные задачи решаете или набираете количество сообщений?
Страницы: 1
Наверх