문자열 목록이 포함 된 Excel 스프레드 시트가 있습니다. 각 문자열은 여러 단어로 구성되어 있지만 각 문자열의 단어 수는 다릅니다.
VBA가없는 내장 Excel 함수를 사용하면 각 문자열의 마지막 단어를 분리하는 방법이 있습니까?
예 :
당신은 인간으로 분류됩니까? -> 인간?
부정적, 나는 고기 아이스 캔디-> 아이스 캔디
아지즈! 빛! -> 빛!
문자열 목록이 포함 된 Excel 스프레드 시트가 있습니다. 각 문자열은 여러 단어로 구성되어 있지만 각 문자열의 단어 수는 다릅니다.
VBA가없는 내장 Excel 함수를 사용하면 각 문자열의 마지막 단어를 분리하는 방법이 있습니까?
예 :
당신은 인간으로 분류됩니까? -> 인간?
부정적, 나는 고기 아이스 캔디-> 아이스 캔디
아지즈! 빛! -> 빛!
답변:
이것은 브래드의 원래 게시물을 기반으로 테스트되어 작동합니다.
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1," ","|",
LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))
원래 줄에 파이프 "|"가 포함될 수있는 경우 위의 두 문자를 소스에 표시되지 않는 다른 문자로 바꿉니다. (번역 할 때 인쇄 할 수없는 문자가 제거되어 Brad의 원본이 손상된 것 같습니다).
보너스 : 작동 방식 (오른쪽에서 왼쪽으로) :
LEN(A1)-LEN(SUBSTITUTE(A1," ",""))– 원래 문자열의 공백 수
SUBSTITUTE(A1," ","|", ... )– 마지막 공백 만 a로 바꿉니다 – 대체 |
FIND("|", ... )된 절대 위치 |(마지막 공백)를 찾습니다
Right(A1,LEN(A1) - ... ))– 그 이후의 모든 문자를 반환합니다|
편집 : 소스 텍스트에 공백이없는 경우를 고려하려면 수식 시작 부분에 다음을 추가하십시오.
=IF(ISERROR(FIND(" ",A1)),A1, ... )
이제 전체 공식을 작성하십시오.
=IF(ISERROR(FIND(" ",A1)),A1, RIGHT(A1,LEN(A1) - FIND("|",
SUBSTITUTE(A1," ","|",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))))
또는 =IF(COUNTIF(A1,"* *")다른 버전 의 구문을 사용할 수 있습니다 .
원래 문자열에 마지막 위치에 공백이 포함 된 경우 모든 공백을 세면서 트림 기능을 추가하십시오. 함수를 다음과 같이 작성하십시오.
=IF(ISERROR(FIND(" ",B2)),B2, RIGHT(B2,LEN(B2) - FIND("|",
SUBSTITUTE(B2," ","|",LEN(TRIM(B2))-LEN(SUBSTITUTE(B2," ",""))))))
이것이 제가 큰 성공을 거둔 기술입니다.
=TRIM(RIGHT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))
문자열에서 첫 번째 단어를 얻으려면 RIGHT에서 LEFT로 변경하십시오.
=TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))
또한 A1을 텍스트가있는 셀로 바꿉니다.
" "를 내 구분 기호로 바꿨습니다. 100내가 실수하지 않으면 두 개의 문자를 100 자의 문자열로 제한하는 것 같습니다
=TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(A1, ".", REPT(".", 100)), 100), ".", ""))
Jerry의 대답의 더 강력한 버전 :
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
문자열의 길이, 선행 또는 후행 공백 또는 기타 다른 것에 관계없이 작동하며 여전히 짧고 간단합니다.
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))파일 확장자를 얻 도록 공식을 수정했습니다 .
SUBSTITUTE이 모든 문자뿐 아니라 공간에 대한 작업을 수행 할 수 있습니다. =TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),"/",REPT("/",LEN(TRIM(A1)))),LEN(TRIM(A1))),"/",""))여기서 "/"는 구분 문자입니다.
" ; "입력 값이있는 공백으로 둘러싸인 세미콜론 : "Technology Sprint 24 ; Sprint 4"반환 : "; Sprint 4". @PProteus가 추가 한 솔루션을 사용하고 있습니다.
TRIM(A1)으로 : TRIM(SUBSTITUTE(A1, "strDelimeter", ";"))모든 장소에서, 새로운 자 분리해야하기 위해 : ";"더 나은 사용하는 경우에도 또는를 char()찾을 기능을 정말 예기치 않은 캐릭터.
TRIM두 번째 SUBSTITUTE를 추가 한 후 기능이 필요하지 않습니다 . 공식은이 부분을 제거하는 예상 결과를 제공합니다.=SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),";",REPT(";",LEN(TRIM(A1)))),LEN(TRIM(A1))),";","")
나는 구글 에서 이것을 찾았고 Excel 2003에서 테스트했으며 나에게 효과적이다.
=IF(COUNTIF(A1,"* *"),RIGHT(A1,LEN(A1)-LOOKUP(LEN(A1),FIND(" ",A1,ROW(INDEX($A:$A,1,1):INDEX($A:$A,LEN(A1),1))))),A1)
[편집] 댓글을 달기에 충분한 담당자가 없기 때문에 이것이 가장 좋은 장소 인 것 같습니다 ... BradC의 답변은 후행 공백이나 빈 셀에서는 작동하지 않습니다 ...
[2 차 편집] 실제로, 그것은 작동하지 않습니다 한마디로 ...
=RIGHT(TRIM(A1),LEN(TRIM(A1))-FIND(CHAR(7),SUBSTITUTE(" "&TRIM(A1)," ",CHAR(7),
LEN(TRIM(A1))-LEN(SUBSTITUTE(" "&TRIM(A1)," ",""))+1))+1)
이것은 매우 강력합니다. 공백, 선행 / 트레일 링 공백, 다중 공백, 다중 선행 / 트레일 링 공백이없는 문장에서 작동합니다. 세로 막대 "|"가 아닌 구분 기호에 char (7)을 사용했습니다. 원하는 텍스트 항목 인 경우를 대비하여.
이것은 매우 깨끗하고 컴팩트하며 잘 작동합니다.
{=RIGHT(A1,LEN(A1)-MAX(IF(MID(A1,ROW(1:999),1)=" ",ROW(1:999),0)))}
공백이나 한 단어가 없으면 오류 트랩이 없지만 추가하기 쉽습니다.
편집 :
후행 공백, 한 단어 및 빈 셀 시나리오를 처리합니다. 나는 그것을 깨는 방법을 찾지 못했습니다.
{=RIGHT(TRIM(A1),LEN(TRIM(A1))-MAX(IF(MID(TRIM(A1),ROW($1:$999),1)=" ",ROW($1:$999),0)))}
=RIGHT(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))
Jerry와 Joe의 답변에 추가하려면 마지막 단어보다 먼저 텍스트를 찾으려면 다음을 사용할 수 있습니다.
=TRIM(LEFT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))))-LEN(TRIM(A1))))
A1에서 'My little cat'을 사용하면 'My little'이됩니다 (Joe and Jerry 's는 'cat'
Jerry와 Joe가 마지막 단어를 분리하는 것과 같은 방식으로 왼쪽의 모든 것을 가져옵니다.
줄을 뒤집을 수 있다고 상상해보십시오. 그렇다면 정말 쉽습니다. 문자열에서 작업하는 대신 :
"My little cat" (1)
당신은 함께 일합니다
"tac elttil yM" (2)
으로 =LEFT(A1;FIND(" ";A1)-1)A2에서 당신이 얻을 수 "My"(1)와 "tac"반전 (2)로 "cat", (1)의 마지막 단어.
문자열을 반전시키기 위해 몇 가지 VBA가 있습니다. 공개 VBA 기능을 선호합니다 ReverseString.
설명 된대로 위를 설치하십시오. 그런 다음 A1의 문자열 "My little cat"과 A2 의이 기능을 사용하십시오.
=ReverseString(LEFT(ReverseString(A1);IF(ISERROR(FIND(" ";A1));
LEN(A1);(FIND(" ";ReverseString(A1))-1))))
"cat"A2에서 볼 수 있습니다 .
위의 방법은 단어가 공백으로 구분되어 있다고 가정합니다. 이 IF절은 단일 단어 = 셀에 공백이없는 셀에 적용됩니다. 참고 : TRIM및 CLEAN원래 문자열이 아니라 유용하다. 원칙적으로 A1에서 전체 문자열을 반전시키고 마지막 (역순) 단어 옆에있는 반전 된 문자열에서 첫 번째 공백을 찾습니다 (예 :) "tac ". LEFT이 단어를 선택하고 다른 문자열 반전은 단어의 원래 순서 ( " cat")를 재구성합니다 . -1의 끝에 FIND문은 공백을 제거합니다.
아이디어는있는 문자열의 첫 번째 (!) 단어를 추출하기 쉽다는 점이다 LEFT과 FIND첫 번째 빈을 보내고. 그러나 마지막 (!) 단어의 RIGHT경우 불행히도 FIND에는 문자열을 분석하려는 방향에 대한 플래그가 없으므로 함수는 잘못된 선택입니다.
따라서 전체 문자열이 간단하게 반전됩니다. LEFT그리고 FIND정상적으로 작동하지만 추출 된 문자열이 반전됩니다. 그러나 줄을 뒤집는 방법을 알고 나면 그의 큰 문제는 아닙니다. ReverseString수식 의 첫 번째 문이이 작업을 수행합니다.
이를 달성하는 또 다른 방법은 다음과 같습니다.
=IF(ISERROR(TRIM(MID(TRIM(D14),SEARCH("|",SUBSTITUTE(TRIM(D14)," ","|",LEN(TRIM(D14))-LEN(SUBSTITUTE(TRIM(D14)," ","")))),LEN(TRIM(D14))))),TRIM(D14),TRIM(MID(TRIM(D14),SEARCH("|",SUBSTITUTE(TRIM(D14)," ","|",LEN(TRIM(D14))-LEN(SUBSTITUTE(TRIM(D14)," ","")))),LEN(TRIM(D14)))))