Mam arkusz kalkulacyjny z niektórymi wartościami w kolumnie G. Niektóre komórki są puste między nimi i muszę przenieść ostatnią wartość z tej kolumny do innej komórki.
Coś jak:
=LAST(G2:G9999)
ale LAST
to nie jest funkcja.
źródło
Mam arkusz kalkulacyjny z niektórymi wartościami w kolumnie G. Niektóre komórki są puste między nimi i muszę przenieść ostatnią wartość z tej kolumny do innej komórki.
Coś jak:
=LAST(G2:G9999)
ale LAST
to nie jest funkcja.
Więc to rozwiązanie przyjmuje łańcuch jako parametr. Znajduje liczbę wierszy w arkuszu. Pobiera wszystkie wartości w określonej kolumnie. Przechodzi przez wartości od końca do początku, dopóki nie znajdzie wartości, która nie jest pustym ciągiem. Wreszcie odzyskuje wartość.
Scenariusz:
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];
}
Stosowanie:
=lastValue("G")
EDYTOWAĆ:
W odpowiedzi na komentarz z prośbą o automatyczną aktualizację funkcji:
Najlepszym sposobem, jaki mogłem znaleźć, jest użycie tego z powyższym kodem:
function onEdit(event) {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}
Nie byłoby już wymagane używanie funkcji w komórce, tak jak w sekcji Użycie . Zamiast tego na sztywno kodujesz komórkę, którą chcesz zaktualizować, i kolumnę, którą chcesz śledzić. Możliwe, że istnieje bardziej elokwentny sposób na wdrożenie tego (miejmy nadzieję, że nie jest on zakodowany na stałe), ale jest to najlepszy, jaki na razie znalazłem.
Zauważ, że jeśli użyjesz funkcji w komórce, jak wspomniano wcześniej, zaktualizuje się ona po ponownym załadowaniu. Może jest sposób na podłączenie się onEdit()
i wymuszenie aktualizacji funkcji komórki. Po prostu nie mogę znaleźć tego w dokumentacji.
Tools -> Scripts -> Script editor...
Podobna odpowiedź do odpowiedzi Caligari , ale możemy to uporządkować, po prostu określając pełny zakres kolumn:
źródło
FILTER()
zakresie ed, podobnie jak odpowiedź @ Geta .COUNT(G2:G)
zwraca 0. Zamiast tego użyj tego,COUNTA(G2:G)
który liczy tylko liczbę wartości w zbiorze danych.COUNTA
przydaje się tylko w połączeniu z,INDEX
aby uzyskać ostatnią wartość, jeśli między wartościami nie ma ani jednej spacji.COUNTA
.COUNT
zlicza tylko wartości liczbowe: zwróci 0, gdy zostanie podana np. komórki tekstowe.Właściwie znalazłem tutaj prostsze rozwiązanie:
http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=en
To wygląda tak:
źródło
ROW
zwraca numer wiersza, więcFILTER( ROW(A10:A100), NOT(ISBLANK(A10:A100) )
zwraca tablicę wszystkich niepustych numerów wierszy (nie ich wartości), na przykład [1, 2, 3, 7, 12, 14]. NastępnieMAX
podaje numer ostatniego rzędu.FILTER
Następnie stosowana jest sekunda w celu odfiltrowania wszystkich wierszy, w których numer wiersza nie odpowiada wartości zMAX
(tj. Wartości ostatniego niepustego wiersza).Funkcja LAST () nie jest obecnie zaimplementowana w celu wybrania ostatniej komórki w zakresie. Jednak idąc za przykładem:
jesteśmy w stanie uzyskać ostatnią komórkę za pomocą kilku funkcji INDEX () i COUNT () w ten sposób:
W arkuszu spreedsheet znajduje się przykład na żywo, w którym znalazłem (i rozwiązałem) ten sam problem (arkusz
Orzamentos
, komórkaI5
). Zwróć uwagę, że działa idealnie nawet w odniesieniu do innych arkuszy w dokumencie.źródło
COUNTA
w takim przypadku, jeśli masz pewność, że między wartościami w kolumnie nie ma ani jednej spacji . Zobacz moje komentarze do odpowiedzi dohmoose.:G
oznacza ostatni element? Czy to jest udokumentowane?Podsumowanie:
Detale:
Przejrzałem i wypróbowałem kilka odpowiedzi i oto, co znalazłem: Najprostsze rozwiązanie (patrz odpowiedź Dohmoose ) działa, jeśli nie ma żadnych spacji:
Jeśli masz puste miejsca, nie powiedzie się.
Możesz obsłużyć jeden pusty, zmieniając po prostu z
COUNT
naCOUNTA
(patrz odpowiedź użytkownika3280071 ):Jednak to się nie powiedzie w przypadku niektórych kombinacji spacji. (
1 blank 1 blank 1
mi się nie udaje.)Poniższy kod działa (zobacz odpowiedź Nadera i komentarz Jasona ):
ale wymaga zastanowienia się, czy chcesz użyć,
COLUMNS
czyROWS
dla danego zakresu.Jeśli jednak
COLUMNS
zostanie zastąpione przezCOUNT
, wydaje się, że otrzymuję niezawodną, odporną na puste implementacjęLAST
:A ponieważ
COUNTA
ma wbudowany filtr, możemy uprościć dalsze korzystanieJest to dość proste i poprawne. I nie musisz się martwić, czy liczyć wiersze, czy kolumny. W przeciwieństwie do rozwiązań skryptowych aktualizuje się automatycznie wraz ze zmianami w arkuszu kalkulacyjnym.
A jeśli chcesz uzyskać ostatnią wartość w wierszu, po prostu zmień zakres danych:
źródło
Aby zwrócić ostatnią wartość z kolumny wartości tekstowych, musisz użyć COUNTA, więc potrzebujesz tej formuły:
źródło
COUNTA
połączeniu zINDEX
nie zwróci ostatniej wartości w kolumnie.Spróbuj tego:
=INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))
Załóżmy, że kolumną, w której szukasz ostatniej wartości, jest B.
I tak, działa ze spacjami.
źródło
Wygląda na to, że Google Apps Script obsługuje teraz zakresy jako parametry funkcji. To rozwiązanie akceptuje zakres:
Zobacz także dyskusję na forum pomocy Google Apps Script: Jak wymusić ponowne obliczenie formuł?
źródło
Spojrzałem na poprzednie odpowiedzi i wyglądało na to, że pracują zbyt ciężko. Może po prostu poprawiła się obsługa skryptów. Myślę, że funkcja jest wyrażona w ten sposób:
W moim arkuszu kalkulacyjnym używam:
W funkcji otrzymuję tablicę wartości z jedną na komórkę, do której istnieje odwołanie, i to po prostu iteruje od końca tablicy do tyłu, aż znajdzie niepustą wartość lub zabraknie elementów. Odniesienia do arkuszy powinny być interpretowane przed przekazaniem danych do funkcji. Nie na tyle wyszukane, aby obsługiwać wiele wymiarów. Pytanie dotyczyło ostatniej komórki w jednej kolumnie, więc wydaje się, że pasuje. Prawdopodobnie umrze, jeśli zabraknie też danych.
Twój przebieg może się różnić, ale to działa dla mnie.
źródło
bez twardego kodowania.
źródło
Ten działa dla mnie:
źródło
Pobiera ostatnią wartość i obsługuje puste wartości:
źródło
=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()))) ) ) )
W kolumnie ze spacjami można uzyskać ostatnią wartość za pomocą
źródło
Odpowiedź
nie działa poprawnie w LibreOffice. Jednak z niewielką zmianą działa idealnie.
Działa zawsze tylko wtedy, gdy rzeczywisty zakres jest mniejszy niż
(G2:G10000)
źródło
Czy można odpowiedzieć na pierwotne pytanie, udzielając odpowiedzi ściśle spoza tematu :) Możesz w tym celu napisać wzór w arkuszu kalkulacyjnym. Może brzydki? ale skuteczne w normalnym działaniu arkusza kalkulacyjnego.
Jest to przemyślenie na szereg pytań w obszarze skryptów, które można wiarygodnie dostarczyć za pomocą formuł tablicowych, które mają tę zaletę, że często działają w podobny sposób w programie Excel i Openoffice.
źródło
źródło
Bawiłem się kodem podanym przez @tinfini i pomyślałem, że ludzie mogą skorzystać z tego, co uważam za nieco bardziej eleganckie rozwiązanie (uwaga, nie sądzę, aby skrypty działały tak samo, gdy tworzył oryginalną odpowiedź) ...
W użyciu wyglądałoby to tak:
źródło
Odnośnie komentarza @ Jon_Schneider, jeśli kolumna ma puste komórki, po prostu użyj COUNTA ()
źródło
Znalazłem inny sposób, może ci to pomoże
=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 )
-wróci ostatni wierszWięcej informacji z anab tutaj: https://groups.google.com/forum/?fromgroups=#!topic/How-to-Documents/if0_fGVINmI
źródło
Znalazłem niewielką zmianę, która działała, aby wyeliminować puste miejsca na dole tabeli. = indeks (G2: G, LICZ.JEŻELI (G2: G; „<>”))
źródło
Dziwię się, że nikt wcześniej nie udzielił takiej odpowiedzi. Ale to powinno być najkrótsze i działa nawet w programie Excel:
G2:G<>""
tworzy tablicę 1 / prawda (1) i 1 / fałsz (0). PonieważLOOKUP
stosuje podejście odgórne w celu znalezienia2
i Ponieważ nigdy nie znajdzie 2, dochodzi do ostatniego niepustego wiersza i podaje jego pozycję.Innym sposobem, aby to zrobić, jak mogli wspomnieć inni, jest:
Znalezienie
MAX
imumROW
niepustego wiersza i podanie goINDEX
W tablicy z zerową pustą przerwaniem kolejną opcją jest użycie
INDIRECT
RC
notacji zCOUNTBLANK
. Jeśli V4: V6 jest zajęty wpisami, toV18 :
poda pozycję V6.
źródło
aby uzyskać ostatnią wartość z kolumny, możesz również użyć
MAX
funkcji zIF
funkcjąźródło