Я пытаюсь найти способ вызвать формулу, использованную в B3 (в настоящее время это простая формула AVERAGE), в G3 и использовать ее там.Зеленые ячейки - это статические значения, используемые для тестирования.Если я сделаю «= B3» в G3, я получу значение из B3, а не то, что я хочу.Я хочу в среднем F3 и H3.В основном, как большой диапазон, обновляемое копирование / вставка или FormulaArray.Если это имеет смысл.Поскольку лист, на котором я буду реализовывать это, будет содержать много примеров формул, я хотел бы иметь возможность изменять их в одном месте и обновлять автоматически, а не копировать / вставлять.Я также буду называть формулы из другого документа.Поэтому я бы хотел метод, с помощью которого я мог бы изменить B3 на формула MULTIPLY, и он автоматически применял бы это изменение к ячейке в столбце G, ссылаясь, конечно, на относительные ячейки.Это вообще возможно?
Я нашел вопрос, задающий что-то похожее на это:
Как получить формулу из ячейки вместо значения?
Но из двух работоспособных решений, CELLFORMULA Рубена удалось вывести функцию в виде строки (как в G5), что близко!А Луис вообще не работал на меня, хотя казалось, что он пытался сделать то, что я хочу.Я возился с этим, но я не мог заставить его работать независимо от того, что я делал.Ни одно из других предложений не сработало вообще.
Вот тестовый лист, который я сделал, чтобы проиллюстрировать то, что я ищу:
Лист теста формулы вызова
Дополнительно:
Как я уже сказал, код Рубена работал идеально так, как кажется, и предполагал, и Луис заявил, что он внес некоторые собственные корректировки, чтобы заставить формулу выполняться в новой ячейке.Но копирование и вставка кода Луиса привели только к ошибкам, и попытка его подстройки была безнадежной, поскольку я только недавно начал заниматься сценариями и кодированием в целом.Я просто приложил все усилия, чтобы сравнить и сопоставить оригинальный код Рубена с измененным кодом Луиса и выявить любые различия, которые могли быть ошибками.Примерно так:
function CELLFORMULA(reference) {
var ss = SpreadsheetApp;
var sheet = ss.getActiveSheet();
var formula = ss.getActiveRange().getFormula();
var re = /cellformula\((.*)\);/g;
var args = re.exec(formula);
try {
var range = sheet.getRange(args[1]);
}
catch(e) {
throw new Error(args[1] + ' is not a valid range');
}
return range.getFormula();
}
Казалось, что, возможно, Луис не вызывал переменные, как Рубен?Я не уверен.Но фундаментальное различие между этими двумя кодами выглядит следующим образом:
var args = formula.match(/=\w+\((.*)\)/i);
в сравнении с тем, что есть у Луиса (без изменений):
re = /cellformula\((.*)\);/g;
args = re.exec(formula);
Мне кажется, что re.exec(формула) был частью кода Луиса, который должен привести к выполнению формулы, а не просто помещать ее в ячейку в виде строки, но я, конечно, могу ошибаться.
Как я уже сказал, я новичок в этом ичасти "(/=\w+((.))/i)" и "/cellformula((.));/g" полностью над моей головой.Я пытался найти этот синтаксис, чтобы лучше понять его, но безуспешно.