जवाबों:
तो यह समाधान एक स्ट्रिंग को इसके पैरामीटर के रूप में लेता है। यह पाता है कि शीट में कितनी पंक्तियाँ हैं। यह निर्दिष्ट कॉलम में सभी मान प्राप्त करता है। यह शुरू से अंत तक मूल्यों से गुजरता है जब तक कि यह एक मूल्य नहीं पाता है जो एक खाली स्ट्रिंग नहीं है। अंत में यह मूल्य को पीछे कर देता है।
स्क्रिप्ट:
function lastValue(column) {
var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();
for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
return values[lastRow - 1];
}
उपयोग:
=lastValue("G")
संपादित करें:
फ़ंक्शन को स्वचालित रूप से अपडेट करने के लिए कहने वाली टिप्पणी के जवाब में:
सबसे अच्छा तरीका है कि मैं ऊपर दिए गए कोड के साथ इसका उपयोग कर सकता हूं:
function onEdit(event) {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}
उपयोग अनुभाग राज्यों की तरह सेल में फ़ंक्शन का उपयोग करना अब आवश्यक नहीं होगा । इसके बजाय आप उस सेल को हार्ड कोडिंग कर रहे हैं जिसे आप अपडेट करना चाहते हैं और वह कॉलम जिसे आप ट्रैक करना चाहते हैं। यह संभव है कि इसे लागू करने के लिए अधिक स्पष्ट तरीका है (उम्मीद है कि हार्ड कोडित नहीं है), लेकिन यह सबसे अच्छा है जो मुझे अभी तक मिल सकता है।
ध्यान दें कि यदि आप पहले की तरह सेल में फ़ंक्शन का उपयोग करते हैं, तो यह रीलोड पर अपडेट होगा। हो सकता है कि onEdit()
अपडेट करने के लिए सेल फ़ंक्शंस में हुक करने और बल देने का एक तरीका हो । मैं इसे प्रलेखन में नहीं ढूँढ सकता।
कैलिगारी के उत्तर के समान उत्तर , लेकिन हम इसे पूर्ण स्तंभ श्रेणी को निर्दिष्ट करके इसे साफ कर सकते हैं:
=INDEX(G2:G, COUNT(G2:G))
FILTER()
समान एक एड रेंज में पहली, आखिरी, या nth रो ली जाती है ।
COUNT(G2:G)
रिटर्न 0. इसके बजाय उपयोग करते हैं COUNTA(G2:G)
जो एक डेटासेट में केवल मानों की संख्या की गणना करता है। यदि आपके मानों के बीच एक भी रिक्त नहीं है, तो अंतिम मूल्य प्राप्त करने के लिए COUNTA
केवल संयुक्त के साथ उपयोगी है INDEX
।
COUNTA
। COUNT
केवल संख्यात्मक मानों को गिना जाता है: यह 0 तब वापस आएगा जब उदाहरण के लिए पाठ कोशिकाएं दी गई हों।
वास्तव में मुझे यहाँ एक सरल समाधान मिला:
http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=en
यह इस तरह दिख रहा है:
=FILTER( A10:A100 , ROW(A10:A100) =MAX( FILTER( ArrayFormula(ROW(A10:A100)) , NOT(ISBLANK(A10:A100)))))
ROW
पंक्ति संख्या FILTER( ROW(A10:A100), NOT(ISBLANK(A10:A100) )
लौटाता है , इसलिए सभी गैर-रिक्त पंक्ति संख्या (उनके मान नहीं) की एक सरणी देता है, उदाहरण के लिए [1,2, 3, 7, 12, 14]। फिर MAX
हमें अंतिम पंक्ति संख्या देता है। दूसरी FILTER
पंक्ति को उन सभी पंक्तियों को फ़िल्टर करने के लिए लागू किया जाता है जहाँ पंक्ति संख्या मान से मेल नहीं खाती MAX
(यानी अंतिम गैर-रिक्त पंक्ति का मान)।
सीमा के भीतर अंतिम सेल का चयन करने के लिए LAST () फ़ंक्शन को फिलहाल लागू नहीं किया गया है। हालाँकि, आपके उदाहरण के बाद:
=LAST(G2:G9999)
हम INDEX () और COUNT () को कुछ इस तरह से उपयोग करके अंतिम सेल प्राप्त करने में सक्षम हैं :
=INDEX(G2:G; COUNT(G2:G))
स्प्रीडशीट में एक जीवित उदाहरण है जहां मैंने एक ही समस्या (शीट Orzamentos
, सेल I5
) पाई है (और हल की है )। ध्यान दें कि यह पूरी तरह से दस्तावेज़ के भीतर अन्य शीट्स को संदर्भित करने के लिए भी काम करता है।
COUNTA
उस मामले में उपयोग कर सकते हैं यदि आपको यकीन है कि कॉलम में मानों के बीच एक भी रिक्त नहीं है। Dohmoose के जवाब के लिए मेरी टिप्पणियाँ देखें।
:G
अंतिम तत्व को निरूपित क्यों करता है ? क्या यह प्रलेखित है?
=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNTA(G2:G) )
मैंने कई उत्तरों के माध्यम से देखा और कोशिश की है, और यहाँ मैंने क्या पाया है: सरल उपाय ( Dohmoose का जवाब देखें ) काम करता है अगर कोई खाली नहीं है:
=INDEX(G2:G; COUNT(G2:G))
यदि आपके पास खाली है, तो यह विफल रहता है।
तुम बस से बदलकर एक खाली संभाल कर सकते हैं COUNT
करने के लिए COUNTA
(देखें user3280071 का जवाब ):
=INDEX(G2:G; COUNTA(G2:G))
हालांकि, यह ब्लैंक के कुछ संयोजनों के लिए विफल हो जाएगा। ( 1 blank 1 blank 1
मेरे लिए विफल रहता है।)
निम्नलिखित कोड काम करता है ( नादेर का जवाब और जेसन की टिप्पणी देखें ):
=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , ROWS( FILTER( G2:G , NOT(ISBLANK(G2:G)) ) ) )
लेकिन इसके बारे में सोचने की आवश्यकता है कि आप किसी दिए गए रेंज का उपयोग करना चाहते हैं COLUMNS
या नहीं ROWS
।
हालांकि, अगर मुझे एक विश्वसनीय, रिक्त-प्रूफ कार्यान्वयन के COLUMNS
साथ प्रतिस्थापित COUNT
किया गया है LAST
:
=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNT( FILTER( G2:G , NOT(ISBLANK(G2:G)) ) ) )
और चूंकि COUNTA
फ़िल्टर में बनाया गया है, हम आगे का उपयोग करके सरल कर सकते हैं
=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNTA(G2:G) )
यह कुछ सरल है, और सही है। और आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि पंक्तियों या स्तंभों की गिनती करें या नहीं। और स्क्रिप्ट समाधानों के विपरीत, यह स्वतः स्प्रैडशीट में परिवर्तन के साथ अद्यतन करता है।
और यदि आप एक पंक्ति में अंतिम मूल्य प्राप्त करना चाहते हैं, तो बस डेटा रेंज बदलें:
=INDEX( FILTER( A2:2 , NOT(ISBLANK(A2:2))) , COUNTA(A2:2) )
COUNTA का उपयोग करने के लिए आवश्यक पाठ मानों के एक स्तंभ से अंतिम मान वापस करने के लिए, इसलिए आपको इस सूत्र की आवश्यकता होगी:
=INDEX(G2:G; COUNTA(G2:G))
COUNTA
के साथ संयुक्त INDEX
स्तंभ में अंतिम मान वापस नहीं होगा।
इसे इस्तेमाल करे:
=INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))
मान लीजिए कि जिस कॉलम में आप अंतिम मान देख रहे हैं वह बी है।
और हाँ, यह रिक्तता के साथ काम करता है।
ऐसा लगता है कि Google Apps स्क्रिप्ट अब फ़ंक्शन मापदंडों के रूप में श्रेणियों का समर्थन करती है। यह समाधान एक सीमा स्वीकार करता है:
// Returns row number with the last non-blank value in a column, or the first row
// number if all are blank.
// Example: =rowWithLastValue(a2:a, 2)
// Arguments
// range: Spreadsheet range.
// firstRow: Row number of first row. It would be nice to pull this out of
// the range parameter, but the information is not available.
function rowWithLastValue(range, firstRow) {
// range is passed as an array of values from the indicated spreadsheet cells.
for (var i = range.length - 1; i >= 0; -- i) {
if (range[i] != "") return i + firstRow;
}
return firstRow;
}
Google Apps स्क्रिप्ट सहायता फ़ोरम में चर्चा भी देखें: मैं सूत्रों को पुनर्गणना के लिए कैसे बाध्य करूं?
मैंने पिछले उत्तरों को देखा और उन्हें ऐसा लग रहा है कि वे बहुत मेहनत कर रहे हैं। हो सकता है कि स्क्रिप्टिंग सपोर्ट में बस सुधार हुआ हो। मुझे लगता है कि फ़ंक्शन इस तरह व्यक्त किया गया है:
function lastValue(myRange) {
lastRow = myRange.length;
for (; myRange[lastRow - 1] == "" && lastRow > 0; lastRow--)
{ /*nothing to do*/ }
return myRange[lastRow - 1];
}
अपनी स्प्रैडशीट में मैं तब उपयोग करता हूं:
= lastValue(E17:E999)
फ़ंक्शन में, मुझे एक प्रति संदर्भित सेल के साथ मूल्यों की एक सरणी मिलती है और यह सिर्फ सरणी के अंत से पीछे की ओर पुनरावृत्ति करता है जब तक कि यह एक गैर-रिक्त मान नहीं पाता है या तत्वों से बाहर निकलता है। फ़ंक्शन में डेटा पास होने से पहले शीट के संदर्भों की व्याख्या की जानी चाहिए। बहु-आयामों को संभालने के लिए पर्याप्त नहीं फैंसी। प्रश्न ने एक कॉलम में अंतिम सेल के लिए पूछा था, इसलिए यह उचित लगता है। यदि आप डेटा से बाहर निकलते हैं, तो यह संभवतः मर जाएगा।
आपका लाभ भिन्न हो सकता है, लेकिन यह मेरे लिए काम करता है।
यह अंतिम मान प्राप्त करता है और खाली मानों को संभालता है:
=INDEX( FILTER( H:H ; NOT(ISBLANK(H:H))) ; ROWS( FILTER( H:H ; NOT(ISBLANK(H:H)) ) ) )
=INDEX( FILTER( 88:88 , NOT(ISBLANK(88:88))) , columns( FILTER( 88:88 , NOT(ISBLANK(88:88)) ) ) )
=INDEX( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row())))) , columns( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row()))) ) ) )
उत्तर
$ =INDEX(G2:G; COUNT(G2:G))
लिब्रे ऑफिस में सही ढंग से काम नहीं करता है। हालांकि, एक छोटे से बदलाव के साथ, यह पूरी तरह से काम करता है।
$ =INDEX(G2:G100000; COUNT(G2:G100000))
यह हमेशा तभी काम करता है जब सच्ची सीमा इससे छोटी हो (G2:G10000)
क्या मूल प्रश्न का कड़ाई से विषय के उत्तर के साथ उत्तर देना स्वीकार्य है :) आप ऐसा करने के लिए स्प्रैडशीट में एक सूत्र लिख सकते हैं। शायद बदसूरत? लेकिन एक स्प्रेडशीट के सामान्य संचालन में प्रभावी।
=indirect("R"&ArrayFormula(max((G:G<>"")*row(G:G)))&"C"&7)
(G:G<>"") gives an array of true false values representing non-empty/empty cells
(G:G<>"")*row(G:G) gives an array of row numbers with zeros where cell is empty
max((G:G<>"")*row(G:G)) is the last non-empty cell in G
यह स्क्रिप्ट क्षेत्र में कई प्रश्नों के लिए एक विचार के रूप में पेश किया जाता है जो कि सरणी सूत्रों के साथ मज़बूती से वितरित किए जा सकते हैं जो कि एक्सेल और ओपनऑफ़िस में समान फैशन में काम करने का लाभ होता है ।
मैं @tinfini द्वारा दिए गए कोड के साथ खेल रहा था, और लोगों को लगता है कि जो मुझे लगता है कि उससे थोड़ा अधिक सुरुचिपूर्ण समाधान है (मुझे नहीं लगता कि स्क्रिप्ट ने उसी तरह काम किया है जब वह मूल उत्तर तैयार करता है) से लाभ हो सकता है ...
//Note that this function assumes a single column of values, it will
//not function properly if given a multi-dimensional array (if the
//cells that are captured are not in a single row).
function LastInRange(values)
{
for (index = values.length - 1; values[index] == "" && index > 0; index--) {}
return String(values[index]);
}
उपयोग में यह इस तरह दिखेगा:
=LastInRange(D2:D)
मैंने पाया कि एक और तरीका हो सकता है यह आपकी मदद करेगा
=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 )
अंतिम पंक्ति में वापस जाएँ
Anab से अधिक जानकारी यहाँ: https://groups.google.com/forum/?fromgroups=# -topic/How-to-Documents/if0_fGVINmI
मुझे आश्चर्य है कि इससे पहले किसी ने भी इसका जवाब नहीं दिया था। लेकिन यह सबसे छोटा होना चाहिए और यह एक्सेल में भी काम करता है:
=ARRAYFORMULA(LOOKUP(2,1/(G2:G<>""),G2:G))
G2:G<>""
1 / true (1) और 1 / false (0) का एक सरणी बनाता है। चूँकि LOOKUP
खोजने के लिए एक शीर्ष डाउन दृष्टिकोण है 2
और चूंकि यह कभी नहीं मिलेगा 2, यह अंतिम गैर रिक्त पंक्ति तक आता है और उस की स्थिति देता है।
ऐसा करने का दूसरा तरीका, जैसा कि अन्य लोगों ने उल्लेख किया है, यह है:
=INDEX(G2:G,MAX((ISBLANK(G2:G)-1)*-ROW(G2:G))-1)
गैर रिक्त पंक्ति के MAX
इमम ROW
को ढूंढना और उसे खिलानाINDEX
एक शून्य रिक्त रुकावट सरणी में, के INDIRECT
RC
साथ संकेतन का उपयोग करना COUNTBLANK
एक और विकल्प है। यदि V4: V6 को प्रविष्टियों के साथ कब्जा कर लिया जाता है, तो,
V18 :
=INDIRECT("R[-"&COUNTBLANK(V4:V17)+1&"]C",0)
V6 की स्थिति देगा।
Tools -> Scripts -> Script editor...