किसी कॉलम का अंतिम मान चुनना


106

स्तंभ G में कुछ मानों के साथ मेरे पास एक स्प्रेडशीट है। बीच में कुछ कोशिकाएँ खाली हैं, और मुझे उस स्तंभ से दूसरे सेल में अंतिम मान प्राप्त करने की आवश्यकता है।

कुछ इस तरह:

=LAST(G2:G9999)

सिवाय इसके कि LASTएक समारोह नहीं है।

जवाबों:


54

तो यह समाधान एक स्ट्रिंग को इसके पैरामीटर के रूप में लेता है। यह पाता है कि शीट में कितनी पंक्तियाँ हैं। यह निर्दिष्ट कॉलम में सभी मान प्राप्त करता है। यह शुरू से अंत तक मूल्यों से गुजरता है जब तक कि यह एक मूल्य नहीं पाता है जो एक खाली स्ट्रिंग नहीं है। अंत में यह मूल्य को पीछे कर देता है।

स्क्रिप्ट:

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()अपडेट करने के लिए सेल फ़ंक्शंस में हुक करने और बल देने का एक तरीका हो । मैं इसे प्रलेखन में नहीं ढूँढ सकता।


5
यह एक Google स्प्रेडशीट स्क्रिप्ट है। आप के तहत एक नई स्क्रिप्ट बना सकते हैंTools -> Scripts -> Script editor...
tinifni

1
: हे अद्भुत! मुझे नहीं पता था कि Google ने स्क्रिप्ट लागू की थी। बहुत-बहुत धन्यवाद, इसने पूरी तरह से काम किया
कैम्ब्रिका

1
किसी भी विचार को जब मैं शीट में डेटा बदलता हूं तो इसे स्वचालित रूप से कैसे अपडेट किया जाए?
कैम्ब्रिका

मैंने अपने जवाब को कुछ जानकारी के साथ संपादित किया जो मदद करनी चाहिए। हैप्पी कोडिंग!
टिनिफ़नी

5
मैंने इस स्क्रिप्ट का एक संपादन किया है, ताकि आप नामांकित शीट को लास्टवैल्यू की तरह पास कर सकें ("Sheet1! A") gist.github.com/2701061
johnwards

165

कैलिगारी के उत्तर के समान उत्तर , लेकिन हम इसे पूर्ण स्तंभ श्रेणी को निर्दिष्ट करके इसे साफ कर सकते हैं:

=INDEX(G2:G, COUNT(G2:G))

12
यह तब तक काम करता प्रतीत होता है जब तक कि डेटासेट में कोई
कोरा न हो

एक और अच्छा संसाधन, productforums.google.com/forum/# ​​.topic / docs / p3t3feg7Jic पर चयनित उत्तर है, जो दिखाता है कि कैसे @ गेटा के उत्तर केFILTER() समान एक एड रेंज में पहली, आखिरी, या nth रो ली जाती है ।
एरॉन ब्लेंकुश

इस उत्तर stackoverflow.com/a/8161172/418111 में एक सूत्र है जो रिक्त कोशिकाओं का समर्थन करता है।
डैनियल

8
जैसा @KeithSirmons का उल्लेख है। यह आपके कॉलम में रिक्त है, यह काम नहीं करता है, क्योंकि COUNT(G2:G)रिटर्न 0. इसके बजाय उपयोग करते हैं COUNTA(G2:G)जो एक डेटासेट में केवल मानों की संख्या की गणना करता है। यदि आपके मानों के बीच एक भी रिक्त नहीं है, तो अंतिम मूल्य प्राप्त करने के लिए COUNTAकेवल संयुक्त के साथ उपयोगी है INDEX
क्रिस्टियान वेस्टरबीक

3
यह भी ध्यान दें कि यदि आपके मूल्य संख्यात्मक नहीं हैं, तो आपको आवश्यकता होगी COUNTACOUNTकेवल संख्यात्मक मानों को गिना जाता है: यह 0 तब वापस आएगा जब उदाहरण के लिए पाठ कोशिकाएं दी गई हों।
वायुसेना

