티스토리 뷰

참고 : http://stackoverflow.com/questions/350264/how-can-i-perform-a-reverse-string-search-in-excel-without-using-vba

 

 출처 : http://taskin_rits.blog.me/100174815434

 

내가 엑셀 관련 포스팅을 하게 될 줄은 몰랐다...

 

근데 진짜 너무 신기한 발상이라서...

 

 

 

엑셀에서는 문자열 내에 특정 문자열이 몇 번째에 존재하는지 알려주는 함수 FIND()가 있다.

 

하지만 이 함수는 왼쪽 -> 오른쪽 검색을 지원하고,

 

오른쪽 -> 왼쪽 검색을 지원하는 함수 (RFIND()같은거...)는 존재하지 않는다.

 

하지만,

 

 

 

내가 오늘 파일 경로로부터 확장자를 얻으려고 관련 내용을 검색해보다...

 

이 글 맨 위에 적은 링크에서 엄청 신박한 해결책을 발견했다.

 

결론부터 말하자면 이렇게 쓴다.

 

FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))

 

 

구현 원리는 이렇다.

 

찾고자 하는 문자가 "."이라고 하자,

SUBSTITUTE라는 함수는 문자열 내의 특정 문자를 원하는 문자로 치환해주는 기능을 수행하는데,

이걸 이용해서 문자열 내의 "."를 모두 ""(빈문자열)로 바꾼다.

그러면 문자열의 총 길이가 줄어들겠지?

줄어든 길이가 바로 "."가 등장하는 횟수다.

 

다시 SUBSTITUTE를 설명하자면, 이 함수는 네 번째 인자를 넣을 수 있다.

네 번째 인자의 의미는 다음과 같다.

 

"치환하고자 하는 문자열이 여러개가 올 때, 몇 번째 문자열을 치환할 것인지 정한다."

 

그래서 첫 번째에서 구했던 "."가 등장하는 횟수SUBSTITUTE의 네 번째 인자에다가 넣으면

맨 마지막에 등장하는 "."의 위치에 특정 문자(나는 "|"로 했다)를 넣어준다.

 

이제 치환된 특정 문자를 FIND로 찾아주기만 하면 Reversed Find가 구현된다.

 

 

 

 

무에서 유를 창조하는 듯한 어느 양키의 실력에...

난 감탄해버렸다... ㅠㅠ

--------------------------------------------------------------------------

 

저도 감탄 요................

엑셀계의 혁신.

 

<응용 사례1>

원래 값 : /data2/wasdata/wasdata/musiconApp/ncsWeb/js/login.js

공식 : =RIGHT(E155, LEN(E155)-FIND("|",SUBSTITUTE(E155,"/","|",LEN(E155)-LEN(SUBSTITUTE(E155,"/","")))))

결과 값 : login.js

 

 

 

<응용 사례2>

원래 값 : /data2/wasdata/wasdata/musiconApp/ncsWeb/js/login.js

공식 : =LEFT(E155, FIND("|",SUBSTITUTE(E155,"/","|",LEN(E155)-LEN(SUBSTITUTE(E155,"/","")))))

결과 값 : /data2/wasdata/wasdata/musiconApp/ncsWeb/js/

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함