답변:
따라서이 솔루션은 문자열을 매개 변수로 사용합니다. 시트에있는 행 수를 찾습니다. 지정된 열의 모든 값을 가져옵니다. 빈 문자열이 아닌 값을 찾을 때까지 끝에서 처음으로 값을 반복합니다. 마지막으로 가치를 되돌립니다.
스크립트:
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()
셀 함수에 연결하여 강제로 업데이트 하는 방법이있을 수 있습니다. 문서에서 찾을 수 없습니다.
비슷한 대답 caligari의 대답에 대한 이지만 전체 열 범위를 지정하여 정리할 수 있습니다.
=INDEX(G2:G, COUNT(G2:G))
FILTER()
과 유사하게 ed 범위 에서 첫 번째, 마지막 또는 n 번째 행을 얻는 방법을 보여줍니다 .
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=ko
다음과 같이 보입니다.
=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
그런 다음 행 번호가 값과 일치하지 않는 모든 행을 필터링하기 위해 1 초가 적용됩니다 MAX
(즉, 비어 있지 않은 마지막 행의 값).
범위 내에서 마지막 셀을 선택하기 위해 LAST () 함수는 현재 구현되지 않았습니다. 그러나 귀하의 예를 따르십시오.
=LAST(G2:G9999)
다음 과 같은 방법으로 INDEX () 및 COUNT () 함수를 사용하여 마지막 셀을 얻을 수 있습니다 .
=INDEX(G2:G; COUNT(G2:G))
spreedsheet에 동일한 문제 (sheet , cell )를 발견하고 해결 한 실제 예제 가 있습니다 . 문서 내의 다른 시트를 참조해도 완벽하게 작동합니다.Orzamentos
I5
COUNTA
열의 값 사이에 공백이 하나도없는 것이 확실한 경우 @JonSchneider를 사용할 수 있습니다 . 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
나를 위해 실패합니다.)
다음 코드가 작동합니다 ( Nader의 답변 및 jason의 의견 참조 ).
=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
with INDEX
는 열의 마지막 값을 반환하지 않습니다.
이제 Google Apps Script가 함수 매개 변수로 범위를 지원하는 것 같습니다. 이 솔루션은 다음 범위를 허용합니다.
// 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 Script 도움말 포럼의 토론도 참조하십시오. 수식을 강제로 다시 계산하려면 어떻게해야합니까?
이전 답변을 보니 너무 열심히하는 것 같아요. 스크립팅 지원이 단순히 향상되었을 수 있습니다. 함수는 다음과 같이 표현된다고 생각합니다.
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()))) ) ) )
공백이있는 열에서 다음을 사용하여 마지막 값을 얻을 수 있습니다.
=+sort(G:G,row(G:G)*(G:G<>""),)
대답
$ =INDEX(G2:G; COUNT(G2:G))
LibreOffice에서 제대로 작동하지 않습니다. 그러나 조금만 변경하면 완벽하게 작동합니다.
$ =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
아무도이 대답을하지 않았던 것에 놀랐습니다. 그러나 이것은 가장 짧아야하며 Excel에서도 작동합니다.
=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
imum ROW
을 찾아서 공급INDEX
제로 블랭크 인터럽트 배열에서 INDIRECT
RC
표기법 사용 COUNTBLANK
은 또 다른 옵션입니다. V4 : V6에 항목이 가득 차면
V18 :
=INDIRECT("R[-"&COUNTBLANK(V4:V17)+1&"]C",0)
V6의 위치를 제공합니다.
Tools -> Scripts -> Script editor...