Dim ArrKgDau, ArrUni
Dim Dic As Object, i&, nR&
Dim tmpStr$, Txt$, tmpAsc$
Function AccName(ByVal FulName As String) As String
ArrUni = Array("97", "225", "224", "7843", "227", "7841", "259", "7855", "7857", "7859", "7861", "7863", "226", "7845", "7847", "7849", "7851", "7853", "101", "233", "232", "7867", "7869", "7865", "234", "7871", "7873", "7875", "7877", "7879", "105", "237", "236", "7881", "297", "7883", "111", "243", "242", "7887", "245", "7885", "244", "7889", "7891", "7893", "7895", "7897", "417", "7899", "7901", "7903", "7905", "7907", "117", "250", "249", "7911", "361", "7909", "432", "7913", "7915", "7917", "7919", "7921", "121", "253", "7923", "7927", "7929", "7925", "273", "65", _
"193", "192", "7842", "195", "7840", "258", "7854", "7856", "7858", "7860", "7862", "194", "7844", "7846", "7848", "7850", "7852", "69", "201", "200", "7866", "7868", "7864", "202", "7870", "7872", "7874", "7876", "7878", "73", "205", "204", "7880", "296", "7882", "79", "211", "210", "7886", "213", "7884", "212", "7888", "7890", "7892", "7894", "7896", "416", "7898", "7900", "7902", "7904", "7906", "85", "218", "217", "7910", "360", "7908", "431", "7912", "7914", "7916", "7918", "7920", "89", "221", "7922", "7926", "7928", "7924", "272")
ArrKgDau = Array("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "e", "e", "e", "e", "e", "e", "e", "e", "e", "e", "e", "e", "i", "i", "i", "i", "i", "i", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "u", "u", "u", "u", "u", "u", "u", "u", "u", "u", "u", "u", "y", "y", "y", "y", "y", "y", "d", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "I", "I", "I", "I", "I", "I", _
"O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "Y", "Y", "Y", "Y", "Y", "Y", "D")
TaoDic
Arr = Split(WorksheetFunction.Trim(FulName))
Select Case UBound(Arr)
Case Is = 0
Txt = ""
Case Is = 1 'TH nay ten co 2 chu
'ky tu 1
tmpAsc = CStr(AscW(Left(Arr(LBound(Arr)), 1)))
If Not Dic.Exists(tmpAsc) Then
tmpStr = Left(Arr(LBound(Arr)), 1)
Txt = tmpStr
Else
nR = Dic.Item(tmpAsc)
Txt = ArrKgDau(nR)
End If
'ky tu 2
'TH chu thu 2 co 1 ky tu va chu 1 có 2 ky tu
If Len(Arr(UBound(Arr))) = 1 Then
If Len(Arr(LBound(Arr))) > 1 Then
tmpAsc = CStr(AscW(Mid(Arr(LBound(Arr)), 2, 1)))
If Not Dic.Exists(tmpAsc) Then
tmpStr = Mid(Arr(LBound(Arr)), 2, 1)
Txt = Txt & tmpStr
Else
nR = Dic.Item(tmpAsc)
Txt = Txt & ArrKgDau(nR)
End If
End If
End If
'ky tu 2
tmpAsc = CStr(AscW(Left(Arr(UBound(Arr)), 1)))
If Not Dic.Exists(tmpAsc) Then
tmpStr = Left(Arr(UBound(Arr)), 1)
Txt = Txt & tmpStr
Else
nR = Dic.Item(tmpAsc)
Txt = Txt & ArrKgDau(nR)
End If
'ky tu 3
If Len(Arr(UBound(Arr))) > 1 Then
tmpAsc = CStr(AscW(Mid(Arr(UBound(Arr)), 2, 1)))
If Not Dic.Exists(tmpAsc) Then
tmpStr = Mid(Arr(UBound(Arr)), 2, 1)
Txt = Txt & tmpStr
Else
nR = Dic.Item(tmpAsc)
Txt = Txt & ArrKgDau(nR)
End If
Else
If Len(Txt) = 3 Then
Txt = Txt
Else
Txt = Txt & "_"
End If
End If
Case Else 'Truong co ten co > 3 chu
'ky tu 1
tmpAsc = CStr(AscW(Left(Arr(LBound(Arr)), 1)))
If Not Dic.Exists(tmpAsc) Then
tmpStr = Left(Arr(LBound(Arr)), 1)
Txt = tmpStr
Else
nR = Dic.Item(tmpAsc)
Txt = ArrKgDau(nR)
End If
'ky tu 2
tmpAsc = CStr(AscW(Left(Arr(UBound(Arr) - 1), 1)))
If Not Dic.Exists(tmpAsc) Then
tmpStr = Left(Arr(UBound(Arr) - 1), 1)
Txt = Txt & tmpStr
Else
nR = Dic.Item(tmpAsc)
Txt = Txt & ArrKgDau(nR)
End If
'ky tu 3
tmpAsc = CStr(AscW(Left(Arr(UBound(Arr)), 1)))
If Not Dic.Exists((tmpAsc)) Then
tmpStr = Left(Arr(UBound(Arr)), 1)
Txt = Txt & tmpStr
Else
nR = Dic.Item((tmpAsc))
Txt = Txt & ArrKgDau(nR)
End If
End Select
Erase ArrKgDau, ArrUni
Set Dic = Nothing
AccName = Txt
End Function
Sub TaoDic()
Set Dic = CreateObject("Scripting.Dictionary")
For i = LBound(ArrUni) To UBound(ArrUni)
tmpStr = ArrUni(i)
Dic.Add tmpStr, i
Next i
End Sub