Bạn dùng thử UDF này, copy của Thầy Phạm Duy LongMình có 1 cột dữ liệu văn bản có font chữ là UNICODE và VNI, vậy làm sao để lọc ra 2 font chữ này để chuyển đổi về 1 font. Cảm ơn các bạn
Function TestFon(iStr As Range) As String
FontName = iStr.Font.Name
If InStr(1, Unicode, FontName) > 0 Then
FontName = "UNI"
ElseIf Left(FontName, 4) = "VNI-" Then
FontName = "VNI"
ElseIf Left(FontName, 3) = ".Vn" Then
FontName = "ABC"
Else
'FontName = "NoBiet"
MsgBox "Khong xac dinh duoc font " & FontName & " thuoc bang ma nao !"
Exit Function
End If
TestFon = FontName
End Function
Function IsUnicode(Chuoi As String) As Boolean
Dim i As Long, Map() As Byte
If LenB(Chuoi) Then
Map = Chuoi
For i = 1 To UBound(Map) Step 2
If Map(i) > 0 Then
IsUnicode = True: Exit Function
End If
Next
End If
End Function
Cảm ơn bạn, nhờ bạn hướng dẩn rõ hơn cách sử dụng, mình cũng định nghĩa hàm như vậy nhưng khi vào excel để lập công thức như trên thì luôn xuất hiện thông báo "Khong xac dinh duoc font Nobiet thuoc bang ma nao !"Bạn dùng thử UDF này, copy của Thầy Phạm Duy Long
PHP:Function TestFon(iStr As Range) As String FontName = iStr.Font.Name If InStr(1, Unicode, FontName) > 0 Then FontName = "UNI" ElseIf Left(FontName, 4) = "VNI-" Then FontName = "VNI" ElseIf Left(FontName, 3) = ".Vn" Then FontName = "ABC" Else 'FontName = "NoBiet" MsgBox "Khong xac dinh duoc font " & FontName & " thuoc bang ma nao !" Exit Function End If TestFon = FontName End Function
Cú pháp: TestFon(...)
Việc xác định MÃ FONT mà dùng Font name để nhận biết là không chính xác đâu... Ví dụ, mã font của tôi là Unicode nhưng tôi định dạng cho nó dùng font VNI cũng được vậy!Cảm ơn bạn, nhờ bạn hướng dẩn rõ hơn cách sử dụng, mình cũng định nghĩa hàm như vậy nhưng khi vào excel để lập công thức như trên thì luôn xuất hiện thông báo "Khong xac dinh duoc font Nobiet thuoc bang ma nao !"
Cảm ơn bạn, mình đã áp dụng được hướng dẩn của bạn. Tuy nhiên nó chỉ đúng cho những chuỗi dài, một số ô chỉ có 1 từ ( VD như chữ "có", "không"....) thì nó báo FALSENếu dử liệu chỉ có 2 loại font Unicode và VNI thì cũng dể
Dùng hàm này thử:
PHP:Function IsUnicode(Chuoi As String) As Boolean Dim i As Long, Map() As Byte If LenB(Chuoi) Then Map = Chuoi For i = 1 To UBound(Map) Step 2 If Map(i) > 0 Then IsUnicode = True: Exit Function End If Next End If End Function
Ái chà... vụ này cũng hơi căng à nha ---> Các cao thủ khác có ý kiến gì không?Cảm ơn bạn, mình đã áp dụng được hướng dẩn của bạn. Tuy nhiên nó chỉ đúng cho những chuỗi dài, một số ô chỉ có 1 từ ( VD như chữ "có", "không"....) thì nó báo FALSE
Đang ở Qui Nhơn, ra tiệm internet vào giaiphapexel.com.Tiếc là không có anh em nào ngoài này để gặp mặt.Mình có 1 cột dữ liệu văn bản có font chữ là UNICODE và VNI, vậy làm sao để lọc ra 2 font chữ này để chuyển đổi về 1 font. Cảm ơn các bạn
Sub FindFont()
Dim rng As Range, myCell As Range
Set rng = Selection.SpecialCells(xlCellTypeConstants, 23)
For Each myCell In rng
If Left(myCell.Font.Name, 4) = "VNI-" Then
myCell.Value = VniUni(myCell.Value)
End If
Next
Cells.Font.Name = "[B]Arial[/B]"
End Sub
Const CodUni = "225 224 7843 227 7841 259 7855 7857 7859 7861 7863 226 7845 7847 7849 7851 7853 233 232 7867 7869 7865 234 7871 7873 7875 7877 7879 237 236 7881 297 7883 243 242 7887 245 7885 244 7889 7891 7893 7895 7897 417 7899 7901 7903 7905 7907 250 249 7911 361 7909 432 7913 7915 7917 7919 7921 253 7923 7927 7929 7925 273 193 193 192 192 7842 7842 195 195 7840 7840 258 258 7854 7854 7856 7856 7858 7858 7860 7860 7862 7862 194 194 7844 7844 7846 7846 7848 7848 7850 7850 7852 7852 201 201 200 200 7866 7866 7868 7868 7864 7864 202 202 7870 7870 7872 7872 7874 7874 7876 7876 7878 7878 205 204 7880 296 7882 211 211 210 210 7886 7886 213 213 7884 7884 212 212 7888 7888 7890 7890 7892 7892 7894 7894 7896 7896 416 7898 7898 7900 7900 7902 7902 7904 7904 7906 7906 218 218 217 217 7910 7910 360 360 7908 7908 431 7912 7912 7914 7914 7916 7916 7918 7918 7920 7920 221 221 7922 7922 7926 7926 7928 7928 7924 272 "
Const StrVni = "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äí ì æ ó ò oùoøoûoõoïoâoáoàoåoãoäô ôùôøôûôõôïuùuøuûuõuïö öùöøöûöõöïyùyøyûyõî ñ AÙAùAØAøAÛAûAÕAõAÏAïAÊAêAÉAéAÈAè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âEÁEáEÀEàEÅEåEÃEãEÄEäÍ Ì Æ Ó Ò OÙOùOØOø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ïÖ ÖÙÖùÖØÖøÖÛÖûÖÕÖõÖÏÖïYÙYùYØYøYÛYûYÕYõÎ Ñ"
Function VniUni(text As String) As String
text = text & " "
For i = 1 To Len(text)
If Mid(text, i, 1) = " " Then
newtext = newtext & " "
Else
kytu = Mid(text, i, 2)
vitri = InStr(1, StrVni, kytu, 0)
If vitri = 0 Or Right(kytu, 1) = " " Or Len(kytu) = 1 Then
kytu = Mid(text, i, 1)
vitri = InStr(1, StrVni, kytu, 0)
If (Asc(kytu) >= 65 And Asc(kytu) <= 122) Then
vitri = 0
End If
Else
i = i + 1
End If
If vitri > 0 Then kytu = ChrW(Mid(CodUni, (vitri + 1) * 5 / 2 - 4, 5))
newtext = newtext & kytu
End If
Next
VniUni = Left(newtext, Len(newtext) - 1)
End Function