Wybieranie ostatniej wartości kolumny

Mam arkusz kalkulacyjny z niektórymi wartościami w kolumnie G. niektóre komórki są puste pomiędzy nimi i muszę pobrać ostatnią wartość z tej kolumny do innej komórki.

Coś w stylu:

=LAST(G2:G9999)

Poza tym, że LAST nie jest funkcją.

Author: pnuts, 2010-11-13

21 answers

Więc to rozwiązanie przyjmuje łańcuch jako swój parametr. Sprawdza, ile wierszy znajduje się w arkuszu. Pobiera wszystkie wartości w podanej kolumnie. Pętli przez wartości od końca do początku, aż znajdzie wartość, która nie jest pusty łańcuch. W końcu zwraca wartość.

Skrypt:

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];
}

Użycie:

=lastValue("G")

EDIT:

W odpowiedzi na komentarz z prośbą o automatyczną aktualizację funkcji:

The best way I można znaleźć to użyć z powyższym kodem:

function onEdit(event) {
  SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}

Nie będzie już wymagane używanie funkcji w komórce takiej jak sekcja Usage. Zamiast tego kodujesz na twardo komórkę, którą chcesz zaktualizować, i kolumnę, którą chcesz śledzić. Możliwe, że istnieje bardziej wymowny sposób wdrożenia tego (miejmy nadzieję, że taki, który nie jest mocno zakodowany), ale to najlepsze, co na razie znalazłem.

Zauważ, że jeśli użyjesz funkcji w komórce, jak wspomniano wcześniej, to zaktualizuje się po przeładowaniu. Może jest sposób, aby podłączyć się do onEdit() i zmusić funkcje komórki do aktualizacji. Nie mogę tego znaleźć w dokumentacji.

 50
Author: tinifni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 21:57:59

ODPOWIEDŹ podobna do odpowiedź caligariego , ale możemy ją uporządkować, podając tylko pełny zakres kolumn:

=INDEX(G2:G, COUNT(G2:G))
 156
Author: dohmoose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 17:00:33

Właściwie znalazłem prostsze rozwiązanie tutaj:

Http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=en

Wygląda tak:

=FILTER( A10:A100 , ROW(A10:A100) =MAX( FILTER( ArrayFormula(ROW(A10:A100)) , NOT(ISBLANK(A10:A100)))))
 52
Author: Getas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-23 18:23:42

Funkcja LAST () nie jest obecnie zaimplementowana w celu wybrania ostatniej komórki w zakresie. Jednak podążając za twoim przykładem:

=LAST(G2:G9999)

Możemy uzyskać ostatnią komórkę używając kilku funkcji INDEX () i COUNT () w ten sposób:

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

Istnieje przykład na żywo w arkuszu kalkulacyjnym, w którym znalazłem (i rozwiązałem) ten sam problem(arkusz Orzamentos, Komórka I5). Zauważ, że działa doskonale nawet odwołując się do innych arkuszy w dokument.

 41
Author: caligari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 17:02:49

Podsumowanie:

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNTA(G2:G) )

Szczegóły:

Przejrzałem i wypróbowałem kilka odpowiedzi, a oto, co znalazłem: Najprostsze rozwiązanie (zobacz dohmoose' odpowiedź) działa, jeśli nie ma pustych znaków:

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

Jeśli masz puste pola, to zawiedzie.

Możesz obsłużyć jedno puste po prostu zmieniając z COUNT na COUNTA (Zobacz odpowiedź user3280071):

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

To jednak nie powiedzie się w przypadku niektórych kombinacji pustych znaków. (1 blank 1 blank 1 fails for ja.)

Działa następujący kod (zobacz odpowiedź Nadera i komentarz Jasona):

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , ROWS( FILTER( G2:G , NOT(ISBLANK(G2:G)) ) ) )

Ale wymaga zastanowienia się, czy chcesz użyć COLUMNS czy ROWS dla danego zakresu.

Jeśli jednak COLUMNS zostanie zastąpione COUNT wydaje mi się, że otrzymuję wiarygodną, odporną na puste implementację LAST:

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNT( FILTER( G2:G , NOT(ISBLANK(G2:G)) ) ) ) 

A ponieważ {[8] } ma wbudowany filtr, możemy uprościć dalsze korzystanie z

=INDEX( FILTER( G2:G , NOT(ISBLANK(G2:G))) , COUNTA(G2:G) )
Jest to dość proste i poprawne. A Ty nie musisz się martwić, czy liczyć wiersze czy kolumny. W przeciwieństwie do rozwiązań skryptowych, automatycznie aktualizuje się wraz ze zmianami w arkuszu kalkulacyjnym.

I jeśli chcesz uzyskać ostatnią wartość w wierszu, po prostu zmień zakres danych:

=INDEX( FILTER( A2:2 , NOT(ISBLANK(A2:2))) , COUNTA(A2:2) )
 23
Author: Doug Bradshaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 17:07:19

Aby zwrócić ostatnią wartość z kolumny wartości tekstowych musisz użyć COUNTA, więc potrzebujesz Formuły:

=INDEX(G2:G; COUNTA(G2:G))
 7
Author: user3280071,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-06 14:52:29

Spróbuj tego: =INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))

Załóżmy, że kolumna, w której szukasz ostatniej wartości to B.

I tak, to działa z pustymi.

 6
Author: Andrew Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-21 21:17:06

