Получить максимум значений, разделенных запятыми, в ячейке

В ячейке есть числа, разделенные запятыми. Я хотел бы получить максимальное значение этих чисел.

eg: A1 = "2,5,1,4"

какой должна быть формула в B1, чтобы вернуть значение 5?


person user1495523    schedule 12.03.2015    source источник
comment
Сколько у вас номеров?   -  person user3819867    schedule 12.03.2015
comment
@ user3819867: Какая разница? Вот что делает это интересным!   -  person Jean-François Corbett    schedule 12.03.2015
comment
@ Жан-Франсуа Корбетт: Это будут все больше и больше вложенных функций.   -  person user3819867    schedule 12.03.2015
comment
@ user3819867: Или ... Взгляните на другие ответы.   -  person Jean-François Corbett    schedule 12.03.2015
comment
@ Жан-Франсуа Корбетт: использование VBE. Когда они запрашивают функцию, вы не отвечаете настраиваемой функцией из-за ограничений VBA. Барри Гудини сделал отличный контрпример.   -  person user3819867    schedule 12.03.2015
comment
@ user3819867: Непонятно, о чем вы говорите, но вы говорите, что если OP запрашивает формулу Excel, то формулы, содержащие пользовательские функции, недопустимы? Я не понимаю, как это может быть правдой (если OP явно не указывает это особое требование). Формула, включающая UDF, остается формулой.   -  person Jean-François Corbett    schedule 12.03.2015
comment
Я не исключал этого, просто спросил OP, есть ли у него наборы с низкой численностью, которые могут быть просто решены встроенными функциями Excel, или 6000 наборов элементов, которые не могут быть решены этими решениями. Ваш Кого это волнует? теряет связь с проблемой OP. Он не пометил вопрос excel-vba, поэтому я предполагаю, что он не знаком с ним / не собирается его использовать.   -  person user3819867    schedule 12.03.2015


Ответы (5)


Предполагая, что A1 содержит список положительных целых чисел от 1 до 999, разделенных запятыми, но без пробелов, вы можете использовать эту формулу, чтобы найти наибольшее из присутствующих чисел.

=MATCH(1000,INDEX(FIND(","&ROW(INDIRECT("1:999"))&",",","&A1&","),0))

Это ищет все числа от 1 до 999 и MATCH находит "позицию" последнего (MAX) из тех, которые, поскольку мы начинаем с 1, совпадают с самим числом.

Это работает для любого количества чисел в пределах A1 в любом порядке, если они находятся в указанном формате.

person barry houdini    schedule 12.03.2015
comment
Я предполагаю, что вы имеете в виду ту часть, которая объединяет запятые. Виновен по обвинению! - person barry houdini; 12.03.2015
comment
Вот это да. ROW(INDIRECT("1:999")). Вот это да. Вот это да. - person ttaaoossuuuu; 12.03.2015
comment
это интересное решение. как бы вы изменили это, чтобы получить значение Min? - person wode; 26.05.2018

Здесь вы можете использовать функцию VBA:

Public Function MAXSPLIT(ByVal Text As String, ByVal Delimiter As String) As Double
    Dim TextArray() As String
    TextArray = Split(Text, Delimiter)
    Dim ValueArray() As Double
    ReDim Preserve ValueArray(UBound(TextArray))
    For I = LBound(TextArray) To UBound(TextArray)
        ValueArray(I) = CDbl(TextArray(I))
    Next
    ' You can use any other function here: Average, Min etc.
    MAXSPLIT = WorksheetFunction.Max(ValueArray)
End Function

Работает с любым количеством значений и с любым разделителем. Использование (вы указываете строку значений и разделитель):

=MAXSPLIT("2,5,6,7,8.1,3.254",",")
person ttaaoossuuuu    schedule 12.03.2015

Вы можете проанализировать свои данные, используя запятую в качестве разделителя, а затем взять максимум из полученных пар ячеек, или вы можете применить такую ​​формулу:

=MAX(1*LEFT(A1,FIND(",",A1)-1),1*MID(A1,FIND(",",A1)+1,LEN(A1)))
person pnuts    schedule 12.03.2015
comment
Не могли бы вы предложить такое изменение, чтобы формулу можно было масштабировать для 3 или 4 чисел. - person user1495523; 12.03.2015

К сожалению, в Excel нет встроенной функции SPLIT для разделения строки с использованием заданного разделителя, но вы можете написать быструю оболочку для функции Split VBA:

Public Function SplitXL(ByVal s As String, Optional delim As String = " ") As String()
    SplitXL = Split(s, delim)
End Function

Затем это можно использовать в формулах Excel. Обратите внимание, что он возвращает массив строк; чтобы быть максимальными, эти строки сначала нужно проанализировать как числа с помощью функции VALUE. Это дает массив чисел, с которыми может работать MAX.

Вы можете получить желаемый результат, используя эту формулу массива

=MAX(VALUE(SplitXL(A1,",")))

который, как и любую другую формулу массива, необходимо вводить с помощью Ctrl Shift Enter.

введите описание изображения здесь

person Jean-François Corbett    schedule 12.03.2015

= МАКС (РАЗДЕЛ (A1; ";"))

Максимальное значение из строки csv:

Максимальное значение из строки CSV

person Nina    schedule 23.04.2020