Получите минимальное значение для каждого типа из несортированного набора данных с несколькими типами, используя формулу Google Sheets

#google-sheets #google-sheets-formula

#google-sheets #google-sheets-formula

Вопрос:

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

 a_3;b_2;c_4;c_5;b_2;a_1;a_7;b_9
  

В col B у меня есть только идентификаторы типов данных, перечисленные следующим образом:
a; b; c

В col C я изо всех сил пытаюсь написать формулу, которая возвращала бы минимальное числовое значение для каждого из соответствующих типов данных в col B.

Итак, как указано выше, значения равны a_3; a_1; a_7, таким образом, минимальное значение для ‘a’ равно «1». Аналогично, минимум для ‘b’ равен «2», а минимум для ‘c’ равен «4».

Таким образом, возвращаемое значение, которое будет отображаться в Col C, будет: 1; 2; 4

Я написал ARRAYFORMULA , который создает 2d-массив, где его первая строка содержит только значения ‘a’, вторая строка имеет только значения ‘b’, а третья строка имеет значения ‘c’. например

 3 1 7
   2 2 9
      4 5
  

Но я понятия не имею, как я могу передать каждую отдельную строку MIN функции (которая сама должна была бы находиться внутри какой-то формулы массива, которая выполняла бы итерацию по вышеуказанному массиву по одной строке за раз).

Возможно, это ошибочный подход, и мне нужно подумать о решении по-другому.

подводя итог:

 Col A                                Col B      Col C
a_3;b_2;c_4;c_5;b_2;a_1;a_7;b_9      a;b;c      1;2;4
  

Мне нужна формула для получения результата в Col C.

Вот пример таблицы:https://docs.google.com/spreadsheets/d/1k1K7_msW8Jd_9-18zKdgdFKsSSYrRLtYjTLolQsAVjQ/edit#gid=0

Ответ №1:

 =TEXTJOIN(";",1,ARRAYFORMULA(IFERROR(VLOOKUP(TRANSPOSE(SPLIT(B2,";")),
 SORTN({REGEXEXTRACT(TRANSPOSE(SPLIT(A2,";")),"[A-Za-z] "),
 REGEXEXTRACT(TRANSPOSE(SPLIT(A2,";")),"d ")},COUNTA(TRANSPOSE(SPLIT(A2,";")))),2,0),)))
  

0

Комментарии:

1. Я начинаю читать ссылки, которые вы оставили в таблице примеров. На данный момент, если я изменю свои идентификаторы типов на следующие «01_0» или «01_1» или «06_0» и т.д., За которыми следует символ «>», за которым следуют мои числовые значения (которые я хотел бы отформатировать как «000»), я вижу, что [A-Za-z] больше не работает, потому что очевидно, что это касается только «букв». Есть ли простое изменение в этом [], заключенном в квадратные скобки, чтобы разрешить разделение, но с использованием комбинации числа и подчеркивания? (имейте в виду, я стараюсь убедиться, что мои идентификаторы типов данных всегда имеют одинаковую ширину, если это помогает).

2. =ArrayFormula({REGEXEXTRACT(TRANSPOSE(SPLIT(F34,";")),"d _d "), SUBSTITUTE(REGEXEXTRACT(TRANSPOSE(SPLIT(F34,";")),">d "),">","")})

3. У меня проблемы. Оказывается, ваш код не совсем работает. Я попытался изменить значение в примере листа с этого a_2; a_3; b_5; a_5;b_7 на это a_2; a_3; b_5; a_5; b_1. Я ожидал, что минимальное значение для «b» изменится с 5 на 1, но этого не произошло.

4. =TEXTJOIN(";",1,ARRAYFORMULA(IFERROR(VLOOKUP(TRANSPOSE(SPLIT(B3,";")), SORTN({REGEXEXTRACT(TRANSPOSE(SPLIT(A3,";")),"[A-Za-z] "), REGEXEXTRACT(TRANSPOSE(SPLIT(A3,";")),"d ")},COUNTA(TRANSPOSE(SPLIT(A3,";")))),2,0),)))

5. Теперь работает отлично! Спасибо.