열의 마지막 값 선택


답변:


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
: 오 대단해! 나는 구글이 스크립트를 구현했는지 몰랐다. 대단히 감사합니다. 완벽하게 작동했습니다
cambraca 2010

1
시트의 데이터를 변경할 때 자동으로 업데이트하는 방법을 알고 있습니까?
cambraca 2010

나는 도움이 될 몇 가지 정보로 내 대답을 편집했습니다. 즐거운 코딩 되세요!
tinifni 2010

5
이 스크립트를 편집하여 lastValue ( "Sheet1! A") gist.github.com/2701061
johnwards

165

비슷한 대답 caligari의 대답에 대한 이지만 전체 열 범위를 지정하여 정리할 수 있습니다.

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

12
이것은 데이터 세트에 공백이없는 한 작동하는 것으로 보입니다
Keith Sirmons 2013 년

또 다른 좋은 리소스는 productforums.google.com/forum/#!topic/docs/p3t3feg7Jic 에서 선택된 답변으로, @Geta 의 답변FILTER() 과 유사하게 ed 범위 에서 첫 번째, 마지막 또는 n 번째 행을 얻는 방법을 보여줍니다 .
아론 Blenkush

이 답변 stackoverflow.com/a/8161172/418111 에는 공백 셀을 지원하는 수식이 있습니다.
Daniel

8
@KeithSirmons가 언급했듯이. COUNT(G2:G)0을 반환 하기 때문에 작동하지 않는 열에 공백이 있습니다. 대신 COUNTA(G2:G)데이터 세트의 값 수만 계산 하는 것을 사용 하세요. 값 사이에 공백이 하나도없는 경우 마지막 값을 얻기 위해 COUNTA와 결합 할 때만 유용 INDEX합니다.
Christiaan Westerbeek

3
또한 값이 숫자가 아닌 경우 COUNTA. COUNT숫자 값만 계산합니다. 예를 들어 텍스트 셀이 주어지면 0을 반환합니다.
Air

53

실제로 여기에서 더 간단한 해결책을 찾았습니다.

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

2
와우, 엄청나게 깨끗 해요. 어떻게 작동하는지 정확히 설명해 주시겠습니까?
cambraca

실제로는 아닙니다. 소스 범위가 이미 정렬 된 경우에만 적합합니다.
칼리 가리

5
설명 : ROW행 번호를 FILTER( ROW(A10:A100), NOT(ISBLANK(A10:A100) )반환 하므로 비어 있지 않은 모든 행 번호 (값이 아님)의 배열을 반환합니다 (예 : [1,2, 3, 7, 12, 14]). 그런 다음 MAX마지막 행 번호를 제공합니다. FILTER그런 다음 행 번호가 값과 일치하지 않는 모든 행을 필터링하기 위해 1 초가 적용됩니다 MAX(즉, 비어 있지 않은 마지막 행의 값).
jhabbott

특정 열의 마지막 값 대신 특정 행의 마지막 값을 반환하기 위해 ROW의 두 인스턴스를 COLUMN으로 바꿀 수 있습니다.
존 슈나이더

2
열의 마지막 값의 행 번호를 원하면 어떻게합니까?
Nick5a1 2013 년

44

범위 내에서 마지막 셀을 선택하기 위해 LAST () 함수는 현재 구현되지 않았습니다. 그러나 귀하의 예를 따르십시오.

=LAST(G2:G9999)

다음 과 같은 방법으로 INDEX ()COUNT () 함수를 사용하여 마지막 셀을 얻을 수 있습니다 .

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

spreedsheet에 동일한 문제 (sheet , cell )를 발견하고 해결 한 실제 예제 가 있습니다 . 문서 내의 다른 시트를 참조해도 완벽하게 작동합니다.OrzamentosI5


1
이것은 훌륭하게 작동하며 시트가 변경되면 자동 업데이트됩니다. 감사!
TinaMarie 2012

8
이 제안의 간결함이 마음에 들지만 COUNT ()는 빈 셀을 계산하지 않기 때문에 대상 범위에 일부 빈 셀이 포함 된 경우 (위의 원래 질문에서 언급했듯이) 작동하지 않는 것 같습니다.
존 슈나이더

COUNTA열의 값 사이에 공백이 하나도없는 것이 확실한 경우 @JonSchneider를 사용할 수 있습니다 . dohmoose의 답변에 대한 내 의견을 참조하십시오.
Christiaan Westerbeek

:G마지막 요소를 나타내는 이유는 무엇 입니까? 문서화되어 있습니까?
flow2k

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나를 위해 실패합니다.)

다음 코드가 작동합니다 ( 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) )

각 반복의 단계 및 기능 + 제한 사항을 안내하는 데 매우 유용합니다. 각 행의 마지막 값을 가져와야했는데 일부는 여러 개의 공백이 있습니다. 이것은 매력처럼 작동했습니다. 감사합니다!
Christiaan Adams

9

텍스트 값 열에서 마지막 값을 반환하려면 COUNTA를 사용해야하므로 다음 공식이 필요합니다.

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

1
그러나 값 사이에 공백이 하나도없는 경우에만. 있는 경우 COUNTAwith INDEX는 열의 마지막 값을 반환하지 않습니다.
Christiaan Westerbeek

7

이 시도: =INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))

마지막 값을 찾고있는 열이 B라고 가정합니다.

그리고 예, 그것은 공백으로 작동합니다.


6

이제 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 도움말 포럼의 토론도 참조하십시오. 수식을 강제로 다시 계산하려면 어떻게해야합니까?


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

빈 셀이있을 때도 작동하는 좋은 솔루션입니다.
jochen nov.

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

제게는 이것이 "정답"입니다. 합리적으로 컴팩트하고 이해하기 쉬우 며 블랭크와 함께 작동합니다.
aardvarkk

4

공백이있는 열에서 다음을 사용하여 마지막 값을 얻을 수 있습니다.

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

좋은 솔루션입니다. 그래도 @Pedro의 변형 (INDEX 및 MAX 사용)이 SORT를 사용하는 것보다 약간 더 효율적일 수 있다고 생각합니다.
jochen nov.

4

대답

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

LibreOffice에서 제대로 작동하지 않습니다. 그러나 조금만 변경하면 완벽하게 작동합니다.

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

실제 범위가 다음보다 작은 경우에만 항상 작동합니다. (G2:G10000)


이 게시물 리브레 오피스 관련 "구글 스프레드 시트"와 "Google 애플리케이션 스크립트", 아무것도 태그되었습니다 ... 당신은 주제 떨어져있어
INSAS 서지

질문의 제목 인 Selecting the last value of a column 은 LibreOffice 또는 Numbers를 사용하여 가난한 영혼이 쉽게 찾을 수 있으므로 별로 멀지 않은 주제 입니다. 나는 위험 할만큼 충분히 알고있는 스프레드 시트 아마추어입니다. 제가 수집 할 수있는 것은 범위에 대한 두 번째 인수가 열일 경우 나머지 열을 선택하여 사람들이 발견 한 매우 많은 수의 해킹을 사용할 필요가 없도록 Google이 만들었다는 것입니다.
Aaron

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의 차이점은 숫자와 텍스트의 차이에 있으며 여기서는 관련이 없습니다.
mhsmith


2

테이블 하단에서 공백을 제거하는 데 도움이되는 약간의 변형을 찾았습니다. = index (G2 : G, COUNTIF (G2 : G, "<>"))


1

아무도이 대답을하지 않았던 것에 놀랐습니다. 그러나 이것은 가장 짧아야하며 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)

비어 있지 않은 행 의 MAXimum 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)))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.