Estive trabalhando nisso a manhã toda e vendo evidências do que discutem as não respostas acima. Sensuous e eu quero o endereço da célula passada, não o valor. E a resposta é muito fácil. Isso não pode ser feito.
Encontrei algumas soluções alternativas que dependem de descobrir qual célula contém a fórmula. É difícil dizer se isso teria ajudado o Senseful acima. Então o que eu estava fazendo?
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
A coluna H é de Sophia (Vitórias - PrevWins) / (Perdas - PrevLosses)
(7 - 4) / (4-2) = 1,5
Mas não sabemos em que linha Sophia apareceu anteriormente.
Tudo isso pode ser feito usando o VLOOKUP se você codificar A como a coluna de nome. Após o VLOOKUP, eu estava obtendo alguns #NA (nome não encontrado) e # DIV0 (denominador zero) e o envolvi com = IF (IF (...)) para mostrar um texto mais palatável nessas condições. Agora eu tinha uma expressão monstruosamente grande que era pesada e insustentável. Então, eu queria expansão de macro (não existe) ou funções personalizadas.
Mas quando eu criei um auxiliar SubtractPrevValue (cell), ele estava recebendo "7" em vez de B5. Não há uma maneira interna de obter objetos de célula ou intervalo dos argumentos passados.
Se eu fizer o usuário digitar manualmente o nome da célula entre aspas duplas, poderá fazê-lo ... SubtractPrevValue ("B5"). Mas isso realmente isquiotibiais copiar / colar e características relativas da célula.
Mas então eu encontrei uma solução alternativa.
SpreadsheetApp.getActiveRange () É A CÉLULA que contém a fórmula. Isso é tudo que eu realmente precisava saber. O número da linha. A função a seguir pega um número de coluna NUMERIC e subtrai a ocorrência anterior nessa coluna.
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
}
Mas então eu descobri que isso é realmente muito lento. Atrasos de um e dois segundos enquanto exibe "Pensando ..." Então, estou de volta à fórmula da planilha maciçamente ilegível e impossível de manter.