Использование именованных рангов в листах Google в качестве переменных в пользовательских формулах - PullRequest
0 голосов
/ 02 апреля 2020

Не уверен, что это будет иметь смысл, но здесь я go.

Я хочу создать формулу, которая не связана непосредственно с ячейкой. Например: если я хочу рассчитать вес для настольной игры, такой как D & D, мне понадобится формула (strengthBonus x 5). Для моей текущей попытки я переименовал range (точнее в ячейку) forceBonus в MOD_STR, поэтому, когда я помещаю формулу = (multiply (MOD_STR, 5), она работает как шарм. Затем я назвал этот диапазон «CARRYWEIGHT» и затем использовал его в другом месте.

То, что я хотел бы сделать, - это создать новую переменную, аналогично тому, как это делает «Определить именованный диапазон», но вместо того, чтобы полагаться на переменные, находящиеся где-то в электронной таблице, которую они будут обрабатывать из внутренняя формула. Например, если я наберу = несущий вес в ячейке, он запустит уравнение = MULTIPLY (MOD_STR, 5) в этой ячейке и выведет ответ. Я ничего не знаю о коде, но только что указали в направлении учебников но я также прошу помощи здесь.

Код, который я пробовал,

function CARRYWEIGHT(MOD_STR){
return MOD_STR*2}

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

Я понятия не имею, откуда отсюда go. * 10 12 *

Спасибо заранее за вашу помощь.

1 Ответ

0 голосов
/ 02 апреля 2020
  • Разница между формулами листов и скриптом приложений заключается в том, что в скрипте приложений вам нужно получить значение диапазона, соответствующего имени именованного диапазона
  • Вы не можете просто умножить имя диапазон (который является строкой!) с числом

Вот пример того, как получить диапазон по имени и выполнить вычисления со значением, сохраненным в нем:

function CARRYWEIGHT(MOD_STR){
  // retrieve all named ranges in the spreadsheet
  var namedRanges = SpreadsheetApp.getActive().getNamedRanges();
  //loop through all the results
  for (var i = 0; i < namedRanges.length; i++){
    var range = namedRanges[i];
    //if the range with the name equal to the value of MOD_STR is found, get the cell content of this range
    if(range.getName()==MOD_STR){
      var value = range.getRange().getValue();
      // perform the calculation with the cell content of the named range
      return value*2;
    }  
  }
}

Из ячейки вызовите функцию как =CARRYWEIGHT("paste here the name of the range of interest"), не забывайте кавычки (если это не ссылка на ячейку)!

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

Ссылки

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