53

वास्तव में मुझे यहाँ एक सरल समाधान मिला:

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)))))

2
वाह यह अविश्वसनीय रूप से साफ है। क्या आप बता सकते हैं कि यह कैसे काम करता है?
कैम्ब्रैका

वास्तव में नहीं: यह सही है जब स्रोत सीमा पहले से ही हल हो।
कैलिगारी

5
समझाया गया: ROWपंक्ति संख्या FILTER( ROW(A10:A100), NOT(ISBLANK(A10:A100) )लौटाता है , इसलिए सभी गैर-रिक्त पंक्ति संख्या (उनके मान नहीं) की एक सरणी देता है, उदाहरण के लिए [1,2, 3, 7, 12, 14]। फिर MAXहमें अंतिम पंक्ति संख्या देता है। दूसरी FILTERपंक्ति को उन सभी पंक्तियों को फ़िल्टर करने के लिए लागू किया जाता है जहाँ पंक्ति संख्या मान से मेल नहीं खाती MAX(यानी अंतिम गैर-रिक्त पंक्ति का मान)।
jhabbott

ROW के दोनों उदाहरणों को एक विशेष पंक्ति में अंतिम मान (किसी विशेष स्तंभ में अंतिम मान के बजाय) को वापस करने के लिए COLUMN द्वारा प्रतिस्थापित किया जा सकता है।
जॉन श्नाइडर

2
क्या होगा यदि मैं सिर्फ कॉलम के अंतिम मूल्य की पंक्ति संख्या चाहता हूं?
निक

44

सीमा के भीतर अंतिम सेल का चयन करने के लिए LAST () फ़ंक्शन को फिलहाल लागू नहीं किया गया है। हालाँकि, आपके उदाहरण के बाद:

=LAST(G2:G9999)

हम INDEX () और COUNT () को कुछ इस तरह से उपयोग करके अंतिम सेल प्राप्त करने में सक्षम हैं :

=INDEX(G2:G; COUNT(G2:G))

स्प्रीडशीट में एक जीवित उदाहरण है जहां मैंने एक ही समस्या (शीट Orzamentos, सेल I5) पाई है (और हल की है )। ध्यान दें कि यह पूरी तरह से दस्तावेज़ के भीतर अन्य शीट्स को संदर्भित करने के लिए भी काम करता है।


1
शीट में परिवर्तन के रूप में यह बहुत अच्छा काम करता है, और ऑटो-अपडेट करता है। धन्यवाद!
TinaMarie 16

8
मुझे इस सुझाव की सहमति पसंद है, लेकिन यह तब काम नहीं करता है जब लक्ष्य श्रेणी में कुछ रिक्त सेल (जैसा कि ऊपर मूल प्रश्न में उल्लेख किया गया है) शामिल हैं, क्योंकि COUNT () रिक्त कोशिकाओं की गणना नहीं करता है।
जॉन श्नाइडर

@JonSchneider आप COUNTAउस मामले में उपयोग कर सकते हैं यदि आपको यकीन है कि कॉलम में मानों के बीच एक भी रिक्त नहीं है। Dohmoose के जवाब के लिए मेरी टिप्पणियाँ देखें।
क्रिस्टियान वेस्टरबीक

:Gअंतिम तत्व को निरूपित क्यों करता है ? क्या यह प्रलेखित है?
प्रवाह 2k

33

सारांश:

=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) )

प्रत्येक पुनरावृति के चरणों और कार्यक्षमता + सीमाओं के माध्यम से चलने के लिए सुपर सहायक। मुझे प्रत्येक पंक्ति में अंतिम मान प्राप्त करने की आवश्यकता है, कुछ कई रिक्त स्थान के साथ। इसने एकदम जादू की तरह काम किया। धन्यवाद!
क्रिस्टियान एडम्स

9

