2014-08-28 103 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 
     }            
    }