Bütün sabah bunun üzerinde çalıştım ve yukarıdaki cevapların ne olduğunu tartıştığını gösteren kanıtlar gördüm. Mantıklı ve her ikisi de değeri değil, geçen hücrenin ADRESİ'ni istiyorum. Ve cevap çok kolaydır. Bu yapılamaz.
Hangi hücrenin formülü içerdiğini bulmaya dayanan bazı geçici çözümler buldum. Bunun yukarıdaki Mantıklı'ya yardımcı olup olmadığını söylemek zor. Peki ben ne yapıyordum?
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
H Sütunu Sophia'nın (Kazananlar - PrevWins) / (Kayıplar - PrevLosses)
(7 - 4) / (4-2) = 1.5
Fakat Sophia'nın daha önce hangi sırada göründüğünü bilmiyoruz.
Bu, isim sütunu olarak A kodunu girerseniz VLOOKUP kullanılarak yapılabilir. VLOOKUP'tan sonra bazı durumlarda #NA (isim bulunamadı) ve # DIV0 (sıfır değeri) alıyordum ve bu koşullarda daha lezzetli metinler göstermek için = IF (IF (...)) ile sardım. Şimdi hantal ve sürdürülemeyen bir canavarca büyük ifade vardı. Bu yüzden makro genişlemesi (mevcut değil) veya özel fonksiyonlar istedim.
Ama bir yardımcı SubtractPrevValue (hücre) yaptığımda, B5 yerine "7" alıyordu. İletilen bağımsız değişkenlerden hücre veya aralık nesneleri almanın yerleşik bir yolu yoktur.
Kullanıcının hücre adını çift tırnak işareti ile girmesini sağlarsam, bunu yapabilirim ... SubtractPrevValue ("B5"). Ama bu gerçekten hamstrings kopyala / yapıştır ve bağıl hücre özellikleri.
Ama sonra bir geçici çözüm buldum.
SpreadsheetApp.getActiveRange () formülü içeren hücredir. Bilmem gereken tek şey bu. Satır numarası Aşağıdaki işlev bir NUMERIC sütun numarası alır ve bu sütunda önceki oluşumunu çıkarır.
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
}
Ama sonra bunun gerçekten gerçekten yavaş olduğunu keşfettim. "Düşünme ..." ifadesini görüntülerken bir veya iki saniye gecikme var, bu yüzden büyük ölçüde okunaksız, sürdürülemez bir çalışma sayfası formülüne geri döndüm.