ReplaceBrackets1 : RegEx를 사용하여 열 번호를 추출합니다. 처리 된 100,000 개의 레코드에는 15.03 초가 소요됩니다.
Sub ReplaceBrackets1()
'http://analystcave.com/excel-regex-tutorial/
Dim c As Range
Dim Match As Object, Matches As Object, regex As Object
Set regex = CreateObject("VBScript.RegExp")
With regex
.Global = True
.Pattern = "\[(.*?)\]"
End With
For Each c In Range("K3", Range("K" & Rows.Count).End(xlUp))
If regex.Test(c.Text) Then
Set Matches = regex.Execute(c.Text)
For Each Match In Matches
c.Replace Match, c.EntireRow.Columns(CInt(Match.SubMatches(0)))
Next Match
End If
Next
End Sub
ReplaceBrackets2 : 배열로 loades 데이터는 열 번호를 추출 정규식을 사용하며 단지 워크에 1 회 기록한다. 100,000 레코드를 처리하는 데 1.27 초가 걸립니다.
Sub ReplaceBrackets2()
'http://analystcave.com/excel-regex-tutorial/
Dim x As Long, column As Long
Dim arData, values
Dim Match As Object, Matches As Object, regex As Object
Set regex = CreateObject("VBScript.RegExp")
With regex
.Global = True
.Pattern = "\[(.*?)\]"
End With
values = Range("K3", Range("K" & Rows.Count).End(xlUp))
arData = Range("A3", "L" & UBound(values, 1) + 2)
For x = 1 To UBound(values, 1)
If regex.Test(values(x, 1)) Then
Set Matches = regex.Execute(values(x, 1))
For Each Match In Matches
column = Match.SubMatches(0)
values(x, 1) = arData(x, column)
Next Match
End If
Next
Range("K3", Range("K" & Rows.Count).End(xlUp)) = values
End Sub
UDF
(
getReplacedText
)에
ReplaceBrackets1
를 변환 한 후 나는 단지 100K 레코드에 대한 수식을 채우기 위해 2.53 초 걸렸 찾을 놀랐다. 이 방법이 원본보다 빠를 방법이 확실치 않습니다. 그러나 많은 수식을 사용하면 실제로 스프레드 시트가 느려집니다.
getReplacedText : 정적 RegEx를 사용하여 데이터를 구문 분석합니다.
Function getReplacedText(ReplacementText As String, Source As Range)
'http://analystcave.com/excel-regex-tutorial/
Dim Match As Object, Matches As Object
Static regex As Object
If regex Is Nothing Then
Set regex = CreateObject("VBScript.RegExp")
With regex
.Global = True
.Pattern = "\[(.*?)\]"
End With
End If
If regex.Test(ReplacementText) Then
Set Matches = regex.Execute(ReplacementText)
For Each Match In Matches
ReplacementText = Replace(ReplacementText, Match, Source.Columns(CInt(Match.SubMatches(0))))
Next Match
End If
getReplacedText = ReplacementText
End Function
예, VBA가이를 쉽게 처리 할 수 있습니다. 지금까지 시도한 것을 제공해야합니다. SO는 코드 작성 서비스가 아니라 코딩 문제에 대한 중요한 질문을 얻는 포럼이라는 것을 기억하십시오. 먼저 K 열의 범위에서 실행되는 루프를 생성하고 각 셀의 마커를 가져 와서 해당 문자열을 대체 할 수 있습니다.코드를 작성한 후에도 여전히 문제가 발생하면 SO 코드를 공유하여 문제에 대한 지원을받을 수 있습니다. 감사합니다, – nbayly