मैं पूरी सुबह इस पर काम कर रहा हूं और उपरोक्त गैर-उत्तरों पर चर्चा करने के साक्ष्य देख रहा हूं। समझदार और मैं दोनों पारित सेल का ADDRESS चाहते हैं, मूल्य नहीं। और जवाब बहुत आसान है। यह नहीं किया जा सकता है।
मुझे कुछ वर्कअराउंड मिले जो इस बात पर भरोसा करते हैं कि किस सेल में सूत्र है। यह कहना मुश्किल है कि क्या इससे सेंसेफुल को ऊपर लाने में मदद मिली होगी। तो मैं क्या कर रहा था?
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
कॉलम एच सोफिया है (जीत - प्रीविंस) / (हानियाँ - प्रीवॉल्स)
(7 - 4) / (4 - 2) = 1.5
लेकिन हम यह नहीं जानते हैं कि सोफिया पहले किस पंक्ति में दिखाई देती थी।
यह सब VLOOKUP का उपयोग करके किया जा सकता है यदि आप नाम कॉलम के रूप में हार्ड-कोड ए रखते हैं। VLOOKUP के बाद, मुझे कुछ #NA (नाम नहीं मिला) और # DIV0 (भाजक शून्य) मिल रहा था और इन स्थितियों में अधिक तालमेल दिखाने के लिए इसे = IF (IF (...)) के साथ लपेटा गया था। अब मेरे पास एक राक्षसी रूप से बड़ी अभिव्यक्ति थी जो अनिच्छुक और गैर-बनाए रखने योग्य थी। इसलिए मैं स्थूल विस्तार चाहता था (अस्तित्व में नहीं है), या कस्टम फ़ंक्शन।
लेकिन जब मैंने एक सहायक घटावप्रेववैल्यू (सेल) बनाया, तो यह बी 5 के बजाय "7" प्राप्त कर रहा था। पारित तर्कों से सेल या रेंज ऑब्जेक्ट प्राप्त करने का कोई अंतर्निहित तरीका नहीं है।
यदि मैं उपयोगकर्ता को दोहरे उद्धरणों में सेल नाम देता हूं, तो मैं यह कर सकता हूं ... सबप्रैक्टप्रवेलव्यू ("बी 5")। लेकिन यह वास्तव में हैमस्ट्रिंग कॉपी / पेस्ट और रिश्तेदार सेल विशेषताएं हैं।
लेकिन फिर मुझे एक वर्कअराउंड मिला।
स्प्रेडशीटApp.getActiveRange () वह CELL है जिसमें सूत्र है। मुझे बस इतना ही जानना चाहिए। पंक्ति संख्या। निम्न फ़ंक्शन एक NUMERIC स्तंभ संख्या लेता है और उस स्तंभ में पिछली घटना को घटाता है।
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
}
लेकिन तब मुझे पता चला कि यह वास्तव में बहुत धीमी है। एक और दो सेकंड की देरी, जबकि यह "थिंकिंग ..." प्रदर्शित करता है, इसलिए मैं बड़े पैमाने पर गैरकानूनी, अचिन्त्य पत्र पत्रक सूत्र पर वापस आ गया हूं।