J'ai travaillé dessus toute la matinée et j'ai vu des preuves de ce que les non-réponses ci-dessus discutent. Senseful et je veux tous les deux l’ADRESSE de la cellule transmise, pas la valeur. Et la réponse est très facile. Cela ne peut pas être fait.
J'ai trouvé des solutions de contournement qui consistent à déterminer quelle cellule contient la formule. Il est difficile de dire si cela aurait aidé Senseful ci-dessus. Alors qu'est-ce que je faisais?
The data.
[A] [B] [C] [D] [E] [F] [H]
[1] Name Wins Losses Shots Points Fouls Most recent
WL Ratio
[2] Sophia 4 2 15 7 1 0
[3] Gloria 11 3 11 6 0 0
[4] Rene 2 0 4 0 0 0
[5] Sophia 7 4 18 9 1 1.5
La colonne H est celle de Sophia (Victoires - PrevWins) / (Pertes - PrevLosses)
(7 - 4) / (4 - 2) = 1,5
Mais nous ne savons pas dans quelle ligne Sophia était précédemment apparue.
Tout peut être fait en utilisant VLOOKUP si vous codez en dur A comme colonne de nom. Après VLOOKUP, je récupérais des caractères #NA (nom introuvable) et # DIV0 (dénominateur zéro) et je les enveloppais avec = IF (IF (...)) pour afficher un texte plus agréable dans ces conditions. J'avais maintenant une expression monstrueusement grande qui était difficile à manier et à maintenir. Je voulais donc une expansion des macros (n'existe pas) ou des fonctions personnalisées.
Mais quand j'ai créé un assistant SubtractPrevValue (cellule), il recevait "7" au lieu de B5. Il n'y a pas de moyen intégré pour obtenir des objets de cellule ou de plage à partir des arguments transmis.
Si je fais entrer manuellement le nom de la cellule entre guillemets, je peux le faire ... SubtractPrevValue ("B5"). Mais ce sont vraiment les ischio-jambiers copier / coller et les caractéristiques relatives des cellules.
Mais ensuite j'ai trouvé une solution de contournement.
SpreadsheetApp.getActiveRange () EST LA CELLULE qui contient la formule. C'est tout ce que j'avais vraiment besoin de savoir. Le numéro de la ligne. La fonction suivante prend un numéro de colonne NUMERIC et soustrait l'occurrence précédente de cette colonne.
function SubtractPrevValue(colNum)
{
var curCell = SpreadsheetApp.getActiveRange();
var curSheet = curCell.getSheet();
var curRowIdx = curCell.getRowIndex();
var name = curSheet.getRange(curRowIdx, 1).getValue(); // name to match
var curVal = curSheet.getRange(curRowIdx, colNum).getValue();
var foundRowIdx = -1;
for (var i=curRowIdx-1;i>1;i--)
{
if (curSheet.getRange(i, 2).getValue() == name)
{
return curVal - curSheet.getRange(i, colNum).getValue();
}
}
return curVal; //default if no previous found
}
Mais ensuite, j'ai découvert que c'était vraiment TRÈS lent. Un délai de une et deux secondes s’affiche alors que le message "Thinking" (Penser ...) me ramène à la formule de feuille de calcul massivement illisible et impossible à maintenir.