2015-11-10 1 views
1

В SQL Server MIN и MAX могут работать с текстом, который не оценивает число, возвращая текстовый элемент с самым низким или самым высоким порядком сортировки текста или, как известно, в SQL Server- говорить, «порядок сортировки».MIN/MAX в порядке сортировки текста

Можно ли это сделать в Excel, не обращаясь к UDF, который действительно сортируется?

Например, для MIN («bb», «aa», «cc») для возврата «aa» и MAX («bb», «cc», «aa») для возврата «cc».

Excel MIN/MAX игнорирует текст, и хотя MINA/MAXA может работать над текстом, они разбивают текст, который не разрешает число. LARGE/SMALL тоже этого не делают.

FWIW, сотрудник спросил меня, как это сделать в стержне. Я не вижу пути, не обращаясь к пользовательской функции. Я ошибаюсь?

ответ

2

Эта формула массивов выглядит многообещающей. так как это массив, который нужно ввести с помощью ctrl-shift-enter.

Макс:

=INDEX(A2:A6,MATCH(0,COUNTIF(A2:A6,">"&A2:A6),)) 

Min:

=INDEX(A2:A6,MATCH(0,COUNTIF(A2:A6,"<"&A2:A6),)) 

Измените три диапазона на то, что вы хотите.

+0

Очень круто, тианки! :-) –

1

Я считаю, что вы правы, пользовательская функция лучше. Хорошо отметить, что обычные операторы компаратора работают так же, как вы описали.

Public Function MinStr(ByVal strVal As Range) As String 
    Dim i As Integer 
    Dim cell As Range 
    MinStr = "" 

    'Check to make sure the range is not empty 
    if strVal.Rows.Count > 0 then 
     'Initialize MinStr to a known value 
     MinStr = strVal.cells(1,1).Value 

     'Iterate through the entire range 
     For Each cell in strVal.Cells 
      if(MinStr > cell.Value) then 
       MinStr = cell.Value 
      end if 
     Next cell 
    end if 
End Function 

Public Function MaxStr(ByVal strVal As Range) As String 
    Dim i As Integer 
    Dim cell As Range 
    MaxStr = "" 

    'Check to make sure the range is not empty 
    if strVal.Rows.Count > 0 then 
     'Initialize MaxStr to a known value 
     MaxStr = strVal.cells(1,1).Value 

     'Iterate through the entire range 
     For Each cell in strVal.Cells 
      if(MaxStr < cell.Value) then 
       MaxStr = cell.Value 
      end if 
     Next cell 
    end if 
End Function 
+0

Не понравилось, что «ввод» используется как имя переменной, когда я его пробовал, иначе отлично, +1, если его можно отредактировать. –