#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),)))
Комментарии:
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. Теперь работает отлично! Спасибо.