SOLVE功能更好的解决方案

时间:2014-08-28 10:13:12

标签: google-sheets

我有一个电子表格,其中许多单元格与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]]);}

}

2 个答案:

答案 0 :(得分:0)

也许你想要的,假设你的“很多单元格”在A1:A10中,而IST值在E1中是:

=E1/sum(A1:A10)  

但请注意标记wiki

答案 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
      }                                              
   }