Для каждой ячейки в заданном диапазоне проверьте, содержит ли она строку поиска, и верните подстроку, удалив строку поиска.

У меня есть электронная таблица Google со значениями, которые помечены в ячейке, но не совпадают от столбца к столбцу.

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

Пример данных:

Param,Param2,Param3
foo:1,bah:31,height:6
price:9,help:62,
height:9,slot:4,цена:6

Пример результата:

Param,Param2,Param3,price
foo:1,bah:31,height:6,
price:9,help:62,,9
высота:9,слот:4,цена:6,6

function extractValueFromRange(MatchString,myRange) {
  // Get the cells in range to be tested 
  var elements = myRange.

  // Loop through the cells
  // Prefer to use foreach... if possible 
  for (var i = 0; i < elements.length; i++) {

    // Get cell string to be tested
    var element = elements[i-1];

    // Test if the MatchString is found
    if(element.indexOf(SearcchString)>-1){

      // Take out the MatchString
      var myResult = SUBSTITUTE(element,MatchString,"",1);
      // Return the result
      return myResult;
    }

    // if no match found return nothing
    return null; 
  }

person VikingMage    schedule 17.11.2015    source источник
comment
Основной лист, на котором я хочу использовать это, имеет диапазон столбцов (A: EJ), поэтому я хочу использовать скрипт, а не функцию листа.   -  person VikingMage    schedule 19.11.2015


Ответы (2)


Я думаю, вы можете управлять этим по формуле прямо в электронной таблице.

Ниже показано, как извлечь значение после ":", но до ","

Текст |Результат | Формула

Парам,Парам2,Парам3,цена | #ССЫЛКА! | =индекс(разделить(REGEXEXTRACT(A2;"цена:[0-9]*");":");2)

foo:1,bah:31,высота:6 | #ССЫЛКА! | =индекс(разделить(REGEXEXTRACT(A3;"цена:[0-9]*");":");2)

цена:93,справка:62, | 93 | =индекс(разделить(REGEXEXTRACT(A4;"цена:[0-9]*");":");2)

высота:9,слот:4,цена:6 | 6 | =индекс(разделить(REGEXEXTRACT(A5;"цена:[0-9]*");":");2)

person St3ph    schedule 17.11.2015
comment
Это полезно знать, но я должен использовать в более широких диапазонах... например, G1: EJ1. Я не хочу объединять столько ячеек. - person VikingMage; 19.11.2015

=REGEXEXTRACT(объединение(";",A1:EJ1),"цена:(\d+);")

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

Само регулярное выражение извлекает только значение между ценой слова и точкой с запятой и указывает, что это может быть число из 1 или более символов любой длины.

person Aurielle Perlmann    schedule 03.12.2015