열의 비어 있지 않은 마지막 셀


답변:


76

이것은 텍스트와 숫자 모두에서 작동하며 빈 셀이 있는지 상관하지 않습니다. 즉, 비어 있지 않은 마지막 셀을 반환합니다.

배열 입력이어야합니다 . 즉, 입력하거나 붙여 넣은 후 Ctrl-Shift-Enter를 누릅니다 . 아래는 A 열에 대한 것입니다.

=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A))))

@ Jean-François, 죄송합니다. 어젯밤에 댓글에서 그 사실을 인정했지만 실수로 원래 게시물에 올렸습니다. XL 2007 및 2010에서 작동합니다. 감사합니다.
Doug Glancy 2011 년

Excel 2007에서는 작동하지 않습니다. 정확한 수식을 붙여 넣었습니다. 값이 127ish까지 내려가는 = ROW () 열 (A)이 있고 수식은 "1"을 반환합니다.
DontFretBrett

2
@DontFretBrett, 대답에 지정된대로 Ctrl-Shift-Enter를 사용하여 배열 수식으로 입력해야합니다.
Doug Glancy 2013 년

@DougGlancy는 내 부분에서 실패합니다. 감사합니다!
DontFretBrett 2013 년

1
중요한 차이점은 이것이 셀 참조를 반환한다는 것입니다 (예 : CELL()또는에 전달할 수 있음 OFFSET()). 반면 에 더 많은 찬성 투표를 하면 값이 어디에 있는지 알려주지 않고 값을 반환합니다.
GSerg

128

다음과 같은 간단한 공식을 사용하는 것이 훨씬 빠릅니다.

=LOOKUP(2,1/(A:A<>""),A:A)

Excel 2003의 경우 :

=LOOKUP(2,1/(A1:A65535<>""),A1:A65535)

다음과 같은 이점이 있습니다.

  • 배열 수식 이 아닙니다.
  • 휘발성 공식 이 아닙니다

