Excel: 문자열의 마지막 문자/문자열 일치
기본 함수를 사용하여 문자열의 마지막 문자/문자열을 효율적으로 식별할 수 있는 방법이 있습니까?즉, 문자열의 마지막 문자/문자열이 아니라 문자열에서 마지막으로 발생한 문자열/문자열의 위치입니다. Search ★★★★★★★★★★★★★★★★★」find둘 다 왼쪽에서 오른쪽으로 작동하기 때문에 긴 재귀 알고리즘 없이 어떻게 적용할지 생각할 수 없습니다.그리고 이 솔루션은 이제 쓸모없어 보입니다.
★★★★★★★★★★★★★★★★★」를 들어 오른쪽 에 있는 것을 .\ 문자열A1
Drive:\Folder\SubFolder\Filename.ext
를 취득하다\ '하다, 하다, 하다, 하다'라는공식을 사용합니다
=FIND("@",SUBSTITUTE(A1,"\","@",(LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))/LEN("\")))
에 있는 것을 알 수 .\에 맞다24 '', '찾다', '찾다' 이렇게 "@" "\" an "@" 이 명령어는 다음을 합니다. 이 명령어는 다음 명령어를 사용하여 마지막 항목은 다음과 같습니다.
(len(string)-len(substitute(string, substring, "")))/len(substring)
시나리오에서 " " " 입니다."\"가 의 which which which which which which which이다.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))
단, 스트링을 확실하게 할 수 있다면A1는 단어 사이에 공백이 반복되지 않습니다.다음은 모든 것을 특정 문자의 마지막 인스턴스의 오른쪽에 배치하는 대체 버전입니다.따라서 동일한 예를 사용하면 파일 이름도 반환됩니다.
=TRIM(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",LEN(A1))),LEN(A1)))
§ 문서에는 다음과 같이 기재되어 있습니다(내 것을 포함).
단어 사이의 단일 공백을 제외한 모든 공백을 텍스트에서 제거합니다.간격이 불규칙할 수 있는 다른 응용 프로그램에서 받은 텍스트에 TRIM을 사용합니다.
은 반복 수 때문에, 「」를 사용합니다.TRIM기본 솔루션은 반복 공간을 단일 공간으로 대체하여 잘못된 결과를 제공할 수 있습니다.
커스텀 함수를 만들어 수식에 사용하는 것은 어떻습니까?에는 VBA라는 .InStrRev그게 바로 당신이 찾던 거예요
이를 새 모듈에 장착합니다.
Function RSearch(str As String, find As String)
RSearch = InStrRev(str, find)
End Function
또, 기능은 다음과 같습니다(원래 문자열이 B1에 있는 것을 전제로 합니다).
=LEFT(B1,RSearch(B1,"\"))
새로운 답변 | 31-3-2022:
더 새로운 기능으로 인해 더 짧은 답변이 제공됩니다.베타판을 작성할 때, 그러나 가까운 장래에 널리 이용 가능하게 될 가능성이 있습니다.
=LEN(TEXTBEFORE(A2,B2,-1))+1
여기서 트릭은 세 번째 파라미터가 함수에 대해 두 번째 파라미터에서 지정한 서브스트링의 마지막 발생을 취득하도록 지시하는 것입니다.쓸 때 이 함수는 기본적으로 대소문자를 구분하며, 옵션인 4번째 파라미터에 의해 처리될 수 있습니다.
원답 | 2020년 6월 17일 :
새로운 버전의 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"))
를 통해 입력되거나 인라인을 사용하여 입력됨INDEX'CHANGE: 'CHANGE: 'CHANGE:
=MATCH(2,INDEX(1/(MID(A2,ROW(A1:INDEX(A:A,LEN(A2))),1)="Y"),))
tigeravatar와 Jean-Franchois 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, "\"))
@SSILky의 코멘트의 일부에 대해 생각해 보면, 실제로는 모든 것을 마지막으로 발생한 코멘트의 오른쪽에 배치하는 것이 목적입니다.대안적인 접근방식은 컬럼을 복사하는 것입니다(예를 들어 다음과 같습니다.A[B열] [B열 (Find and Replace)]를 선택합니다.예를 들어 다음과 같습니다.Drive:\Folder\SubFolder\Filename.ext
남은 (여기에 있다).Filename.ext에 (서는 '''로 표시\ )는, 이기도 하고, 다음과 같은 글자의 찾을 수
=FIND(B1,A1)-1
파티에 조금 늦었지만, 이게 도움이 될 수도 있을 것 같아요.질문의 링크도 비슷한 수식을 가지고 있지만, 저는 IF() 문을 사용하여 오류를 제거합니다.
Ctrl+Shift+Enter가 두렵지 않다면 배열 수식을 사용할 수 있습니다.
문자열(셀 A1 내): "1.2.3.4인치.
공식:
{=MAX(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)))} use Ctrl+Shift+Enter
결과: 14
첫번째,
ROW($1:$99)
~ 의 합니다.:1 ~ 99 의 정수 배열을 지정합니다.{1,2,3,4,...,98,99}
다음 분.
MID(A1,ROW($1:$99),1)
는 타깃 문자열에 하고 타깃 후 공백 합니다.「 」 、 [ 1 ] 、 [ ] 、 [ ] 。{"o","n","e",".",..."u","r","","",""...}
다음 분.
IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99))
는 배열 의 각 또는 " " 를 합니다. " 는 FALSE 를 반환합니다.{FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}
지난,
=MAX(IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99)))
합니다.배열 최대값은 다음과 같습니다.14
이 수식의 장점은 짧고 비교적 이해하기 쉬우며 고유한 문자가 필요하지 않다는 것입니다.
단점은 Ctrl+Shift+Enter를 사용해야 하며 문자열 길이가 제한된다는 것입니다.이것은 다음에 나타내는 바리에이션으로 해결할 수 있지만, 그 바리에이션에서는 휘발성(읽기: 느림) 함수인OFFSET() 함수를 사용합니다.
이 공식의 속도 대 다른 공식의 속도를 알 수 없습니다.
종류:
=MAX((MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1)=".")*ROW(OFFSET($A$1,,,LEN(A1)))) works the same way, but you don't have to worry about the length of the string
=SMALL(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)),2) determines the 2nd occurrence of the match
=LARGE(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)),2) determines the 2nd-to-last occurrence of the match
=MAX(IF(MID(I16,ROW($1:$99),2)=".t",ROW($1:$99))) matches a 2-character string **Make sure you change the last argument of the MID() function to the number of characters in the string you wish to match!
새로운 버전의 Excel(2013 이상)에서는 플래시 채우기가 간단하고 빠른 솔루션일 수 있습니다.Excel에서의 Flash Fill 사용.
있는 A1</ CHANGE/FONT CHANGE:>의 서브스트링과B1: , "사용방법:
=XMATCH(B1,MID(A1,SEQUENCE(LEN(A1)),LEN(B1)),,-1)
처음부터 끝까지 일하면서MID(A1,SEQUENCE(LEN(A1)),LEN(B1))을 끊다A1각 기판의 는 "Dynamic Array"입니다.B1. 서브스트링이 마지막으로 발생한 위치를 찾기 위해B1 , 을합니다.XMATCH그것과 함께Search_mode-1로 하다
VBA에서는 다음과 같은 간단한 방법을 사용할 수 있습니다.
YourText = "c:\excel\text.txt"
xString = Mid(YourText, 2 + Len(YourText) - InStr(StrReverse(YourText), "\" ))
파티가 늦었지만 간단한 솔루션은 VBA를 사용하여 커스텀 기능을 만드는 것입니다.
워크북, 워크시트 또는 VBA 모듈의 VBA에 기능 추가
Function LastSegment(S, C)
LastSegment = Right(S, Len(S) - InStrRev(S, C))
End Function
그러면 세포식은
=lastsegment(B1,"/")
셀과 셀 B1에서 검색되는 문자열은 셀 B1에서 마지막 "/" 뒤에 오는 텍스트로 셀을 채웁니다.길이 제한도 없고 불분명한 공식도 없습니다.내가 생각할 수 있는 유일한 단점은 매크로 대응 워크북의 필요성이다.
내장된 Excel 함수에 대한 매개 변수로서 값을 셀 공식으로 반환하기 위해 모든 사용자 VBA 함수를 이 방법으로 호출할 수 있습니다.
함수를 많이 사용하는 경우 문자열에 문자가 없거나 문자열이 공백인 경우 등을 확인합니다.
문자 "~"의 마지막 인스턴스 위치만 찾는 경우 =len(대체(String,~")),+1
마지막 문자열 인스턴스에서 사용할 수 있는 버전이 있을 텐데 다시 작업해야 합니다.
방A1 = find/the/position/of/the last slash
간단한 방법은 텍스트를 반대로 한 다음 정상적으로 첫 번째 슬래시를 찾는 것입니다.이제 전체 텍스트에서 이 숫자를 뺀 길이를 얻을 수 있습니다.
다음과 같은 경우:
=LEN(A1)-FIND("/",REVERSETEXT(A1),1)+1
마지막 위치인 21이 반환됩니다.
언급URL : https://stackoverflow.com/questions/18617349/excel-last-character-string-match-in-a-string
'programing' 카테고리의 다른 글
| Objective-C에서 추상 클래스 만들기 (0) | 2023.04.10 |
|---|---|
| Bash의 숫자는 어떻게 비교하나요? (0) | 2023.04.10 |
| 모든 것을 무시합니다.DS_모든 폴더 및 하위 폴더에 파일 저장 (0) | 2023.04.10 |
| python에서 list.index(존재하지 않을 수 있음)를 처리하는 가장 좋은 방법? (0) | 2023.04.10 |
| 'tail' 명령어와 동등한 명령어 (0) | 2023.04.10 |
