Google Таблицы - выполнять математические операции после извлечения числовых данных из строк с определенным текстом

Мне нужна формула, выполняющая определенную математическую операцию, но только с числом, удовлетворяющим определенным условиям. В данном случае – с числами, извлеченными из строк с определенным текстом в них.

В первом столбце у нас есть необработанные данные: строка с разными числами и текст, разделенный символом подчеркивания. Мне нужно разбить эти данные на несколько разных строк и использовать для этого следующую формулу: =ТРАНСП(РАЗДЕЛИТЬ(A3,"_"))

Следующий столбец должен содержать только числа, но проблема в том, что одно из этих чисел (которое в данном конкретном примере содержит «tb») должно быть разделено или умножено на определенное число (в данном случае умножено на 1000).

Я пробовал следующую формулу, которая работает только до тех пор, пока нет "tb" или если она находится в самом начале строки: =IF(REGEXMATCH(A6,"tb"),REGEXEXTRACT(A6,"(\d+ )tb")*1000,REGEXEXTRACT(B6,"(\d+)"))

Если оно находится где-то в середине или в конце строки, только первое число по-прежнему подвергается математической операции. Интересно, есть ли способ добиться желаемого результата, не прибегая к сложным формулам (я очень новичок в этом и в идеале хотел бы использовать формулы, которые я могу понять и легко модифицировать для других подобных задач). Примерную таблицу для лучшей визуализации можно увидеть ниже. Заранее спасибо!

Необработанные данные Разделить данные Извлеченные числа (что я получаю) Желаемый результат 5ТБ_200ГБ_300МБ 5 ТБ 5000 5000 200 ГБ 200 200 300мб 300 300 2ТБ_500ГБ_50МБ 2 ТБ 2000 г. 2000 г. 500 ГБ 500 500 50мб 50 50 500 ГБ_50 МБ_2 ТБ 500 ГБ 2000 г. 500 50мб 50 50 2 ТБ 2 2000 г.

актуален вопрос «превратить текстовую строку в общее количество мегабайт»?

MattKing 18.11.2022 20:51

Нет, это был просто пример, никакой логики. :) Я просто хочу извлечь все числа, как они есть, из большинства строк и умножить (разделить и т. д.) на те, которые содержат определенный текст - не нужно суммировать их с другими числами.

Oldy 18.11.2022 20:55

вот электронная таблица, созданная специально для этого вопроса, вставьте некоторые реальные данные и ожидаемый результат, и, возможно, люди смогут помочь легче. docs.google.com/spreadsheets/d/…

MattKing 18.11.2022 20:57

Приведите реальный пример и проверьте столбец «Желаемый результат». Похоже, только последняя 2tb строка превращается в 2000? А как насчет 5tb в первом? Я думал, что вы просто хотите умножить ТБ на 1000, но это не отразилось на вашем результате. Если вы посмотрите этот снимок экрана, вы увидите, что, исправив ссылку в последнем regexextract, вы получите желаемый результат tb=1000, но я не уверен, является ли это вашим настоящим намерением или как на самом деле выглядит ваша таблица. .

Daniel 18.11.2022 22:59

@ Даниэль, ой, мой плохой, и спасибо, что указали на это! В моей таблице примеров действительно есть ошибка (уже исправлена). И да, я попробовал ваши предложения, и это сработало как шарм, большое спасибо!

Oldy 19.11.2022 05:16
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте не помещать tb в первый REGEXEXTRACT:

=IF(REGEXMATCH(A6,"tb"),REGEXEXTRACT(A6,"(\d+)")*1000,REGEXEXTRACT(B6,"(\d+)"))

РЕДАКТИРОВАТЬ

Вариант 2: извлечь числа, стоящие перед "tb"

=IF(REGEXMATCH(A6,"tb"),REGEXEXTRACT(A6,"(\d+)tb")*1000,REGEXEXTRACT(B6,"(\d+)"))

У меня работает точно так же - нет проблем, если «tb» идет первым, но не работает должным образом, например, если оно где-то посередине (вместо этого умножается первое число и не умножается значение с текстом «tb» ).

Oldy 18.11.2022 21:11

Вероятно, REGEXMATCH не работает. Если он возвращает значение без умножения, вероятно, потому, что REGEXMATCH возвращает False. Попробуйте загрузить реалистичный образец

Martín 18.11.2022 21:22

@Oldy, посмотри на редактирование, чтобы увидеть, работает ли оно для тебя.

Martín 18.11.2022 23:49

спасибо! Это не сработало, когда я просто скопировал и вставил его, но затем я проверил формулу, предложенную Даниэлем, и она сработала как по маслу. Это в основном то же самое решение, которое вы предложили, просто нужно немного его скорректировать - должно быть так для этой конкретной строки: =IF(REGEXMATCH(B6,"tb"),REGEXEXTRACT(B6,"(\d+)tb")*1000 ,REGE‌​XEXTRACT(B6,"(\d+)")‌​) Ваши ответы тоже очень помогли, большое спасибо!

Oldy 19.11.2022 05:20

Да, вы были правы, я попробовал это в другой ячейке в своей электронной таблице, и результат не изменился. Я рад, что вы смогли разобраться!

Martín 19.11.2022 05:23

Другие вопросы по теме