Wygląda na to, że Google Apps Script obsługuje teraz zakresy jako parametry funkcji. Rozwiązanie to przyjmuje zakres:

// 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;
}

Zobacz także dyskusję na forum Pomocy Google Apps Script: Jak wymusić przeliczenie formuł?

 5
Author: craig3353,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-27 01:42:18

Spojrzałam na poprzednie odpowiedzi i wygląda na to, że pracują zbyt ciężko. Może obsługa skryptów po prostu się poprawiła. Myślę, że funkcja jest wyrażona TAK:

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

W moim arkuszu kalkulacyjnym używam:

= lastValue(E17:E999)

W funkcji otrzymuję tablicę wartości z jedną dla każdej odwołanej komórki i to po prostu iteruje od końca tablicy wstecz, aż znajdzie niepustą wartość lub zabraknie elementów. Odniesienia do arkusza powinny być interpretowane przed przekazaniem danych do funkcji. Nie na tyle fantazyjne, aby obsłużyć wielowymiarowe, albo. Pytanie zadało pytanie o ostatnią komórkę w jednej kolumnie, więc wydaje się pasować. Prawdopodobnie umrze, jeśli zabraknie danych.

Twój przebieg może się różnić, ale to mi odpowiada.
 5
Author: Ted H.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-19 04:04:15

Ten działa dla mnie:

=INDEX(I:I;MAX((I:I<>"")*(ROW(I:I))))
 4
Author: Pedro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-31 15:40:24

W kolumnie ze spacjami można uzyskać ostatnią wartość za pomocą

=+sort(G:G,row(G:G)*(G:G<>""),)
 4
Author: JPV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-20 14:32:27

Pobiera ostatnią wartość i obsługuje puste wartości:

=INDEX(  FILTER( H:H ; NOT(ISBLANK(H:H))) ; ROWS( FILTER( H:H ; NOT(ISBLANK(H:H)) ) ) )
 4
Author: Nader,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 17:08:04
function lastRow(column){
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var lastRow = sheet.getLastRow();
  var lastRowRange=sheet.getRange(column+startRow);
  return lastRowRange.getValue();
}
Bez kodowania.
 3
Author: desnyki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-15 11:08:21

Odpowiedź

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

Nie działa poprawnie w LibreOffice. Jednak z niewielką zmianą działa doskonale.

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

To zawsze działa tylko wtedy, gdy prawdziwy zakres jest mniejszy niż (G2:G10000)

 3
Author: Manuel Ferreira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-30 21:06:22

Czy można odpowiedzieć na oryginalne pytanie z odpowiedzią ściśle off topic:) Możesz napisać formułę w arkuszu kalkulacyjnym, aby to zrobić. Może brzydki? ale skuteczne w normalnym działaniu arkusza kalkulacyjnego.

=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

Jest to oferowane jako myśl dla szeregu pytań w obszarze skryptów, które mogą być dostarczane niezawodnie za pomocą formuł tablicowych, które mają tę zaletę, że często działają w podobny sposób w Excelu i openoffice.

 2
Author: DavidF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-09 05:09:20
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());
 2
Author: Marian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-13 20:34:34

Bawiłem się kodem podanym przez @ tinfini i pomyślałem, że ludzie mogą skorzystać z tego, co moim zdaniem jest nieco bardziej eleganckim rozwiązaniem(zauważ, że skrypty nie działały tak samo, gdy tworzył oryginalną odpowiedź)...

//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]);
}

W użyciu wyglądałoby to tak:

=LastInRange(D2:D)
 2
Author: Jonathan Cavell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-12 23:29:27

Odnośnie komentarza @ Jon_Schneider, jeśli kolumna ma puste komórki wystarczy użyć COUNTA()

=INDEX(G2:G; COUNT**A**(G2:G))
 1
Author: pedro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-08 12:27:03

Dziwi mnie, że nikt wcześniej nie udzielił takiej odpowiedzi. Ale to powinno być najkrótsze i nawet działa w Excelu:

=ARRAYFORMULA(LOOKUP(2,1/(G2:G<>""),G2:G))

G2:G<>"" tworzy tablicę 1 / true(1) i 1 / false (0). Ponieważ {[4] } wykonuje odgórne podejście, aby znaleźć 2, a ponieważ nigdy nie znajdzie 2, dochodzi do ostatniego niepustego wiersza i podaje jego pozycję.

Innym sposobem, aby to zrobić, jak inni mogli wspomnieć, jest:

=INDEX(G2:G,MAX((ISBLANK(G2:G)-1)*-ROW(G2:G))-1)

Znajdowanie MAX imum ROW nie pustych wiersz i karmienie go INDEX

W zero blank interruption array, za pomocą INDIRECT RC zapis z COUNTBLANK jest inną opcją. Jeśli V4: V6 jest zajęte wpisami, to,

V18 :

=INDIRECT("R[-"&COUNTBLANK(V4:V17)+1&"]C",0)

Poda pozycję V6.

 1
Author: I'-'I,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 17:09:13

I found another way may be it will help you

=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 ) -zwróci ostatni wiersz

Więcej informacji z anab tutaj: https://groups.google.com/forum/?fromgroups=#! topic / How-to-Documents/if0_fGVINmI

 1
Author: irriss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 17:09:42

Znalazłem niewielką zmianę, która działała, aby wyeliminować puste miejsca z dołu tabeli. = index (G2: G, COUNTIF(G2:G,""))

 1
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-20 16:12:28