COUNTA का उपयोग करने के लिए आवश्यक पाठ मानों के एक स्तंभ से अंतिम मान वापस करने के लिए, इसलिए आपको इस सूत्र की आवश्यकता होगी:

=INDEX(G2:G; COUNTA(G2:G))

1
लेकिन केवल अगर आपके मूल्यों के बीच एक भी खाली नहीं है। अगर वहाँ है, COUNTAके साथ संयुक्त INDEXस्तंभ में अंतिम मान वापस नहीं होगा।
क्रिस्टियान वेस्टरबीक

7

इसे इस्तेमाल करे: =INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))

मान लीजिए कि जिस कॉलम में आप अंतिम मान देख रहे हैं वह बी है।

और हाँ, यह रिक्तता के साथ काम करता है।


6

ऐसा लगता है कि 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 स्क्रिप्ट सहायता फ़ोरम में चर्चा भी देखें: मैं सूत्रों को पुनर्गणना के लिए कैसे बाध्य करूं?


6

मैंने पिछले उत्तरों को देखा और उन्हें ऐसा लग रहा है कि वे बहुत मेहनत कर रहे हैं। हो सकता है कि स्क्रिप्टिंग सपोर्ट में बस सुधार हुआ हो। मुझे लगता है कि फ़ंक्शन इस तरह व्यक्त किया गया है:

function lastValue(myRange) {
    lastRow = myRange.length;
    for (; myRange[lastRow - 1] == "" && lastRow > 0; lastRow--)
    { /*nothing to do*/ }
    return myRange[lastRow - 1];
}

अपनी स्प्रैडशीट में मैं तब उपयोग करता हूं:

= lastValue(E17:E999)

फ़ंक्शन में, मुझे एक प्रति संदर्भित सेल के साथ मूल्यों की एक सरणी मिलती है और यह सिर्फ सरणी के अंत से पीछे की ओर पुनरावृत्ति करता है जब तक कि यह एक गैर-रिक्त मान नहीं पाता है या तत्वों से बाहर निकलता है। फ़ंक्शन में डेटा पास होने से पहले शीट के संदर्भों की व्याख्या की जानी चाहिए। बहु-आयामों को संभालने के लिए पर्याप्त नहीं फैंसी। प्रश्न ने एक कॉलम में अंतिम सेल के लिए पूछा था, इसलिए यह उचित लगता है। यदि आप डेटा से बाहर निकलते हैं, तो यह संभवतः मर जाएगा।

आपका लाभ भिन्न हो सकता है, लेकिन यह मेरे लिए काम करता है।


5
function lastRow(column){
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var lastRow = sheet.getLastRow();
  var lastRowRange=sheet.getRange(column+startRow);
  return lastRowRange.getValue();
}

कोई हार्ड कोडिंग नहीं।


5

यह एक मेरे लिए काम करता है:

=INDEX(I:I;MAX((I:I<>"")*(ROW(I:I))))

एक अच्छा समाधान, जो खाली कोशिकाओं की उपस्थिति में भी काम करता है।
17

5

यह अंतिम मान प्राप्त करता है और खाली मानों को संभालता है:

=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()))) ) ) )
जेसन

मेरे लिए, यह "सही" उत्तर है। उचित रूप से कॉम्पैक्ट और समझने में आसान, और रिक्त स्थान के साथ काम करता है।
अद्र्वार्क

4

रिक्त स्थान वाले कॉलम में, आप अंतिम मान प्राप्त कर सकते हैं

=+sort(G:G,row(G:G)*(G:G<>""),)

एक अच्छा समाधान। मुझे संदेह है @ पेड्रो के संस्करण (INDEX और MAX का उपयोग करके) SORT का उपयोग करने की तुलना में थोड़ा अधिक कुशल हो सकता है, हालांकि।
जॉचेन

4

उत्तर

$ =INDEX(G2:G; COUNT(G2:G))

लिब्रे ऑफिस में सही ढंग से काम नहीं करता है। हालांकि, एक छोटे से बदलाव के साथ, यह पूरी तरह से काम करता है।

