[excel-formula] Excel : 문자열에서 마지막 문자 / 문자열 일치

기본 함수를 사용하여 문자열에서 마지막 문자 / 문자열 일치를 식별하는 효율적인 방법이 있습니까? 즉없는 마지막 문자 / 문자열 문자열하지만, 문자 / 문자열의 마지막에 출현하는 위치 문자열. Search그리고 find두 작품은 왼쪽에서 오른쪽으로 난 긴 재귀 알고리즘없이 적용하는 방법을 생각하지 수 있습니다. 그리고이 솔루션은 이제 쓸모없는 것처럼 보입니다.



답변

최신 버전의 Excel에서는 새로운 기능과 새로운 방법이 제공됩니다. 이전 버전에서는 복제 가능하지만 (이전에는 보지 못했지만) Excel O365가 있으면 다음을 사용할 수 있습니다.

=MATCH(2,1/(MID(A1,SEQUENCE(LEN(A1)),1)="Y"))

하위 문자열의 마지막 위치를 겹치는 데 사용할 수도 있습니다.

=MATCH(2,1/(MID(A1,SEQUENCE(LEN(A1)),2)="YY"))

| Value  | Pattern | Formula                                        | Position |
|--------|---------|------------------------------------------------|----------|
| XYYZ   | Y       | =MATCH(2,1/(MID(A2,SEQUENCE(LEN(A2)),1)="Y"))  | 3        |
| XYYYZ  | YY      | =MATCH(2,1/(MID(A3,SEQUENCE(LEN(A3)),2)="YY")) | 3        |
| XYYYYZ | YY      | =MATCH(2,1/(MID(A4,SEQUENCE(LEN(A4)),2)="YY")) | 4        |

이 둘은 더 이상 임의의 대체 문자를 사용할 수없고 겹치는 패턴을 허용하지만 “단점”은 배열의 사용입니다.


참고 : 이전 Excel 버전에서 동일한 동작을 강제로 수행 할 수 있습니다 .

=MATCH(2,1/(MID(A2,ROW(A1:INDEX(A:A,LEN(A2))),1)="Y"))

암시 적 교차를 제거하기 위해을 통해 입력 CtrlShiftEnter하거나 인라인 INDEX을 사용하여 입력했습니다 .

=MATCH(2,INDEX(1/(MID(A2,ROW(A1:INDEX(A:A,LEN(A2))),1)="Y"),))


답변

나는 당신이 무슨 뜻인지 알 것 같아요. 예를 들어 다음 문자열 (A1 셀에 저장 됨)에서 가장 오른쪽에 \를 원한다고 가정 해 봅시다.

드라이브 : \ Folder \ SubFolder \ Filename.ext

마지막 \의 위치를 ​​얻으려면 다음 공식을 사용하십시오.

=FIND("@",SUBSTITUTE(A1,"\","@",(LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))/LEN("\")))

가장 오른쪽의 \는 문자 24에 있습니다. “@”를 찾고 마지막 “\”을 “@”로 바꾸면됩니다. 사용하여 마지막을 결정합니다

(len(string)-len(substitute(string, substring, "")))\len(substring)

이 시나리오에서 하위 문자열은 단순히 길이가 1 인 “\”이므로 끝 부분을 나누고 다음을 사용할 수 있습니다.

=FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))

이제 이것을 사용하여 폴더 경로를 얻을 수 있습니다.

=LEFT(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))

뒤에 \가없는 폴더 경로는 다음과 같습니다.

=LEFT(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))-1)

그리고 파일 이름 만 얻으려면 :

=MID(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))

그러나 다음은 특정 캐릭터의 마지막 인스턴스에서 모든 것을 올바르게 얻는 대체 버전입니다. 동일한 예제를 사용하면 파일 이름도 반환됩니다.

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


답변

사용자 정의 함수를 작성하고 수식에서 사용하는 것은 어떻습니까? VBA에는 원하는 기능을 InStrRev정확하게 수행하는 기본 제공 기능 이 있습니다.

이것을 새 모듈에 넣으십시오.

Function RSearch(str As String, find As String)
    RSearch = InStrRev(str, find)
End Function

그리고 함수는 다음과 같습니다 (원래 문자열이 B1에 있다고 가정).

=LEFT(B1,RSearch(B1,"\"))


답변

tigeravatar와 Jean-François Corbett는이 공식을 사용하여 “\”문자의 마지막 발생 문자열을 생성 할 것을 제안했습니다.

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

구분자로 사용 된 문자가 공백 “”인 경우 수식을 다음과 같이 변경해야합니다.

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

언급 할 필요는 없습니다. “{“문자는 처리 할 텍스트에서 “정상적으로”발생하지 않는 문자로 대체 될 수 있습니다.


답변

VBA가 필요없는이 솔루션을 생각해 냈습니다.

내 예제에서 “_”의 마지막 발생을 찾으십시오.

=IFERROR(FIND(CHAR(1);SUBSTITUTE(A1;"_";CHAR(1);LEN(A1)-LEN(SUBSTITUTE(A1;"_";"")));0)

밖으로 설명했다;

SUBSTITUTE(A1;"_";"") => replace "_" by spaces
LEN( *above* ) => count the chars
LEN(A1)- *above*  => indicates amount of chars replaced (= occurrences of "_")
SUBSTITUTE(A1;"_";CHAR(1); *above* ) => replace the Nth occurence of "_" by CHAR(1) (Nth = amount of chars replaced = the last one)
FIND(CHAR(1); *above* ) => Find the CHAR(1), being the last (replaced) occurance of "_" in our case
IFERROR( *above* ;"0") => in case no chars were found, return "0"

이것이 도움이 되었기를 바랍니다.


답변

내가 만든이 함수를 사용하여 문자열 내에서 문자열의 마지막 인스턴스를 찾을 수 있습니다.

허용되는 Excel 수식이 작동하는지 확인하지만 읽고 사용하기가 너무 어렵습니다. 언젠가는 작은 덩어리로 나뉘어 유지 보수가 가능해야합니다. 아래 내 함수는 읽을 수 있지만 명명 된 매개 변수를 사용하여 수식에서 호출하기 때문에 관련이 없습니다. 이것은 그것을 사용하는 것을 간단하게 만듭니다.

Public Function FindLastCharOccurence(fromText As String, searchChar As String) As Integer
Dim lastOccur As Integer
lastOccur = -1
Dim i As Integer
i = 0
For i = Len(fromText) To 1 Step -1
    If Mid(fromText, i, 1) = searchChar Then
        lastOccur = i
        Exit For
    End If
Next i

FindLastCharOccurence = lastOccur
End Function

나는 이것을 다음과 같이 사용한다 :

=RIGHT(A2, LEN(A2) - FindLastCharOccurence(A2, "\"))


답변

@ SSilk에 의해 작성된 의견의 일부를 고려할 때 내 최종 목표는 실제로 마지막 사건의 오른쪽에있는 모든 것을 얻는 것이 었습니다 . 매우 간단한 공식을 사용하는 대체 방법 A은 문자열 의 열 (예 🙂 을 복사 하고 복사하는 것입니다 (예 : ColumnB) 찾기 및 바꾸기를 적용하십시오. 예를 들어 예를 들면 다음과 같습니다.Drive:\Folder\SubFolder\Filename.ext

무엇을 찾다

이것은 어쨌든 객관적 인 Filename.ext캐릭터의 마지막 인스턴스 (여기 ) 뒤에 남아있는 것을 (here ) 반환하고 \다음과 같은 짧은 공식으로 마지막 캐릭터의 위치를 ​​찾는 것을 용이하게합니다.

=FIND(B1,A1)-1