Страницы: 1
RSS
Найти максимальное число в ячейке и взять его определение
 
Добрый день!
В столбце указаны составы на одежду.
Подскажите, пожалуйста, можно формулой вычислить в ячейке большее % значения состава и вывести названия большего состава?
Например, состав: 83% ХЛОПОК 15% ПОЛИЭСТЕР 2% ЭЛАСТАН , большее значение 83, вывести результат ХЛОПОК.
 
В ячейках всегда ли данные по типу (ЧИСЛО + % + ОПРЕДЕЛЕНИЕ — один или несколько раз) ?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
да в ячейках всегда один формат ( ЧИСЛО + % + ОПРЕДЕЛЕНИЕ ), в некоторых случаях может не быть пробела между ЧИСЛОМ и %  
 
С помощью макроса. Результат вставляется в столбец "B".
Макрос
 
UDF
Код
Function МАКССОСТАВ(myStr)
Dim arr(), iStr, N&
iStr = Split(myStr, "%")
For I = 0 To UBound(iStr)
    If IsNumeric(iStr(I)) Then
        ReDim Preserve arr(N)
        arr(N) = CDbl(iStr(I))
        N = N + 1
    End If
Next
МАКССОСТАВ = Application.Max(arr)
End Function
Согласие есть продукт при полном непротивлении сторон
 
Sanja, прошу прощения, но ему название нужно, которое соответствует бОльшему проценту. Вот сижу голову ломаю, как короче, чем у Karataev'а сделать))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Точно, невнимательность
Согласие есть продукт при полном непротивлении сторон
 
Формула массива:
Код
=СЖПРОБЕЛЫ(ЕСЛИОШИБКА(СЦЕПИТЬ(МАКС(ЕСЛИОШИБКА(1*ПСТР(ПОДСТАВИТЬ(A2&1;"%";"  ");СТРОКА($1:$100);3);0));"% ";ЛЕВБ(СЖПРОБЕЛЫ(ПСТР(A2&1;ПОИСК(МАКС(ЕСЛИОШИБКА(1*ПСТР(ПОДСТАВИТЬ(A2&1;"%";"  ");СТРОКА($1:$100);3);0));A2&1)+ДЛСТР(МАКС(ЕСЛИОШИБКА(1*ПСТР(ПОДСТАВИТЬ(A2&1;"%";"  ");СТРОКА($1:$100);3);0)))+1;ДЛСТР(A2&1)));МИН(ЕСЛИОШИБКА(ПОИСК(СТРОКА($1:$10)-1;СЖПРОБЕЛЫ(ПСТР(A2&1;ПОИСК(МАКС(ЕСЛИОШИБКА(1*ПСТР(ПОДСТАВИТЬ(A2&1;"%";"  ");СТРОКА($1:$100);3);0));A2&1)+ДЛСТР(МАКС(ЕСЛИОШИБКА(1*ПСТР(ПОДСТАВИТЬ(A2&1;"%";"  ");СТРОКА($1:$100);3);0)))+1;ДЛСТР(A2&1))));""))-1));A2))

Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Всем большое спасибо за отклик и помощь.

Karataev, подскажите, пожалуйста, макрос выдаёт ошибку: Syntax error и выделяет первую строчку макроса "Dim arr1(), arr2(), instr1 As Long, instr2 As Long"

Bema, Формула даёт не верный результат. Например на состав: 83% ХЛОПОК 15% ПОЛИЭСТЕР 2% ЭЛАСТАН, она выдаёт результат 15% ПОЛИЭСТЕР, а должен ХЛОПОК. Пример в файле, в столбце B указан результат формулы, в столбец C вставил какой должен быть.  
Изменено: Inti - 18.10.2017 10:36:39
 
Цитата
Inti написал:
Karataev , подскажи
к незнакомым людям у нас принято обращаться на Вы
По примерам: у меня оба работают как надо. Даже, если менять местами порядок состава. У вас сейчас наибольшее содержание идёт первым. Предложенные решения же работают с любым порядком (не привязаны к первому)
Изменено: Jack Famous - 18.10.2017 10:36:07
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Bema, прошу прощения, загрузил ваш файл, всё работает. Наверное не правильно вставил формулу в свой файл. Спасибо, очень выручали. А можно сделать, чтоб результат выводился без цифр и %, только текст большего состава?
 
