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




엑셀 vba 쿼리 (12)

이 테스트를 통과하고 작동합니다 (Brad의 원래 게시물을 기반으로).

=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1," ","|",
     LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))

원래 문자열에 파이프 "|" 문자를 입력 한 다음 위의 두 문자를 소스에 나타나지 않는 다른 문자로 바꿉니다. (번역에서 인쇄 할 수없는 문자가 삭제 되었기 때문에 Brad의 원본이 손상된 것 같습니다.)

보너스 : 어떻게 작동합니까 (오른쪽에서 왼쪽으로) :

LEN(A1)-LEN(SUBSTITUTE(A1," ","")) - 원래 문자열의 공백 수
SUBSTITUTE(A1," ","|", ... ) - 최종 공간 만을 |
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," ",""))))))

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

내장 된 Excel 함수 (VBA 없음)를 사용하면 각 문자열의 마지막 단어를 분리 할 수 ​​있습니까?

예 :

  Are you classified as human? -> human?
Negative, I am a meat popsicle -> popsicle
                  Aziz! Light! -> Light!

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

모두 바꾸기 .

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


Jerry의 답변의보다 강력한 버전 :

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

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


Jerry와 Joe의 답변에 추가하려면 마지막 단어 이전에 텍스트를 찾으려면 다음을 사용하십시오.

=TRIM(LEFT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))))-LEN(TRIM(A1))))

A1에서 '내 작은 고양이'는 '내 작은'(Joe와 Jerry의 'cat'

Jerry와 Joe가 마지막 단어를 분리하는 것과 같은 방식으로,이 작업은 왼쪽의 모든 항목을 가져옵니다 (다시 뒤집습니다)


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


끈이 뒤집을 수 있다고 상상해보십시오. 그럼 정말 쉽습니다. 문자열에 대한 작업 대신 :

"My little cat" (1)

너와 함께 일해.

"tac elttil yM" (2)

=LEFT(A1;FIND(" ";A1)-1) 를 사용하면 (1)의 "My" 와 (2)의 "tac" .

문자열을 뒤집을 수있는 몇 가지 VBA가 있습니다. 나는 공공 VBA 함수 ReverseString 선호한다.

위에서 설명한대로 설치하십시오. 그런 다음 A1에 문자열 (예 : "My little cat" 하고 A2에서이 함수를 사용하십시오.

=ReverseString(LEFT(ReverseString(A1);IF(ISERROR(FIND(" ";A1));
  LEN(A1);(FIND(" ";ReverseString(A1))-1))))

A2에서 "cat" 이 보일 것입니다.

위의 방법은 단어가 공백으로 구분되어 있다고 가정합니다. IF 절은 셀에 단일 단어 = 공백이없는 셀을위한 것입니다. 참고 : 원래 문자열을 TRIMCLEAN 하면 유용합니다. 원칙적으로 A1에서 전체 문자열을 반전하고 마지막 (반전 된) 단어 (즉, "tac " ) 옆의 역순 문자열에서 첫 번째 공백을 찾습니다. LEFT 는이 단어를 선택하고 다른 문자열 반전은 단어의 원래 순서 ( " cat" )를 재구성합니다. FIND .의 끝에있는 -1 은 공 i을 제거합니다.

첫 번째 공백을 LEFTFIND 문자열에서 첫 번째 (!) 단어를 추출하는 것이 쉽습니다. 그러나 마지막 (!) 단어의 경우 RIGHT 함수는 잘못된 결과를 나타냅니다. 불행히도 FIND에는 문자열을 분석하려는 방향에 대한 플래그가 없으므로이를 수행하려고 할 때 잘못된 선택입니다.

따라서 전체 문자열이 단순히 반대로됩니다. LEFTFIND 는 정상적으로 작동하지만 추출 된 문자열은 반대로됩니다. 그러나 일단 문자열을 뒤집는 방법을 알게되면 그는 큰 문제가되지 않습니다. 수식의 첫 번째 ReverseString 문이이 작업을 수행합니다.


Excel 2003에서 테스트 한 Google this 발견되어 작동합니다.

=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의 대답은 뒤 공백이나 빈 셀에서도 작동하지 않습니다 ...
[두 번째 편집] 사실, 그것은 하나의 단어에 대해서도 작동하지 않습니다 ...


나는 또한 이와 같은 과제를 가지고 있었고 위의 방법을 사용하여 완료되었을 때 새로운 방법이 생겼다. 왜 이렇게하지 않는가?

  1. 문자열을 뒤집으십시오 ( "string one"은 "eno gnirts"가됩니다).
  2. 좋은 오래된 찾기 (왼쪽에서 오른쪽으로 하드 코딩 됨)를 사용하십시오.
  3. 그것을 다시 읽을 수있는 문자열로 되돌립니다.

이게 어떻게 들리니?


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

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

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


나는 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,"\",""))))))

이것은 제가 큰 성공을 거두었던 기술입니다 :

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

문자열에서 첫 단어를 가져 오려면 RIGHT에서 LEFT로 변경하십시오.

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

또한 A1을 텍스트를 포함하는 셀로 대체하십시오.





excel-formula