설명:

  • (A:A<>"") 반환 배열 {TRUE,TRUE,..,FALSE,..}
  • 1/(A:A<>"")이 배열을 {1,1,..,#DIV/0!,..}.
  • 이후 LOOKUP상하는 정렬 로 배열 오름차순 순서 및 경우 것을 고려한 LOOKUP함수는 정확한 매치를 찾을 수는 최대 값을 선택 lookup_range(우리의 경우 {1,1,..,#DIV/0!,..}(우리의 경우 나 값과 같은보다 작하다) 2), 수식은 1배열에서 마지막 을 찾고 result_range(세 번째 매개 변수- A:A) 에서 해당 값을 반환합니다 .

또한 약간의 참고 사항 -위의 수식은 오류가있는 셀을 고려하지 않습니다 (비어 있지 않은 마지막 셀에 오류가있는 경우에만 볼 수 있음). 이를 고려하려면 다음을 사용하십시오.

=LOOKUP(2,1/(NOT(ISBLANK(A:A))),A:A)

아래 이미지는 차이점을 보여줍니다.

여기에 이미지 설명 입력


설명과 멋진 사진에 감사드립니다. 아직 몇 가지 질문이 열려 있습니다. 1. LOOKUP마지막 인수 result_vector가 선택 사항 이라는 문서 . 그러나 생략하면 매우 이상한 결과가 나옵니다.
Honza 지덱

2. 문서에 " LOOKUP함수가를 찾을 수 없으면 lookup_value함수는 다음 lookup_vector과 같거나 작은 가장 큰 값과 일치합니다. lookup_value." 오류 =LOOKUP(2,A:A<>"",A:A)를 생성하지 않고 사용 하면 중간에 일부 값을 반환하는 것 같습니다. 벡터. 이 경우 정확한 기능을 찾지 못했습니다. #DIV/0!1/...
Honza 지덱

1
아주 좋은 설명입니다. 최근에 배열 수식에서 배열이 아닌 버전으로 수식을 이동하여 계산 시간을 단축 한 결과, 저는 항상 배열 수식없이 작동하는 논리를 찾고 있습니다.
tobriand 2014-07-29

1
@Enissay, 예, 하나의 행 번호를 반환 =LOOKUP(2,1/(A:A<>""),ROW(A:A))하지만 추가 ROW기능을 추가하는 것 "휘발성"효과 - 수식 wroksheet에 셀이 변경 될 때마다 재 계산된다
드미트리 Pavliv

1
안녕. 게시 해 주셔서 감사합니다. 궁금한 점은 exceljet.net/formula/get-value-of-last-non-empty-cell 에서 정확히 동일한 공식과 거의 동일한 문구를 찾았습니다 . 그것도 당신인가요, 아니면 다른 사람인가요? 명백한 연결이 없습니다.
Solomon Rutzky 2016 년

24

다음은 또 다른 옵션입니다. =OFFSET($A$1;COUNTA(A:A)-1;0)


9
숫자가 아닌 값을 가진 셀이있는 경우에는 작동하지 않습니다 ( COUNTA대신 사용 COUNT). 빈 셀은 말할 것도 없습니다.
Jean-François Corbett

3
이것은 맨 위에 있어야합니다. 간단하고 흔하지 않은 기능의 모호한 세부 사항에 의존하지 않습니다.
Tmdean

9
결과에 공백이 포함 된 경우 잘못되었으므로 맨 위에 있으면 안됩니다.
Myrddin Emrys

17

Doug Glancy의 답변이 제공 한 위대한 리드에 영감을 받아 어레이 공식 없이도 동일한 작업을 수행 할 수있는 방법을 생각해 냈습니다. 이유를 묻지 마십시오.하지만 가능한 경우 배열 수식을 사용하지 않으려 고합니다 (특정한 이유가 아니라 제 스타일 일뿐입니다).

여기있어:

=SUMPRODUCT(MAX(($A:$A<>"")*(ROW(A:A))))

A 열을 참조 열로 사용하여 비어 있지 않은 마지막 행 찾기

=SUMPRODUCT(MAX(($1:$1<>"")*(COLUMN(1:1))))

행 1을 참조 행으로 사용하여 비어 있지 않은 마지막 열 찾기

이것은 동적으로 명명 된 범위를 효율적으로 정의하기 위해 인덱스 기능과 함께 더 활용 될 수 있지만, 이것은 여기에서 다루는 즉각적인 질문과 관련이 없기 때문에 다른 게시물에 대한 것입니다.

위의 방법을 Excel 2010에서 "기본적으로"및 "호환성 모드"(이전 버전의 Excel 용)에서 테스트했으며 작동합니다. 다시 말하지만, Ctrl + Shift + Enter를 할 필요가 없습니다. sumproduct가 Excel에서 작동하는 방식을 활용하여 배열 작업을 수행해야하는 필요성을 파악할 수 있지만 배열 수식없이 수행합니다. 나는 누군가가 제안 된 합산 솔루션의 아름다움, 단순성 및 우아함을 나만큼이나 평가할 수 있기를 바랍니다. 위의 솔루션의 메모리 효율성을 증명하지는 않습니다. 단순하고, 아름답게 보이며, 의도 한 목적을 돕고, 다른 목적으로 사용을 확장 할 수있을만큼 유연합니다. :)

도움이 되었기를 바랍니다!

모두 제일 좋다!


1
배열이 아닌 수식을 사용하는 이유에 대해서는 아래 답변을 참조하십시오 .
sancho.s ReinstateMonicaCellio

17

이 질문이 오래되었다는 것을 알고 있지만 제공된 답변에 만족하지 않습니다.

  • LOOKUP, VLOOKUP 및 HLOOKUP에는 성능 문제가 있으므로 절대 사용해서는 안됩니다.

  • 배열 함수는 오버 헤드가 많고 성능 문제도있을 수 있으므로 최후의 수단으로 만 사용해야합니다.

  • COUNT 및 COUNTA는 데이터가 연속적으로 비어 있지 않은 경우 문제가 발생합니다. 즉, 공백이 있고 해당 범위에 다시 데이터가있는 경우

  • INDIRECT는 휘발성이므로 최후의 수단으로 만 사용해야합니다.

  • 오프셋은 변동성이 있으므로 최후의 수단으로 만 사용해야합니다.

  • 가능한 마지막 행 또는 열 (예 : Excel 2003의 65536 번째 행)에 대한 참조는 강력하지 않으며 추가 오버 헤드가 발생합니다.

이것이 내가 사용하는 것입니다

  • 데이터 유형이 혼합 된 경우 : =max(MATCH(1E+306,[RANGE],1),MATCH("*",[RANGE],-1))

  • 데이터에 숫자 만 포함 된 것으로 알려진 경우 : =MATCH(1E+306,[RANGE],1)

  • 데이터에 텍스트 만 포함 된 것으로 알려진 경우 : =MATCH("*",[RANGE],-1)

MATCH는 오버 헤드가 가장 낮고 비 휘발성이므로 많은 데이터로 작업하는 경우 사용하는 것이 가장 좋습니다.


이것은 좋은 대답 (+1)이지만이 방법이 놓칠 수있는 몇 가지 허점이 여전히 있습니다. 예를 들어 논리 값 ( TRUE/ FALSE) 이있는 셀 이 있으면 감지되지 않습니다. 이 답변이 방탄이 아니라는 사실에도 불구하고이 답변이 성능에 미치는 영향이 가장 적다고 생각합니다.
ImaginaryHuman072889

2
Match는 셀 값이 아닌 인덱스를 반환합니다. index 함수를 사용하여 값을 가져올 수 있습니다. 또한 [RANGE]가 무엇인지에 대한 내용을 포함해야합니다. "N : N"을 사용하여 전체 열을 선택했습니다. 저에게 도움이 된 예는 다음과 같습니다. =INDEX(N:N,MATCH(1E+306,N:N,1))
swimfar 2018-09-07

10

이것은 Excel 2003에서 작동합니다 (나중에 사소한 편집 포함, 아래 참조). Ctrl + Shift + Enter (Enter뿐만 아니라)를 눌러이를 배열 수식으로 입력합니다.

=IF(ISBLANK(A65536),INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535)))),A65536)

