영숫자의 항목 번호와 행에 다른 정보가 포함 된 시트가 있습니다. 때로는 유사한 항목이 하나의 행으로 결합되고 항목 번호의 차이가 (X / Y)로 표시되어 항목 번호의 해당 지점에서 사용할 문자를 선택합니다 (X 또는 Y뿐만 아니라 영숫자 일 수도 있음). 캐릭터). 즉, 이러한 항목은 다음과 같습니다.
AB (X / Y) CD123
내가 필요한 것은 ABXCD123과 ABYCD123의 두 항목 번호로 구분하는 방법입니다. 그런 다음 현재 행 아래에 행을 만들고 변경된 항목 번호로 현재 행을 복사해야하지만 그 부분은 쉽습니다. InStr을 사용하여 (X / Y) 플래그를 지정했지만 X 및 Y 문자를 꺼내 새 문자열을 만드는 방법을 모르겠습니다. 또한 와일드 카드가 InStr에서 작동하는지 여부도 모르며 RegEx에 너무 익숙하지 않습니다.
어떤 아이디어?
다음은 UDF²의 regex¹에 대한 간략한 소개입니다.
Function partNums(str As String, _
Optional num As Integer = 1)
Dim tmp As String
Static rgx As Object
'with rgx as static, it only has to be created once; beneficial when filling a long column with this UDF
If rgx Is Nothing Then
Set rgx = CreateObject("VBScript.RegExp")
End If
partNums = vbNullString
With rgx
.Global = True
.IgnoreCase = True
.MultiLine = False
.Pattern = "\([A-Z]{1}/[A-Z]{1}\)"
If .Test(str) Then
tmp = .Execute(str)(0)
Select Case num
Case 2
tmp = Mid(tmp, 4, 1)
Case Else
tmp = Mid(tmp, 2, 1)
End Select
partNums = .Replace(str, tmp)
End If
End With
End Function
B2 : B3에서
=partNums(A2)
=partNums(A3,2)
다음은 1 ~ 3 개의 문자를 처리하는 크게 복제 된 UDF입니다.
Function partNums(str As String, _
Optional num As Integer = 1)
Dim tmp As String
Static rgx As Object
'with rgx as static, it only has to be created once; beneficial when filling a long column with this UDF
If rgx Is Nothing Then
Set rgx = CreateObject("VBScript.RegExp")
End If
partNums = vbNullString
With rgx
.Global = True
.IgnoreCase = True
.MultiLine = False
.Pattern = "\([A-Z]{1,3}/[A-Z]{1,3}\)"
If .Test(str) Then
tmp = .Execute(str)(0)
tmp = Split(Replace(Replace(tmp, Chr(40), vbNullString), Chr(41), vbNullString), Chr(47))(num - 1)
partNums = .Replace(str, tmp)
End If
End With
End Function
¹ 정규식 질문은 일반적으로 셀 내 및 루프 모두에서 Microsoft Excel에서 정규식 (Regex)을 사용하는 방법 의 솔루션으로 답변 할 수 있습니다 .
² 사용자 정의 함수 (일명 UDF)가 표준 모듈 코드 시트에 배치됩니다. Alt+를 누르고 F11VBE가 열리면 즉시 풀다운 메뉴를 사용하여 삽입 ► 모듈 ( Alt+ I, M)을 사용합니다. Book1-Module1 (Code) 와 같은 제목의 새 모듈 코드 시트에 함수 코드를 붙여 넣습니다 . 탭 Alt+는 Q워크 시트 (들)로 돌아갑니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다