VBA를 사용하지 않고 Excel에서 리버스 문자열 검색을 수행하려면 어떻게해야합니까?


165

문자열 목록이 포함 된 Excel 스프레드 시트가 있습니다. 각 문자열은 여러 단어로 구성되어 있지만 각 문자열의 단어 수는 다릅니다.

VBA가없는 내장 Excel 함수를 사용하면 각 문자열의 마지막 단어를 분리하는 방법이 있습니까?

예 :

  당신은 인간으로 분류됩니까? -> 인간?
부정적, 나는 고기 아이스 캔디-> 아이스 캔디
                  아지즈! 빛! -> 빛!

4
인공적인 VBA 제약이없는 이유가 궁금합니다.
EBGreen

3
VBA로 쉽게 해결할 수 있지만 VBA가 아닌 솔루션이 있는지 궁금합니다. VBA는 대규모 데이터 세트에 성능이 저하되는 경향이 있습니다.
e.James

평소와 같이 두 가지 답변이 실제로 눈에 띄며 올바른 답변으로 선택할 답변을 결정하기가 어렵습니다. 이 경우 Jon과 BradC (Brad의 도움을 받아) 모두 올바른 작동 솔루션을 찾았습니다.
e.James

BradC의 솔루션은 두 가지 중 더 우아해 보였으므로 기능에 대한 편리한 설명을 제공합니다.
e.James

VBA를 부적절하게 만드는 이유를 나타내지 않으면 질문에 올바르게 대답하기가 어렵습니다 (VBA에 자체 매크로 및 함수를 작성하여 내장 함수와 동일하게 만들 수 있기 때문에).
dkretz

답변:


208

이것은 브래드의 원래 게시물을 기반으로 테스트되어 작동합니다.

=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," ",""))))))

1
충분히 감사 할 수 없습니다. 나머지 문자열도 필요했기 때문에 = RIGHT를 = LEFT로 변경하고 LEN (A1)을 제거하면 나머지를 얻을 수 있습니다. 그러나 모든 초기 다리 작업을 수행해 주셔서 감사합니다 :)
Luke Duddridge

4
+1 : 캐릭터의 인스턴스 수를 얻기위한 "LEN (A1) -LEN (SUBSTITUTE (A1," "," "))"트릭을 기억해야합니다.
anschauung

2
훌륭한 솔루션! 유일한 문제는 Excel에서 함수 이름을 지역화하므로 영어 이외의 Excel에 대한 수식을 다시 작성해야한다는 것입니다. 러시아어로 다시 작성된 변형은 다음과 같습니다. = ПРАВСИМВ (A1; ДЛСТР (A1) -ПОИСК ( "|"; ПОДСТАВИТЬ (A1; ""; "|"; ДЛСТР (A1) -ДЛСТР (ПОДСТАВИТЬ (A1; ""; "")))))
Michael Pliskin

이 대답은 연속 공백이 포함 된 문자열에서 끊어집니다.
somesapient

1
수식을 임시 열로 나누는 것이 좋습니다 (나중에 숨길 수 있음). 특별한 경우를 디버깅하는 데 매우 유용합니다.
wisbucky

84

이것이 제가 큰 성공을 거둔 기술입니다.

=TRIM(RIGHT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))

문자열에서 첫 번째 단어를 얻으려면 RIGHT에서 LEFT로 변경하십시오.

=TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))

또한 A1을 텍스트가있는 셀로 바꿉니다.


2
나를 위해 작동합니다-첫 번째 " "를 내 구분 기호로 바꿨습니다. 100내가 실수하지 않으면 두 개의 문자를 100 자의 문자열로 제한하는 것 같습니다
Benjineer

1
만약 우리가 다른 분리 문자를 사용한다면 우리는 끝에서도 그것을 제거해야합니다.=TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(A1, ".", REPT(".", 100)), 100), ".", ""))
dumbledad

7
매우 영리한 방법. 모든 공백을 100 공백으로 바꾼 다음 앞 / 뒤 공백없이 마지막 100자를 반환합니다.
Zenadix 2009 년