Excel 2003 에서는 전체 열에 배열 수식을 적용 할 수 없습니다 . 그렇게하면 수익이 발생합니다 #NUM!. 예상치 못한 결과가 발생할 수 있습니다! (편집 : 같은 : Microsoft에서 정보를 충돌하는 일을 하거나 하지 않을 수 있습니다 엑셀 2007에 대한 사실, 문제가 있습니다 2010에서 수정 된 )

그건 내가 범위에 배열 수식을 적용 할 이유 A1:A65535이며 마지막 셀, 특별한 치료를 포기 A65536단지 말할 수 엑셀 2003 년 A:A또는 A1:A65536후자 자동으로 되돌립니다로를 A:A.

A65536비어 있다고 확신하는 경우 해당 IF부분을 건너 뛸 수 있습니다 .

=INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535))))

Excel 2007 또는 2010을 사용하는 경우 마지막 행 번호는 65536이 아니라 1048576이므로 위의 내용을 적절하게 조정하십시오.

데이터 중간에 빈 셀이 없으면 더 간단한 공식 인 =INDEX(A:A,COUNTA(A:A)).


대신 열 ROW, 이것은 나를 위해 일한=INDEX(19:19,COUNTA(19:19))
Serj 세이건

8

가능한 배열 수식없이 대안적인 솔루션 보다 강력한 보다도 배열 수식없이 용액 A (a 행 힌트)와 이전의 응답은 , 인

=INDEX(A:A,INDEX(MAX(($A:$A<>"")*(ROW(A:A))),0))

이 답변 을 예로 참조하십시오 . 했네 브래드배리 후디니 해결 도움이, 이 질문을 .

배열이 아닌 공식을 선호하는 가능한 이유는 다음과 같습니다.

  1. 공식 Microsoft 페이지 ( "배열 수식 사용의 단점"찾기)
    배열 수식은 마법처럼 보일 수 있지만 몇 가지 단점도 있습니다.

    • 때때로 Ctrl + Shift + Enter를 누르는 것을 잊을 수 있습니다. 배열 수식을 입력하거나 편집 할 때마다이 키 조합을 눌러야합니다.
    • 다른 사용자는 귀하의 공식을 이해하지 못할 수 있습니다. 배열 수식은 비교적 문서화되어 있지 않으므로 다른 사람이 통합 문서를 수정해야하는 경우 배열 수식을 사용하지 않거나 해당 사용자가 변경 방법을 이해하고 있는지 확인해야합니다.
    • 컴퓨터의 처리 속도와 메모리에 따라 큰 배열 수식을 사용하면 계산 속도가 느려질 수 있습니다.
  2. 배열 공식 이단 .


