Public Sub Thay_The()
Dim Nguon, Dl, Tam1, Tam2, dic As Object
Dim r As Long, rw As Long, c As Long
Set dic = CreateObject("scripting.dictionary")
Nguon = Sheet1.Range("A1").CurrentRegion
Dl = Sheet2.Range("A1").CurrentRegion
With CreateObject("vbscript.regexp")
.Global = True
For r = 1 To UBound(Dl)
ReDim Tam1(Len(Dl(r, 1))), Tam2(Len(Dl(r, 1)))
For rw = 1 To UBound(Nguon)
.Pattern = Nguon(rw, 1)
If .test(Dl(r, 1)) Then
For c = 0 To .Execute(Dl(r, 1)).Count - 1
If Not dic.exists(.Execute(Dl(r, 1))(c).firstindex) Then
dic.Add .Execute(Dl(r, 1))(c).firstindex, ""
Tam1(.Execute(Dl(r, 1))(c).firstindex) = "#" & Nguon(rw, 1)
Tam2(.Execute(Dl(r, 1))(c).firstindex) = "#" & Nguon(rw, 2)
End If
Next c
Dl(r, 1) = Replace(Dl(r, 1), Nguon(rw, 1), "#" & Nguon(rw, 1))
End If
Next rw
Tam1 = Split(Application.Trim(Join(Tam1)), "#")
Tam2 = Split(Application.Trim(Join(Tam2)), "#")
Dl(r, 1) = Split(Dl(r, 1), "#")
For c = 0 To UBound(Tam1)
Dl(r, 1)(c) = Replace(Dl(r, 1)(c), Tam1(c), Tam2(c))
Next c
Dl(r, 1) = Join(Dl(r, 1))
dic.RemoveAll
Next r
End With
Sheet2.Range("C1", Sheet2.Range("C1000000").End(xlUp)).Clear
Sheet2.Range("C1").Resize(UBound(Dl), 1) = Dl
End Sub