Lọc font UNICODE và VNI (1 người xem)

  • Thread starter Thread starter vanhai
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

vanhai

Thành viên mới
Tham gia
3/10/06
Bài viết
34
Được thích
468
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
 
Bạn load file này về rồi cài đặt nhé!
Phần mềm này hay lắm.
 
Lần chỉnh sửa cuối:
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
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(...)
 
Nế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
 
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(...)
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, 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 !"
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!
Bạn hãy dùng hàm mà tôi đưa lên, bảo đảm chính xác
Nếu bạn vẫn không làm được, hãy đưa file của bạn lên đây, tôi làm cho
 
Nế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
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
 
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
Ái chà... vụ này cũng hơi căng à nha ---> Các cao thủ khác có ý kiến gì không?
Àh... Mà sao bạn không đưa dử liệu lên đây? Tôi nghĩ nhìn thấy dử liệu biết đâu tôi có cách khác (Có thể là Find and Replace)
 
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
Đ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.
Đề xuất 1 cách làm, chỉ đúng với sheet có 2 bảng mã Unicode và VNI Windows : Tìm ô có tên font 3 chữ đầu là "VNI-" và chuyển mã ô này sang Unicode
Mã:
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

Mã:
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  "
Mã:
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õÎ Ñ"
Mã:
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
Tùy font bạn sử dụng, thay "Arial" trong Cells.Font.Name = "Arial" thành "Times New Roman" hay font Unicode nào đó tùy bạn.
 

File đính kèm

Bạn dùng bộ uconvert xem sao. Mình xài nó thấy dùng khá tốt
 
Web KT

Bài viết mới nhất

Back
Top Bottom