나는 이것을 D 열과 함께 작동시킬 수 없습니다. 모든 A항목을 D. 내가 뭘 잘못하고 있죠?
Marc.2377

5

열 (A)에서 검색하는 경우 다음을 사용하십시오.

=INDIRECT("A" & SUMPRODUCT(MAX((A:A<>"")*(ROW(A:A)))))

범위가 A1 : A10이면 다음을 사용할 수 있습니다.

=INDIRECT("A" & SUMPRODUCT(MAX(($A$1:$A10<>"")*(ROW($A$1:$A10)))))

이 공식에서 :

SUMPRODUCT(MAX(($A$1:$A10<>"")*(ROW($A$1:$A10))))

비어 있지 않은 마지막 행 번호를 반환하고 indirect ()는 셀 값을 반환합니다.



2

=MATCH("*";A1:A10;-1) 텍스트 데이터 용

=MATCH(0;A1:A10;-1) 수치 데이터


답변에 코드 조각을 제공 할 때 코드 블록을 사용하십시오.
β.εηοιτ.βε 2015-04-15

이 공식은 우리에게 비어 있지 않은 마지막 셀이 아니라 비어 있지 않은 첫 번째 셀을 제공 할 것이라고 생각합니다.
Baodad

2

나는 모든 비 휘발성 버전을 시도했지만 위에 주어진 하나의 버전이 작동하지 않았습니다 .. Excel 2003 / 2007update. 확실히 이것은 Excel 2003에서 수행 할 수 있습니다. 배열이나 표준 공식이 아닙니다. 공백, 0 또는 # 값 오류가 발생합니다. 그래서 저는 변덕스러운 방법에 의지합니다 ..이게 효과가 있었어요 ..

= LOOKUP (2,1 / (T4 : T369 <> ""), T4 : T369)

@Julian Kroné .. ";"사용 ","대신 작동하지 않습니다! MS 엑셀이 아닌 Libre Office를 사용하고 있다고 생각하십니까? LOOKUP은 매우 성가신 변동성이있어서 최후의 수단으로 만 사용합니다.


0

이 코드를 VBA 모듈에 배치하십시오. 저장. 기능에서 사용자 정의는이 기능을 찾습니다.

Function LastNonBlankCell(Range As Excel.Range) As Variant
    Application.Volatile
    LastNonBlankCell = Range.End(xlDown).Value
End Function

2
이것은 반드시 마지막 빈 셀일 필요는 없으며 맨 위에서 시작하는 NEXT 빈 셀일뿐입니다.
Portland Runner

문제는 공식이 아니라 VBA에 관한 것입니다
패트릭 Honorez

0

텍스트 데이터의 경우 :

EQUIV("";A1:A10;-1)

수치 데이터 :

EQUIV(0;A1:A10;-1)

선택한 범위 (여기서는 A1 : A10)에서 비어 있지 않은 마지막 셀의 상대 인덱스를 제공합니다.

값을 얻으려면 -textually- 절대 셀 참조를 빌드 한 후 INDIRECT를 통해 액세스하십시오. 예 :

INDIRECT("A" & (nb_line_where_your_data_start + EQUIV(...) - 1))

0

나도 같은 문제가 있었다. 이 공식은 똑같이 잘 작동합니다.

=INDIRECT(CONCATENATE("$G$",(14+(COUNTA($G$14:$G$65535)-1))))

14는 계산하려는 행의 첫 번째 행의 행 번호입니다.

만성 발톱 니


0

HLOOKUP을 사용했습니다.

A1날짜가 있습니다. A2:A8다른 시간에 캡처 된 예측이있는 경우 최신 정보를 원합니다.

=Hlookup(a1,a1:a8,count(a2:a8)+1)