@ Benjineer 100 자보다 훨씬 긴 문자열에서 작동한다고 생각합니다. 100자는 한 단어의 크기를 제한합니다. 당신은 오른쪽 (또는 왼쪽) 백 문자를 사용하고 있습니다 ..... 101 문자의 단어 길이에 문제가 있다면, 문자열 전체가 100 문자 ... 3 개의 공백이있는 경우 ... 약 400 자의 문자열로 채워져 여전히 작동합니다. Jerry Beaucaire에게-매우 고맙습니다.
Tin Bum

22

Jerry의 대답의 더 강력한 버전 :

=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))

문자열의 길이, 선행 또는 후행 공백 또는 기타 다른 것에 관계없이 작동하며 여전히 짧고 간단합니다.


2
훌륭한 공식입니다. =TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))파일 확장자를 얻 도록 공식을 수정했습니다 .
Adarsh ​​Madrecha

2
더 하나는 SUBSTITUTE이 모든 문자뿐 아니라 공간에 대한 작업을 수행 할 수 있습니다. =TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),"/",REPT("/",LEN(TRIM(A1)))),LEN(TRIM(A1))),"/",""))여기서 "/"는 구분 문자입니다.
PProteus

@Joefinkle, 이것은 정말 간결하고 똑똑한 솔루션입니다. 구분 기호가 문자열 인 경우 모든 경우에 잘 작동하지 않는다는 것을 언급하기 위해 꽤 잘 작동합니다. 여기서 구분 기호에 대한 예 : " ; "입력 값이있는 공백으로 둘러싸인 세미콜론 : "Technology Sprint 24 ; Sprint 4"반환 : "; Sprint 4". @PProteus가 추가 한 솔루션을 사용하고 있습니다.
David Leal

구분 기호는 문자열 인 경우 가능한 해결 방법은 @PProteus 공식에 교체 예를 들어, 일부 특수 문자로 전에 교체하는 것입니다 TRIM(A1)으로 : TRIM(SUBSTITUTE(A1, "strDelimeter", ";"))모든 장소에서, 새로운 자 분리해야하기 위해 : ";"더 나은 사용하는 경우에도 또는를 char()찾을 기능을 정말 예기치 않은 캐릭터.
David Leal

1
@ PProteus 당신은 일반적인 경우 단일 문자 솔루션에 대한 TRIM두 번째 SUBSTITUTE를 추가 한 후 기능이 필요하지 않습니다 . 공식은이 부분을 제거하는 예상 결과를 제공합니다.=SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),";",REPT(";",LEN(TRIM(A1)))),LEN(TRIM(A1))),";","")
David Leal

13

나는 구글 에서 이것을 찾았고 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 차 편집] 실제로, 그것은 작동하지 않습니다 한마디로 ...


가장 가까운 솔루션이지만 후행 공백으로 인해 Trim ()이 발생합니다.
EBGreen

사실, 아마도 중간 셀에서 trim ()하고 중간 셀에 위의 수식을 적용하는 것이 가장 쉽습니다. 또한 셀이 비어 있으면 0을 뱉어 내므로 isblank ()로 감싸도됩니다.
Jon

3
=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)을 사용했습니다. 원하는 텍스트 항목 인 경우를 대비하여.


감사
Rudiger Wolf

2

이것은 매우 깨끗하고 컴팩트하며 잘 작동합니다.

{=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)))}

멋있는. 그것은 배열 함수의 정말 흥미로운 사용법입니다! 나는 오랜 시간이 지난 후에 또 다른 대답을 기대하지 않았습니다. 공유해 주셔서 감사합니다.
e.James

2
=RIGHT(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))) 

테스트 했습니까? "당신은 인간으로 분류되어 있습니까?"와 함께 작동하지 않습니다.
Ed Guiness

