我有一个电子表格,其中许多单元格与CONSTANT值相乘并添加,结果(SOLL)与预期(IST)值不同,我能够找到的唯一方法是修改10次迭代每次CONSTANT值直到SOLL和IST相等。 我的方法看起来太愚蠢了,我只是想用一种漂亮而聪明的方法来解决它......
感谢
function costante()
{
var ss = SpreadsheetApp.getActiveSpreadsheet(); //spreadsheet "options"
SpreadsheetApp.setActiveSheet(ss.getSheets()[0]); //sheet nr.1
var sheet = SpreadsheetApp.getActiveSheet();
for(var i=0; i<10; i++){
var dataRange = sheet.getRange("o5:o5"); //marge ist
var mist = dataRange.getValues();
var dataRange = sheet.getRange("o4:o4"); //marge soll
var msoll = dataRange.getValues();
var dataRange = sheet.getRange("n1:n1"); //costante
var costante = dataRange.getValues();
var minus = 1;
if(mist - msoll < 0) { minus = -1};
costante = mist / msoll * minus * costante;
sheet.getRange("n1:n1").setValues([[costante]]);}
}
答案 0 :(得分:0)
答案 1 :(得分:0)
谢谢,我首先对这个简单的方法感到惊讶,然后我检查了它:
10个值及其加法例如= 10(sum(a1:a10)) 我想要的IST值是500(E1)
E1 / sum(A1:A10)= 500/10 = 50 = C(COSTANTE)
E1 =总和(A1:A10)x C
如果我将每个A(y)值乘以50,我有500并且建议的公式将完美地工作
但是我忘了提到A(y)的值是已包含我的COSTANTE的公式,这意味着实际上每个A(y)值都是包含C的公式
E1 =总和(A(y)x C)x C
a)因为这个原因所提出的解决方案没有给出所需的价值,我不得不重复计算10次
b)我还添加了1秒的延迟,因为我不确定电子表格是否能够如此快速地计算(请告诉我是否有必要)
c)我说如果结果是预期值+/- 2,则停止计算
它有效,但仍然不美观......
function costante()
{
var ss = SpreadsheetApp.getActiveSpreadsheet(); //spreadsheet "options"
SpreadsheetApp.setActiveSheet(ss.getSheets()[0]); //sheet nr.1
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange("o5:o5"); //marge ist
var mist = dataRange.getValues();
for(var i=0; i<20; i++)
{
var dataRange = sheet.getRange("o4:o4"); //marge soll
var msoll = dataRange.getValues();
var dataRange = sheet.getRange("n1:n1"); //costante
var costante = dataRange.getValues();
var diff = msoll - mist;
if(diff < -2) { costante = costante * 1.005;}
else if (diff > 2) { costante = costante * 0.995;}
else {return;}
sheet.getRange("n1:n1").setValues([[costante]]);
Utilities.sleep(1000); //wait 1.5sec
}
}