이것은 항목 수로 정의 된 조회 배열과 함께 표준 hlookup 수식을 사용합니다.


0

사이에 빈 셀이 없다는 것을 알고 있다면 가장 빠른 방법은 이것입니다.

=INDIRECT("O"&(COUNT(O:O,"<>""")))

비어 있지 않은 셀을 계산하고 적절한 셀을 참조합니다.

특정 범위에도 사용할 수 있습니다.

=INDIRECT("O"&(COUNT(O4:O34,"<>""")+3))

이것은 O4 : O34 범위에서 비어 있지 않은 마지막 셀을 반환합니다.


0

Microsoft Office 2013의 경우

비어 있지 않은 행의 "마지막 하나":

=OFFSET(Sheet5!$C$1,COUNTA(Sheet5!$C:$C)-2,0)

비어 있지 않은 "마지막"행 :

=OFFSET(Sheet5!$C$1,COUNTA(Sheet5!$C:$C)-1,0)

0

이 공식은 Office 2010에서 저와 함께 작동했습니다.

= LOOKUP (2; 1 / (A1 : A100 <> ""); A1 : A100)

A1 : 첫 번째 셀 A100 : 비교에서 마지막 셀 참조


0

W5ALIVE의 응답은 열에서 마지막 데이터 행을 찾는 데 사용하는 것과 가장 가깝다고 생각합니다. A 열의 데이터가있는 마지막 행을 찾고 있다고 가정하면보다 일반적인 조회를 위해 다음을 사용합니다.

=MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0))

첫 번째 MATCH는 마지막 텍스트 셀을 찾고 두 번째 MATCH는 마지막 숫자 셀을 찾습니다. IFERROR 함수는 첫 번째 MATCH가 모든 숫자 셀을 찾거나 두 번째 일치가 모든 텍스트 셀을 찾으면 0을 반환합니다.

기본적으로 이것은 W5ALIVE의 혼합 텍스트 및 숫자 솔루션의 약간 변형입니다.

타이밍 테스트에서 이는 동등한 LOOKUP 변형보다 훨씬 더 빠릅니다.

마지막 셀의 실제 값을 반환하려면 다음과 같이 간접 셀 참조를 사용하는 것을 선호합니다.

=INDIRECT("A"&MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0)))

sancho.s에서 제공하는 방법은 아마도 더 깨끗한 옵션 일 수 있지만 행 번호를 찾는 부분을 다음과 같이 수정합니다.

=INDEX(MAX((A:A<>"")*(ROW(A:A))),1)

유일한 차이점은 ", 1"은 첫 번째 값을 반환하는 반면 ", 0"은 값의 전체 배열을 반환한다는 것입니다 (하나만 제외하고 모두 필요하지 않음). 나는 여전히 색인 함수에 셀 주소를 지정하는 것을 선호하는 경향이 있습니다. 즉, 다음과 같이 셀 값을 반환합니다.

=INDIRECT("A"&INDEX(MAX((A:A<>"")*(ROW(A:A))),1))

그레이트 스레드!


0

배열 사용을 두려워하지 않는다면 다음은 문제를 해결하는 매우 간단한 공식입니다.

= SUM (IF (A : A <> "", 1,0))

이것은 배열 수식이므로 CTRL + SHIFT + ENTER를 눌러야합니다.


-1

나를 위해 일하는 간단한 것 :

=F7-INDEX(A:A,COUNT(A:A))

-1

좋아, 그래서 나는 질문자와 같은 문제가 있었고 두 가지 상위 답변을 모두 시도했습니다. 그러나 수식 오류 만 발생합니다. ","를 ";"로 바꿔야한다는 사실이 밝혀졌습니다. 공식이 작동합니다. XL 2007을 사용하고 있습니다.

예:

=LOOKUP(2;1/(A:A<>"");A:A)

또는

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

-3

버전 추적 (숫자 시작 부분에 문자 v 추가)의 경우 Xcelsius (SAP 대시 보드)에서 잘 작동하는 것으로 나타났습니다.

="v"&MAX(A2:A500)

1
엄격하게 오름차순에 의존하기 때문에 불충분하게 일반적으로 보입니다.
Nathan Tuggy 2015 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.