2014-08-28 106 views
-1

我有一个电子表格,其中很多单元格乘以CONSTANT值并添加并且结果(SOLL)与预期(IST)值不同并且我能够找到的唯一方法是每次CONSTANT值直到SOLL和IST相等时,进行10次迭代修改。 我的方法看起来太傻,我只是提出一个既美丽又聪明的方式来解决它......解决函数更好的解决方案

感谢

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

也许你想要什么,假设你的“大量细胞”是A1: A10和IST值是E1是:

=E1/sum(A1:A10) 

但请注意标签wiki

0

感谢,最初是由简单的方法惊讶和我检查:

10值及其加成给出例如= 10(总和(A1:A10)) 的IST值,我想有是500(E1)

E1 /总和(A1:A10)= 500/10 = 50 = C(COSTANTE)

E1 = SUM(A1:A10)Xç

如果我乘每个A(y)的值为50,我有500个,所提出的公式完全可以工作

但我忘了提及,A(Y)的值的公式包括已经我COSTANTE这意味着,在现实中每个A(y)的值是含有C

E1 = SUM一个式(A (Y)X C)Xç

a)用于这个原因提出的解决方案没有给出所需要的值,并且我不得不重复计算ca.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 
     }            
    }