아니요, 작동하지 않습니다. 그래도 흥미로운 요소가 있습니다. LEN (A1) -LEN (SUBSTITUTE (A1, "", "")은 문자열의 공백 수를 나타냅니다
BradC

흥미로운 기능입니다. 작동하지 않습니다. 나는 공간의 수를 셀 수있는 트릭을 좋아합니다.
e.James

@ 브래드 : * 문자를 표시하도록 게시물을 편집했습니다. 원본이 제대로 인쇄되지 않았습니다. 이것들이 제자리에 있으면 작동합니다. +1
e.James

2

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가 마지막 단어를 분리하는 것과 같은 방식으로 왼쪽의 모든 것을 가져옵니다.


1

줄을 뒤집을 수 있다고 상상해보십시오. 그렇다면 정말 쉽습니다. 문자열에서 작업하는 대신 :

"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절은 단일 단어 = 셀에 공백이없는 셀에 적용됩니다. 참고 : TRIMCLEAN원래 문자열이 아니라 유용하다. 원칙적으로 A1에서 전체 문자열을 반전시키고 마지막 (역순) 단어 옆에있는 반전 된 문자열에서 첫 번째 공백을 찾습니다 (예 :) "tac ". LEFT이 단어를 선택하고 다른 문자열 반전은 단어의 원래 순서 ( " cat")를 재구성합니다 . -1의 끝에 FIND문은 공백을 제거합니다.

아이디어는있는 문자열의 첫 번째 (!) 단어를 추출하기 쉽다는 점이다 LEFTFIND첫 번째 빈을 보내고. 그러나 마지막 (!) 단어의 RIGHT경우 불행히도 FIND에는 문자열을 분석하려는 방향에 대한 플래그가 없으므로 함수는 잘못된 선택입니다.

따라서 전체 문자열이 간단하게 반전됩니다. LEFT그리고 FIND정상적으로 작동하지만 추출 된 문자열이 반전됩니다. 그러나 줄을 뒤집는 방법을 알고 나면 그의 큰 문제는 아닙니다. ReverseString수식 의 첫 번째 문이이 작업을 수행합니다.


그것은 다른 모든 옵션보다 훨씬 간단합니다. 대단히 감사합니다 !! Find가 리버스를 찾거나 대체 할 수없는 이유-리버스 검색을 수행하기 위해 음수를 사용하는 것과 관련이 있지만 분명히 vba는 아닙니다 ....
Craig Lambie

3
OP는 VBA를 요구하지 않았습니다.
Tripp Kinetics

또한 미쳤다! 당신은 VBA를 사용하려는 경우 당신은 쉽게 리버스 발견 할 수
인 Denzil 뉴먼

1
=LEFT(A1,FIND(IF(
 ISERROR(
  FIND("_",A1)
 ),A1,RIGHT(A1,
  LEN(A1)-FIND("~",
   SUBSTITUTE(A1,"_","~",
    LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))
   )
  )
 )
),A1,1)-2)

1

열에 복사하고 해당 열을 선택하고 HOME> 편집> 찾기 및 선택, 바꾸기 :

무엇을 찾다:

Replace All.

별표 뒤에 공백이 있습니다.


*는 엑셀 검색에서 (욕심이 많은) 와일드 카드이므로, 이것은 마지막 공간까지 모든 것을 일치시키고 아무것도 대체하지 않습니다
Superfly Jon

0

필자가 필요로 PT-BR로 번역했습니다.

\경로 문자열의 파일 이름 만 필요하므로 공백을 변경했습니다 .

=SE(ÉERRO(PROCURAR("\",A1)),A1,DIREITA(A1,NÚM.CARACT(A1)-PROCURAR("|", SUBSTITUIR(A1,"\","|",NÚM.CARACT(A1)-NÚM.CARACT(SUBSTITUIR(A1,"\",""))))))

3
나는 포르투갈어로 Excel을 읽는 방법을 모른다. 그래서 나는 그것에 대해 당신의 말을 들어야 할 것이다 :)
e.James

0

이를 달성하는 또 다른 방법은 다음과 같습니다.

=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)))))

여기에 이미지 설명을 입력하십시오


-1

또한 이와 같은 작업이 있었고 위의 방법을 사용하여 완료했을 때 새로운 방법이 나에게 생겼습니다.

  1. 끈을 뒤집습니다 ( "문자열 1"은 "에노 그 니어"가됩니다).
  2. 좋은 구식 찾기 (왼쪽에서 오른쪽으로 하드 코딩 됨)를 사용하십시오.
  3. 다시 읽을 수있는 문자열로 바꾸십시오.

이 소리는 어때?


12
확실한. 그러나 Excel에서 문자열을 어떻게 뒤집습니까?
e.James
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.