데이터 시트에 다른 열에 배치하려는 문자열이 포함 된 열이 있습니다. 이 문자열은 여러 번 발생할 수 있으며 모든 인스턴스를 다른 열에 배치하려고합니다. 열이 구분되어 있으며 일치하는 문자열을 구분 기호까지 가져오고 싶습니다.
예 :
Possessions
Fruit: apple, Car: Ford, Fruit: banana,
Car: Saturn,
Fruit: orange,
다음 열에 다음을 포함하고 싶습니다.
Fruit
Fruit: apple, Fruit: banana,
Fruit: orange,
문자열의 첫 번째 인스턴스를 쉽게 찾을 수 있습니다 (새 줄은 가독성을위한 것임).
MID(A2,
FIND( *first instance of Fruit:* ),
FIND( *first comma after Fruit:* ) - FIND( *first instance of Fruit:* )
)
그러나 나는 여러 번 문자열을 만날 수 있으며 모두 잡기를 원합니다.
또한 열은 이미 계산 된 필드 (다른 시트에 대한 참조)이므로 구분 기호에서 분할 할 열에 텍스트를 사용할 수 없습니다.
문자열의 모든 인스턴스를 반환하는 방법에 대한 아이디어가 있습니까? 가능하면 VBA 스크립트를 피하고 워크 시트 함수를 사용하고 싶지만 함수를 사용할 수없는 경우 VBA에 열려 있습니다.
이 방법은 사용자의 요구를 충족해야합니다. 다른 사용자가 정규 표현식의 도움으로 주어진 문자열에서 여러 문자열을 추출하는 데 사용할 수도 있습니다.
Excel로 돌아가서 출력하려는 셀에서이 수식을 사용합니다.
=REGEXTRACT(A1, "Fruit: .*?,")
=REGEXTRACT()
새로운 사용자 지정 공식입니다. A1
입력 데이터가있는 셀입니다.Fruit: .*?,
fruit
다음 쉼표까지 모든 항목 및 일치 항목을 찾는 정규 표현식 입니다.Function REGEXTRACT(objCell As Range, strPattern As String)
Dim objMatches As Object
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.IgnoreCase = True
RegEx.Global = True
RegEx.Pattern = strPattern
Set objMatches = RegEx.Execute(objCell.Value)
If objMatches.Count <> 0 Then
For Each objMatch In objMatches
REGEXTRACT= REGEXTRACT+ objMatch.Value
Next objMatch
Else: REGEXTRACT= ""
End If
End Function
힌트 : Look-Behind 및 Look-Ahead 표현식은 VB의 정규식 엔진에서 지원되지 않습니다. 따라서 RegEx를 통해 쉼표를 제외하는 것은 간단하지 않습니다. 그러나 일반적인 VBA 문자열 작업을 통해 가능합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다