문자열 목록이 포함 된 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)))))