답변:
이것은 텍스트와 숫자 모두에서 작동하며 빈 셀이 있는지 상관하지 않습니다. 즉, 비어 있지 않은 마지막 셀을 반환합니다.
배열 입력이어야합니다 . 즉, 입력하거나 붙여 넣은 후 Ctrl-Shift-Enter를 누릅니다 . 아래는 A 열에 대한 것입니다.
=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A))))
CELL()
또는에 전달할 수 있음 OFFSET()
). 반면 에 더 많은 찬성 투표를 하면 값이 어디에 있는지 알려주지 않고 값을 반환합니다.
다음과 같은 간단한 공식을 사용하는 것이 훨씬 빠릅니다.
=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)
아래 이미지는 차이점을 보여줍니다.
LOOKUP
마지막 인수 result_vector
가 선택 사항 이라는 문서 . 그러나 생략하면 매우 이상한 결과가 나옵니다.
LOOKUP
함수가를 찾을 수 없으면 lookup_value
함수는 다음 lookup_vector
과 같거나 작은 가장 큰 값과 일치합니다. lookup_value.
" 오류 =LOOKUP(2,A:A<>"",A:A)
를 생성하지 않고 사용 하면 중간에 일부 값을 반환하는 것 같습니다. 벡터. 이 경우 정확한 기능을 찾지 못했습니다. #DIV/0!
1/...
=LOOKUP(2,1/(A:A<>""),ROW(A:A))
하지만 추가 ROW
기능을 추가하는 것 "휘발성"효과 - 수식 wroksheet에 셀이 변경 될 때마다 재 계산된다
다음은 또 다른 옵션입니다. =OFFSET($A$1;COUNTA(A:A)-1;0)
COUNTA
대신 사용 COUNT
). 빈 셀은 말할 것도 없습니다.
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에서 작동하는 방식을 활용하여 배열 작업을 수행해야하는 필요성을 파악할 수 있지만 배열 수식없이 수행합니다. 나는 누군가가 제안 된 합산 솔루션의 아름다움, 단순성 및 우아함을 나만큼이나 평가할 수 있기를 바랍니다. 위의 솔루션의 메모리 효율성을 증명하지는 않습니다. 단순하고, 아름답게 보이며, 의도 한 목적을 돕고, 다른 목적으로 사용을 확장 할 수있을만큼 유연합니다. :)
도움이 되었기를 바랍니다!
모두 제일 좋다!
이 질문이 오래되었다는 것을 알고 있지만 제공된 답변에 만족하지 않습니다.
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는 오버 헤드가 가장 낮고 비 휘발성이므로 많은 데이터로 작업하는 경우 사용하는 것이 가장 좋습니다.
TRUE
/ FALSE
) 이있는 셀 이 있으면 감지되지 않습니다. 이 답변이 방탄이 아니라는 사실에도 불구하고이 답변이 성능에 미치는 영향이 가장 적다고 생각합니다.
=INDEX(N:N,MATCH(1E+306,N:N,1))
이것은 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))
.
=INDEX(19:19,COUNTA(19:19))
가능한 배열 수식없이 대안적인 솔루션 보다 강력한 보다도 배열 수식없이 용액 A (a 행 힌트)와 이전의 응답은 , 인
=INDEX(A:A,INDEX(MAX(($A:$A<>"")*(ROW(A:A))),0))
이 답변 을 예로 참조하십시오 . 했네 브래드 와 배리 후디니 해결 도움이, 이 질문을 .
배열이 아닌 공식을 선호하는 가능한 이유는 다음과 같습니다.
공식 Microsoft 페이지 ( "배열 수식 사용의 단점"찾기)
배열 수식은 마법처럼 보일 수 있지만 몇 가지 단점도 있습니다.
배열 공식 이단 .
A
항목을 D
. 내가 뭘 잘못하고 있죠?
열 (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 ()는 셀 값을 반환합니다.
=INDEX(A:A, COUNTA(A:A), 1)
여기 에서 가져온
=MATCH("*";A1:A10;-1)
텍스트 데이터 용
=MATCH(0;A1:A10;-1)
수치 데이터
나는 모든 비 휘발성 버전을 시도했지만 위에 주어진 하나의 버전이 작동하지 않았습니다 .. Excel 2003 / 2007update. 확실히 이것은 Excel 2003에서 수행 할 수 있습니다. 배열이나 표준 공식이 아닙니다. 공백, 0 또는 # 값 오류가 발생합니다. 그래서 저는 변덕스러운 방법에 의지합니다 ..이게 효과가 있었어요 ..
= LOOKUP (2,1 / (T4 : T369 <> ""), T4 : T369)
@Julian Kroné .. ";"사용 ","대신 작동하지 않습니다! MS 엑셀이 아닌 Libre Office를 사용하고 있다고 생각하십니까? LOOKUP은 매우 성가신 변동성이있어서 최후의 수단으로 만 사용합니다.
이 코드를 VBA 모듈에 배치하십시오. 저장. 기능에서 사용자 정의는이 기능을 찾습니다.
Function LastNonBlankCell(Range As Excel.Range) As Variant
Application.Volatile
LastNonBlankCell = Range.End(xlDown).Value
End Function
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))
그레이트 스레드!
배열 사용을 두려워하지 않는다면 다음은 문제를 해결하는 매우 간단한 공식입니다.
= SUM (IF (A : A <> "", 1,0))
이것은 배열 수식이므로 CTRL + SHIFT + ENTER를 눌러야합니다.
버전 추적 (숫자 시작 부분에 문자 v 추가)의 경우 Xcelsius (SAP 대시 보드)에서 잘 작동하는 것으로 나타났습니다.
="v"&MAX(A2:A500)