Inti, наверное, Вы неправильно скопировали макрос с форума.
Я вставил макрос в Ваш файл.
 
Inti, в посте 8 формула массива - завершайте ввод формулы не клавишей Enter (как Вы это обычно делаете), а сочетанием клавиш Ctrl+Shift+Enter.
Изменено: Karataev - 18.10.2017 10:39:04
 
Jack Famous, спасибо за подсказку, признателен. Уже не первый раз помогаете.

Karataev, спасибо большущее за макрос, всё работает.

Побольше бы таких отзывчивых людей, всем хорошего дня!
 
Код
Function мяу$(s$)
    Dim oMatch As Object, lMax&, i&, n&
    Static objRegExp As Object
    If objRegExp Is Nothing Then
        Set objRegExp = CreateObject("VBScript.RegExp")
        objRegExp.Global = True: objRegExp.IgnoreCase = False: objRegExp.MultiLine = False
    End If
    With objRegExp
        .Pattern = "(\d+?)\s{0,}%\s{0,}\D+(?=\d)?"
        If .test(s) Then
            Set oMatch = .Execute(s)
            For i = 0 To oMatch.Count - 1
                If lMax < Val(oMatch(i).SubMatches(0)) Then
                    lMax = Val(oMatch(i).SubMatches(0))
                    n = i
                End If
            Next
        End If
        If n < oMatch.Count - 1 Then
            i = IIf(IsNumeric(oMatch(n + 1).firstindex), oMatch(n + 1).firstindex - oMatch(n).firstindex, oMatch(n + 1).firstindex - oMatch(n).firstindex - 1)
        Else
            i = Len(s) - oMatch(n).firstindex
        End If
        мяу = Mid$(s, oMatch(n).firstindex + 1, i)
    End With
End Function
 
RAN, спасибо, работает. Только макрос еще цифры и % извлекает, а мне нужно только буквы.
 
Тогда так мяукнем  ;)
Код
Function мяв$(s$)
    Dim oMatch As Object, lMax&, i&, n&
    Static objRegExp As Object
    If objRegExp Is Nothing Then
        Set objRegExp = CreateObject("VBScript.RegExp")
        objRegExp.Global = True: objRegExp.IgnoreCase = False: objRegExp.MultiLine = False
    End If
    With objRegExp
        .Pattern = "(\d+?)\s{0,}%\s{0,}(\D+(?=\d)?)"
        If .test(s) Then
            Set oMatch = .Execute(s)
            For i = 0 To oMatch.Count - 1
                If lMax < Val(oMatch(i).subMatches(0)) Then
                    lMax = Val(oMatch(i).subMatches(0))
                    n = i
                End If
            Next
        End If
        мяв = oMatch(n).subMatches(1)
    End With
End Function
 
RAN, если не сложно, прокомментируйте, пожалуйста, ваш шаблон извлечения. Очень крутая вещь - эти регулярки, но мозг ломает на раз  :)
Изменено: Jack Famous - 18.10.2017 12:58:17
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
(\d+?)*число*\s{0,}*пробелы(если есть)*%*%*\s{0,}*пробелы(если есть)*(\D+*не число до числа(если есть)*(?=\d)?)
Изменено: RAN - 18.10.2017 13:08:42
 
RAN, спасибо, а зачем скобки и знаки вопроса (с равенством и без) - это как-то определяет границы или разбивает на части?
С основными операторами чисел, букв и знаков препинания более-менее знаком… Больше спрашивать не буду, а то Виктор заругает  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
RAN, ещё раз спасибо! Может кто-то сможет подсказать, как можно дополнить формулу массива от [USER=64145]Bema, чтоб формула не выводила ЦИФРЫ и %, только ТЕКСТ
Код
=СЖПРОБЕЛЫ(ЕСЛИОШИБКА(СЦЕПИТЬ(МАКС(ЕСЛИОШИБКА(1*ПСТР(ПОДСТАВИТЬ(A2&1;"%";"  ");СТРОКА($1:$100);3);0))

,
 
RAN, я прошу прощения. Если вас не затруднит, можете измененный макрос вставить в файл. Я что-то не так делаю, выдаёт ошибку.
 
А что там не так вставить можно?
 
когда руки не от туда, тогда всё может быть ))) RAN спасибо, очень помогли.
Страницы: 1
Наверх