Выполнять математические операции над числом без изменения прикрепленного текста

Мне нужна формула, которая может умножать или делить все числа в строке без изменения текста, прикрепленного к числам.

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

Я пробовал использовать комбинацию REGEXMATCH и REGEXEXTRACT, и, делая это, я просто получаю результат умножения/деления всех чисел в строке (без текста).

У меня также не получилось использовать REGEXREPLACE. Я даже не уверен, что мы действительно можем использовать его в этом случае, и, возможно, вместо этого мне нужна другая формула. Может быть, вам сначала нужно извлечь числа, умножить их и использовать что-то вроде TEXTJOIN или CONCATENATE, чтобы объединить их в строку с уже измененными значениями, и возможно ли это вообще в этом конкретном примере? Совершенно нормально выполнять операцию в несколько шагов, если это необходимо (например, добавить функцию SPLIT или что-то в этом роде), но формат исходных данных, которые нам нужно ввести и пересчитать, к сожалению, нельзя изменить.

Примерную таблицу для лучшей визуализации можно увидеть ниже. Любая помощь будет принята с благодарностью!

Необработанные данные Операция Желаемый результат 25STR/40DEX/70FRES *0,25 6.25STR/10DEX/17.5FRES 80VIT/30INT/50CRES *0,75 60STR/22.5INT/37.5CRES 60VIT/20STR/45LRES *1,25 75VIT/25STR/56.25LRES
Стоит ли изучать 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
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете попробовать:

=byrow(index(bycol(split(A2:A,"/"),lambda(z,ifna(ifs(left(B2:B,1) = "*",regexextract(z,"\d+")*mid(B2:B,2,99),left(B2:B,1) = "/",round(regexextract(z,"\d+")/mid(B2:B,2,99),2))&regexextract(z,"\d+(.*)"))))),lambda(y,if (y = "",,join("/",y))))

Большое спасибо, это сработало! У меня есть еще один вопрос. Я должен был упомянуть об этом в исходном сообщении, поэтому я уже принял предложенное решение, но мне интересно, есть ли простой способ выполнить операцию только в одной ячейке (в данном случае без столбца B)? как на этой картинке

Oldy 12.02.2023 08:33

В вашем случае, как мы собираемся предоставить эти значения столбца B в формулу для расчетной части?

rockinfreakshow 12.02.2023 09:37

Идея в том, что расчеты должны работать с любыми значениями, которые можно было задать прямо в формуле. Но просто чтобы проверить, работает ли это, мы можем использовать значения из оригинального поста: B2 = A2 * 0,25, B3 = A3 * 0,75 и т. д.

Oldy 12.02.2023 10:34

хорошо, если мы жестко закодируем значения непосредственно в формулу; вы можете попробовать это для строки 2 в примере данных =join("/",bycol(split(A2,"/"),lambda(z,regexextract(z,"\d+")‌​*0.25&regexextract(z‌​,"\d+(.*)"))))

rockinfreakshow 12.02.2023 10:40

Очень извиняюсь за еще один вопрос, а есть ли еще способ модифицировать формулу, чтобы результат умножения при необходимости округлялся на заданный параметр, например до ближайших 10 через ОКРУГЛ или подобную функцию ? Я пытался сделать это сам, но, похоже, я не смог найти правильный порядок и получил следующую ошибку: «Параметр 1 функции ОКРУЖЕНИЕ ожидает числовые значения. Но «х» — это текст, и его нельзя привести к числу. " или какие-то ошибки, связанные с самой функцией LAMBDA.

Oldy 12.02.2023 12:45

это: =join("/",bycol(split(A2,"/"),lambda(z,mround(regexextract(z‌​,"\d+")*0.25,10)&reg‌​exextract(z,"\d+(.*)‌​"))))

rockinfreakshow 12.02.2023 12:49

Круто, спасибо за помощь! Эта формула работает как шарм!

Oldy 12.02.2023 13:16

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