2014-08-28 2 views
-1

J'ai une feuille de calcul où beaucoup de cellules sont multipliées avec une valeur CONSTANTE et ajoutées et le résultat (SOLL) diffère de la valeur attendue (IST) et la seule façon que j'ai pu trouver, était de Faire 10 itérations en modifiant chaque fois que la valeur CONSTANTE jusqu'à SOLL et IST sont assez égales. Ma méthode semble trop stupide et je vous demande simplement une belle et intelligente manière de le résoudre ...SOLVE fonction meilleure solution

grâce

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]]);} 

} 

Répondre

0

Peut-être ce que vous voulez, en supposant que votre « beaucoup de cellules » sont en A1: A10 et la valeur IST est en E1 est:

=E1/sum(A1:A10) 

, mais s'il vous plaît noter la balise wiki.

0

merci, je fus d'abord surpris par la méthode simple et je l'ai vérifié:

10 valeurs et leur addition donne par exemple = 10 (somme (a1: a10)) la valeur IST que je voudrais avoir est 500 (E1)

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

E1 = Sum (A1: A10) x C

si je multiplier chaque A (y) valeur avec 50, j'ai 500 et la formule proposée serait parfaitement fonctionner

MAIS oublié de mentionner que les valeurs de A (y) sont des formules qui comprennent déjà ma COSTANTE cela signifie que, en réalité, chaque A (y) la valeur est une formule qui contient C

E1 = Sum (A (y) x C) x C

a) pour cette raison, la solution proposée ne donne pas la valeur nécessaire, et je fus obligé de répéter les temps de calcul de cA.10

b) J'ai aussi ajouté un retard de 1 seconde parce que je ne savais pas si la feuille de calcul est capable de calculer si vite (s'il vous plaît dites-moi si c'est nécessaire)

c) et je l'ai dit que si le résultat est de +/- 2 de valeur attendue, pour arrêter de calculer

Il fonctionne, mais est toujours pas belle ...

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 
     }            
    } 
Questions connexes