Зацикливание функции в Google Sheets - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь перейти с Microsoft Excel на листы Google, чтобы компания работала с любой рабочей станции.

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

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

Я сделал это легко в VBA, но мне трудно делать это в Goole Sheets.

Пока код в Google Sheets делает следующее:

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

Вот как выглядит мой код:

function myFunction() {
  var pr = SpreadsheetApp.openById("my spreadsheet"); 
  var sheet = pr.getSheetByName("sheet1");
  var sheet1 = pr.getSheetByName("sheet1");
  var cell = sheet.getRange('J3:J95');
  var cell1 = sheet1.getRange('C3:C1125');

  if(cell1.getValue()===cell.getValue()) { 
   cell1.offset(0, 2).setValue(cell1.offset(0, 2).getValue() + cell.offset(0, 1).getValue())
  }  
}

Как сделать это добавочное значение только для одной соответствующей ячейки, а не для всего диапазона?

1 Ответ

0 голосов
/ 13 марта 2020

Этого можно добиться, используя циклы for:

Пример:

Перед запуском сценария : Before running function

Сценарий:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var keys = sheet.getRange('A1:A5').getValues();
  var values = sheet.getRange('B1:B5');

  for (var i = 0; i < keys.length; i++){
    isMatch(keys[i], values);
  }

}

function isMatch(key, values) {
  for(var i=0; i< values.getNumRows(); i++){
    var sample = values.getValues()[i];
    if (key[0] == sample[0]) {
      values.getCell(i+1, 1).offset(0,1).setValue(values.getCell(i+1, 1).offset(0,1).getValue()+key[0]);
    }
  }
}

После запуска сценария : enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...