$ =INDEX(G2:G100000; COUNT(G2:G100000))

यह हमेशा तभी काम करता है जब सच्ची सीमा इससे छोटी हो (G2:G10000)


इस पोस्ट को "Google स्प्रेडशीट" और "Google Apps स्क्रिप्ट" टैग किया गया था, लिबर ऑफिस से संबंधित कुछ भी नहीं ... आप विषय से बाहर हैं
सर्ज इंस

प्रश्न के शीर्षक के रूप में बहुत दूर का विषय नहीं है, एक कॉलम के अंतिम मूल्य का चयन करना , लिबरऑफिस या नंबरों का उपयोग करके कुछ गरीब आत्मा द्वारा आसानी से पाया जा सकता है। मैं एक स्प्रेडशीट शौकिया हूं जो काफी खतरनाक होना जानता है। मैं जो इकट्ठा कर सकता हूं वह यह है कि Google ने इसे ऐसा बनाया है कि अगर आपकी सीमा का दूसरा तर्क सिर्फ एक कॉलम है, तो यह कॉलम के शेष भाग का चयन करेगा, इसलिए लोगों को आपके द्वारा खोजे गए बड़ी संख्या में हैक का उपयोग करने की आवश्यकता नहीं है।
आरोन

3

क्या मूल प्रश्न का कड़ाई से विषय के उत्तर के साथ उत्तर देना स्वीकार्य है :) आप ऐसा करने के लिए स्प्रैडशीट में एक सूत्र लिख सकते हैं। शायद बदसूरत? लेकिन एक स्प्रेडशीट के सामान्य संचालन में प्रभावी।

=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

यह स्क्रिप्ट क्षेत्र में कई प्रश्नों के लिए एक विचार के रूप में पेश किया जाता है जो कि सरणी सूत्रों के साथ मज़बूती से वितरित किए जा सकते हैं जो कि एक्सेल और ओपनऑफ़िस में समान फैशन में काम करने का लाभ होता है ।


3
function getDashboardSheet(spreadsheet) {
  var sheetName = 'Name';
  return spreadsheet.getSheetByName(sheetName);
}
      var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);  
      var dashboardSheet = getDashboardSheet(spreadsheet);
      Logger.log('see:'+dashboardSheet.getLastRow());

3

मैं @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)

2

@ Jon_Schneider की टिप्पणी के बारे में, यदि कॉलम में रिक्त कक्ष हैं, तो बस COUNTA () का उपयोग करें

=INDEX(G2:G; COUNT**A**(G2:G))

4
नहीं, वह भी काम नहीं करता है। COUNT और COUNTA के बीच का अंतर संख्या और पाठ के बीच अंतर है, जो यहाँ अप्रासंगिक है।
मुहूर्त

2

मैंने पाया कि एक और तरीका हो सकता है यह आपकी मदद करेगा

=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 ) अंतिम पंक्ति में वापस जाएँ

Anab से अधिक जानकारी यहाँ: https://groups.google.com/forum/?fromgroups=# -topic/How-to-Documents/if0_fGVINmI


1
वास्तव में नहीं: यह सही है जब स्रोत सीमा पहले से ही हल हो।
कैलिगारी

2

थोड़ी भिन्नता मिली जिसने तालिका के नीचे से रिक्त स्थान को खत्म करने का काम किया। = सूचकांक (जी 2 जी, COUNTIF (जी 2 जी, "<>"))


1

मुझे आश्चर्य है कि इससे पहले किसी ने भी इसका जवाब नहीं दिया था। लेकिन यह सबसे छोटा होना चाहिए और यह एक्सेल में भी काम करता है:

=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 की स्थिति देगा।


1

किसी स्तंभ से अंतिम मान प्राप्त करने के लिए आप MAXफ़ंक्शन के साथ IFफ़ंक्शन का भी उपयोग कर सकते हैं

=ARRAYFORMULA(INDIRECT("G"&MAX(IF(G:G<>"", ROW(G:G), )), 4)))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.