Xin hàm chuyển tât cả thành chữ hoa (Font Unicode)

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

boyxin

Members actively
Tham gia
10/3/08
Bài viết
1,664
Được thích
2,335
Các bác ơi, giúp em 1 hàm chuyển tất cả thành chữ HOA
VD: A1 = chuyển tất cả thành chữ hoa
Thì UPPER(A1) = CHUYN TT C THÀNH CH HOA
Em muốn có 1 hàm mà ra kết quả: CHUYỂN TẤT CẢ THÀNH CHỮ HOA

CÁC BÁC GIÚP EM VỚI NHÉ (Font Unicode)
 
' Đây là hàm chuyển font unicode sang chữ Hoa trên diễn đàn

Function UPPERUni(ByVal vnstr As String)
Dim C As String, i As Long
vnstr = UCase(vnstr)
For i = 1 To Len(vnstr)
C = Mid(vnstr, i, 1)
Select Case C
Case ChrW$(97): C = ChrW$(65)
Case ChrW$(225): C = ChrW$(193)
Case ChrW$(224): C = ChrW$(192)
Case ChrW$(7843): C = ChrW$(7842)
Case ChrW$(227): C = ChrW$(195)
Case ChrW$(7841): C = ChrW$(7840)
Case ChrW$(259): C = ChrW$(258)
Case ChrW$(7855): C = ChrW$(7854)
Case ChrW$(7857): C = ChrW$(7856)
Case ChrW$(7859): C = ChrW$(7858)
Case ChrW$(7861): C = ChrW$(7860)
Case ChrW$(7863): C = ChrW$(7862)
Case ChrW$(226): C = ChrW$(194)
Case ChrW$(7845): C = ChrW$(7844)
Case ChrW$(7847): C = ChrW$(7846)
Case ChrW$(7849): C = ChrW$(7848)
Case ChrW$(7851): C = ChrW$(7850)
Case ChrW$(7853): C = ChrW$(7852)
Case ChrW$(101): C = ChrW$(69)
Case ChrW$(233): C = ChrW$(201)
Case ChrW$(232): C = ChrW$(200)
Case ChrW$(7867): C = ChrW$(7866)
Case ChrW$(7869): C = ChrW$(7868)
Case ChrW$(7865): C = ChrW$(7864)
Case ChrW$(234): C = ChrW$(202)
Case ChrW$(7871): C = ChrW$(7870)
Case ChrW$(7873): C = ChrW$(7872)
Case ChrW$(7875): C = ChrW$(7874)
Case ChrW$(7877): C = ChrW$(7876)
Case ChrW$(7879): C = ChrW$(7878)
Case ChrW$(111): C = ChrW$(79)
Case ChrW$(243): C = ChrW$(211)
Case ChrW$(242): C = ChrW$(210)
Case ChrW$(7887): C = ChrW$(7886)
Case ChrW$(245): C = ChrW$(213)
Case ChrW$(7885): C = ChrW$(7884)
Case ChrW$(244): C = ChrW$(212)
Case ChrW$(7889): C = ChrW$(7888)
Case ChrW$(7891): C = ChrW$(7890)
Case ChrW$(7893): C = ChrW$(7892)
Case ChrW$(7895): C = ChrW$(7894)
Case ChrW$(7897): C = ChrW$(7896)
Case ChrW$(417): C = ChrW$(416)
Case ChrW$(7899): C = ChrW$(7898)
Case ChrW$(7901): C = ChrW$(7900)
Case ChrW$(7903): C = ChrW$(7902)
Case ChrW$(7905): C = ChrW$(7904)
Case ChrW$(7907): C = ChrW$(7906)
Case ChrW$(105): C = ChrW$(73)
Case ChrW$(237): C = ChrW$(205)
Case ChrW$(236): C = ChrW$(204)
Case ChrW$(7881): C = ChrW$(7880)
Case ChrW$(297): C = ChrW$(296)
Case ChrW$(7883): C = ChrW$(7882)
Case ChrW$(117): C = ChrW$(85)
Case ChrW$(250): C = ChrW$(218)
Case ChrW$(249): C = ChrW$(217)
Case ChrW$(7911): C = ChrW$(7910)
Case ChrW$(361): C = ChrW$(360)
Case ChrW$(7909): C = ChrW$(7908)
Case ChrW$(432): C = ChrW$(431)
Case ChrW$(7913): C = ChrW$(7912)
Case ChrW$(7915): C = ChrW$(7914)
Case ChrW$(7917): C = ChrW$(7916)
Case ChrW$(7919): C = ChrW$(7918)
Case ChrW$(7921): C = ChrW$(7920)
Case ChrW$(121): C = ChrW$(89)
Case ChrW$(253): C = ChrW$(221)
Case ChrW$(7923): C = ChrW$(7922)
Case ChrW$(7927): C = ChrW$(7926)
Case ChrW$(7929): C = ChrW$(7928)
Case ChrW$(7925): C = ChrW$(7924)
Case ChrW$(273): C = ChrW$(272)
End Select
Next i
UPPERUni = vnstr
End Function
 
Upvote 0
Bác có thể tải Tiện ích Tiếng Việt của Phạm Trung để sử dụng. Rất tiện.
 
Upvote 0
Function viết kiểu này hơi dài trong khi mã của các ký tự chuyển đổi chênh lệch có 2 loại:
Loại 1: MÃ GIẢM ĐI 32
PHP:
Case ChrW$(97): C = ChrW$(65)
Case ChrW$(101): C = ChrW$(69)
Case ChrW$(105): C = ChrW$(73)
Case ChrW$(111): C = ChrW$(79)
Case ChrW$(117): C = ChrW$(85)
Case ChrW$(121): C = ChrW$(89)
Case ChrW$(224): C = ChrW$(192)
Case ChrW$(225): C = ChrW$(193)
Case ChrW$(226): C = ChrW$(194)
Case ChrW$(227): C = ChrW$(195)
Case ChrW$(232): C = ChrW$(200)
Case ChrW$(233): C = ChrW$(201)
Case ChrW$(234): C = ChrW$(202)
Case ChrW$(236): C = ChrW$(204)
Case ChrW$(237): C = ChrW$(205)
Case ChrW$(242): C = ChrW$(210)
Case ChrW$(243): C = ChrW$(211)
Case ChrW$(244): C = ChrW$(212)
Case ChrW$(245): C = ChrW$(213)
Case ChrW$(249): C = ChrW$(217)
Case ChrW$(250): C = ChrW$(218)
Case ChrW$(253): C = ChrW$(221)
Loại 2: MÃ GIẢM ĐI 1
PHP:
Case ChrW$(259): C = ChrW$(258)
Case ChrW$(273): C = ChrW$(272)
Case ChrW$(297): C = ChrW$(296)
Case ChrW$(361): C = ChrW$(360)
Case ChrW$(417): C = ChrW$(416)
Case ChrW$(432): C = ChrW$(431)
Case ChrW$(7841): C = ChrW$(7840)
Case ChrW$(7843): C = ChrW$(7842)
Case ChrW$(7845): C = ChrW$(7844)
Case ChrW$(7847): C = ChrW$(7846)
Case ChrW$(7849): C = ChrW$(7848)
Case ChrW$(7851): C = ChrW$(7850)
Case ChrW$(7853): C = ChrW$(7852)
Case ChrW$(7855): C = ChrW$(7854)
Case ChrW$(7857): C = ChrW$(7856)
Case ChrW$(7859): C = ChrW$(7858)
Case ChrW$(7861): C = ChrW$(7860)
Case ChrW$(7863): C = ChrW$(7862)
Case ChrW$(7865): C = ChrW$(7864)
Case ChrW$(7867): C = ChrW$(7866)
Case ChrW$(7869): C = ChrW$(7868)
Case ChrW$(7871): C = ChrW$(7870)
Case ChrW$(7873): C = ChrW$(7872)
Case ChrW$(7875): C = ChrW$(7874)
Case ChrW$(7877): C = ChrW$(7876)
Case ChrW$(7879): C = ChrW$(7878)
Case ChrW$(7881): C = ChrW$(7880)
Case ChrW$(7883): C = ChrW$(7882)
Case ChrW$(7885): C = ChrW$(7884)
Case ChrW$(7887): C = ChrW$(7886)
Case ChrW$(7889): C = ChrW$(7888)
Case ChrW$(7891): C = ChrW$(7890)
Case ChrW$(7893): C = ChrW$(7892)
Case ChrW$(7895): C = ChrW$(7894)
Case ChrW$(7897): C = ChrW$(7896)
Case ChrW$(7899): C = ChrW$(7898)
Case ChrW$(7901): C = ChrW$(7900)
Case ChrW$(7903): C = ChrW$(7902)
Case ChrW$(7905): C = ChrW$(7904)
Case ChrW$(7907): C = ChrW$(7906)
Case ChrW$(7909): C = ChrW$(7908)
Case ChrW$(7911): C = ChrW$(7910)
Case ChrW$(7913): C = ChrW$(7912)
Case ChrW$(7915): C = ChrW$(7914)
Case ChrW$(7917): C = ChrW$(7916)
Case ChrW$(7919): C = ChrW$(7918)
Case ChrW$(7921): C = ChrW$(7920)
Case ChrW$(7923): C = ChrW$(7922)
Case ChrW$(7925): C = ChrW$(7924)
Case ChrW$(7927): C = ChrW$(7926)
Case ChrW$(7929): C = ChrW$(7928)
Ai biết về VBA chỉnh sủa giúp cho ngắn 1 chút để đọc còn có thể hiểu
Mã:
'giam32 = Array (ChrW$(97),ChrW$(101),ChrW$(105),ChrW$(111),ChrW$(117),ChrW$(121),ChrW$(224),ChrW$(225),ChrW$(226),ChrW$(227),ChrW$(232),ChrW$(233),ChrW$(234),ChrW$(236),ChrW$(237),ChrW$(242),ChrW$(243),ChrW$(244),ChrW$(245),ChrW$(249),ChrW$ (250), ChrW$(253))
'giam1 = Array (ChrW$(259),ChrW$(273),ChrW$(297),ChrW$(361),ChrW$(417),ChrW$(432),ChrW$(7841),ChrW$(7843),ChrW$(7845),ChrW$(7847),ChrW$(7849),ChrW$(7851),ChrW$(7853),ChrW$(7855),ChrW$(7857),ChrW$(7859),ChrW$(7861),ChrW$(7863),ChrW$(7865),ChrW$(7867),ChrW$(7869),ChrW$(7871),ChrW$(7873),ChrW$(7875),ChrW$(7877),ChrW$(7879),ChrW$(7881),ChrW$(7883),ChrW$(7885),ChrW$(7887),ChrW$(7889),ChrW$(7891),ChrW$(7893),ChrW$(7895),ChrW$(7897),ChrW$(7899),ChrW$(7901),ChrW$(7903),ChrW$(7905),ChrW$(7907),ChrW$(7909),ChrW$(7911),ChrW$(7913),ChrW$(7915),ChrW$(7917),ChrW$(7919),ChrW$(7921),ChrW$(7923),ChrW$(7925),ChrW$(7927),ChrW$(7929))
Mã:
'giam32 = Array (ChrW(97),ChrW(101),ChrW(105),ChrW(111),ChrW(117),ChrW(121),ChrW(224),ChrW(225),ChrW(226),ChrW(227),ChrW(232),ChrW(233),ChrW(234),ChrW(236),ChrW(237),ChrW(242),ChrW(243),ChrW(244),ChrW(245),ChrW(249),ChrW (250), ChrW(253))
'giam1 = Array (ChrW(259),ChrW(273),ChrW(297),ChrW(361),ChrW(417),ChrW(432),ChrW(7841),ChrW(7843),ChrW(7845),ChrW(7847),ChrW(7849),ChrW(7851),ChrW(7853),ChrW(7855),ChrW(7857),ChrW(7859),ChrW(7861),ChrW(7863),ChrW(7865),ChrW(7867),ChrW(7869),ChrW(7871),ChrW(7873),ChrW(7875),ChrW(7877),ChrW(7879),ChrW(7881),ChrW(7883),ChrW(7885),ChrW(7887),ChrW(7889),ChrW(7891),ChrW(7893),ChrW(7895),ChrW(7897),ChrW(7899),ChrW(7901),ChrW(7903),ChrW(7905),ChrW(7907),ChrW(7909),ChrW(7911),ChrW(7913),ChrW(7915),ChrW(7917),ChrW(7919),ChrW(7921),ChrW(7923),ChrW(7925),ChrW(7927),ChrW(7929))
Mã:
'giam32 = Array (97,101,105,111,117,121,224,225,226,227,232,233,234,236,237,242,243,244,245,249,ChrW (250, 253))
'giam1 = Array (259,273,297,361,417,432,7841,7843,7845,7847,7849,7851,7853,7855,7857,7859,7861,7863,7865,7867,7869,7871,7873,7875,7877,7879,7881,7883,7885,7887,7889,7891,7893,7895,7897,7899,7901,7903,7905,7907,7909,7911,7913,7915,7917,7919,7921,7923,7925,7927,7929))

Bác có thể tải Tiện ích Tiếng Việt của Phạm Trung để sử dụng. Rất tiện.

nhưng mà là ở địa chỉ nào vậy?
 
Lần chỉnh sửa cuối:
Upvote 0
Trước đây mình cũng cần và được các bác trên diễn đàn hướng dẫn!
Xin chia sẻ cùng bạn

'Hàm chuyển đổi chữ => HOA
'VD : Chuyển đổi chữ => CHUYỂN ĐỔI CHỮ
Function UpperUni(uni) As String
UpperUni = UCase(uni)
End Function

'Hàm chuyển đổi chữ => Chỉ HOA chữ cái đầu
'VD : Chuyển đổi chữ => Chuyển Đổi Chữ
Function ProperUni(uni) As String
uni = " " & LCase(uni)
For n = 2 To Len(uni)
kytu = Mid(uni, n, 1)
If Mid(uni, n - 1, 1) = " " Then
If AscW(kytu) < 256 Then
kytu = UCase(kytu)
Else
kytu = ChrW(AscW(kytu) - 1)
End If
End If
puni = puni & kytu
Next
ProperUni = puni
End Function

'Hàm chuyển đổi chữ => thường
'VD : ChuyỂn đổi chỮ => chuyển đổi chữ
Function LowerUni(uni) As String
LowerUni = LCase(uni)
End Function
 
Upvote 0
TIện ích tiếng việt

Dùng tạm Add này để chuyển đổi đi, còn một số chức năng cũng dùng được, riêng phần doc_soVND thì hơi bị lỗi một chút
 

File đính kèm

Upvote 0
thank Anhntfpt

Trước đây mình cũng cần và được các bác trên diễn đàn hướng dẫn!
Xin chia sẻ cùng bạn

'Hàm chuyển đổi chữ => HOA
'VD : Chuyển đổi chữ => CHUYỂN ĐỔI CHỮ
Function UpperUni(uni) As String
UpperUni = UCase(uni)
End Function

'Hàm chuyển đổi chữ => Chỉ HOA chữ cái đầu
'VD : Chuyển đổi chữ => Chuyển Đổi Chữ
Function ProperUni(uni) As String
uni = " " & LCase(uni)
For n = 2 To Len(uni)
kytu = Mid(uni, n, 1)
If Mid(uni, n - 1, 1) = " " Then
If AscW(kytu) < 256 Then
kytu = UCase(kytu)
Else
kytu = ChrW(AscW(kytu) - 1)
End If
End If
puni = puni & kytu
Next
ProperUni = puni
End Function

'Hàm chuyển đổi chữ => thường
'VD : ChuyỂn đổi chỮ => chuyển đổi chữ
Function LowerUni(uni) As String
LowerUni = LCase(uni)
End Function

Cảm ơn bạn rất nhiều

- Mỗi hàm trên rất ngắn gọn, dễ hiểu, nhưng chưa thực sự chuẩn khi tên có nhiều khoảng trống
- KHẮC PHỤC: thêm vào ngay dưới mỗi Function
uni = " " & Application.WorksheetFunction.Trim(uni)​
sẽ chuẩn hơn.
 
Lần chỉnh sửa cuối:
Upvote 0
' Đây là hàm chuyển font unicode sang chữ Hoa trên diễn đàn
PHP:
Function UPPERUni(ByVal vnstr As String)
Dim C As String, i As Long
   vnstr = UCase(vnstr)
   For i = 1 To Len(vnstr)
      C = Mid(vnstr, i, 1)
      Select Case C
1         Case ChrW$(97): C = ChrW$(65)
         Case ChrW$(225): C = ChrW$(193)
         Case ChrW$(224): C = ChrW$(192)
         Case ChrW$(227): C = ChrW$(195)
         Case ChrW$(259): C = ChrW$(258)
         Case ChrW$(273): C = ChrW$(272)
        Case ChrW$(121): C = ChrW$(89)
         Case ChrW$(253): C = ChrW$(221)
        Case ChrW$(226): C = ChrW$(194)
         Case ChrW$(101): C = ChrW$(69)
         Case ChrW$(233): C = ChrW$(201)
         Case ChrW$(232): C = ChrW$(200)
          Case ChrW$(234): C = ChrW$(202)
        Case ChrW$(111): C = ChrW$(79)
         Case ChrW$(243): C = ChrW$(211)
         Case ChrW$(242): C = ChrW$(210)
         Case ChrW$(245): C = ChrW$(213) 
         Case ChrW$(244): C = ChrW$(212)
        Case ChrW$(417): C = ChrW$(416)
         Case ChrW$(105): C = ChrW$(73)
         Case ChrW$(237): C = ChrW$(205)
         Case ChrW$(236): C = ChrW$(204)
        Case ChrW$(117): C = ChrW$(85)
         Case ChrW$(250): C = ChrW$(218)
         Case ChrW$(249): C = ChrW$(217)
         Case ChrW$(297): C = ChrW$(296)
        Case ChrW$(361): C = ChrW$(360)
28         Case ChrW$(432): C = ChrW$(431)

29      Case ChrW$(7841): C = ChrW$(7840)
          Case ChrW$(7843): C = ChrW$(7842)
         Case ChrW$(7845): C = ChrW$(7844)
         Case ChrW$(7847): C = ChrW$(7846)
         Case ChrW$(7849): C = ChrW$(7848)
         Case ChrW$(7851): C = ChrW$(7850)
         Case ChrW$(7853): C = ChrW$(7852)
         Case ChrW$(7855): C = ChrW$(7854)
         Case ChrW$(7857): C = ChrW$(7856)
         Case ChrW$(7859): C = ChrW$(7858)
         Case ChrW$(7861): C = ChrW$(7860)
         Case ChrW$(7863): C = ChrW$(7862)
        Case ChrW$(7865): C = ChrW$(7864)
         Case ChrW$(7867): C = ChrW$(7866)
         Case ChrW$(7869): C = ChrW$(7868) 
         Case ChrW$(7871): C = ChrW$(7870)
         Case ChrW$(7873): C = ChrW$(7872)
         Case ChrW$(7875): C = ChrW$(7874)
         Case ChrW$(7877): C = ChrW$(7876)
         Case ChrW$(7879): C = ChrW$(7878) 
         Case ChrW$(7881): C = ChrW$(7880)
         Case ChrW$(7883): C = ChrW$(7882)
         Case ChrW$(7885): C = ChrW$(7884)
         Case ChrW$(7887): C = ChrW$(7886)
         Case ChrW$(7889): C = ChrW$(7888)
         Case ChrW$(7891): C = ChrW$(7890)
         Case ChrW$(7893): C = ChrW$(7892)
         Case ChrW$(7895): C = ChrW$(7894)
         Case ChrW$(7897): C = ChrW$(7896) 
         Case ChrW$(7899): C = ChrW$(7898)
         Case ChrW$(7901): C = ChrW$(7900)
         Case ChrW$(7903): C = ChrW$(7902)
         Case ChrW$(7905): C = ChrW$(7904)
         Case ChrW$(7907): C = ChrW$(7906)
         Case ChrW$(7909): C = ChrW$(7908)
          Case ChrW$(7911): C = ChrW$(7910)          
         Case ChrW$(7913): C = ChrW$(7912)
         Case ChrW$(7915): C = ChrW$(7914)
         Case ChrW$(7917): C = ChrW$(7916)
         Case ChrW$(7919): C = ChrW$(7918)
         Case ChrW$(7921): C = ChrW$(7920) 
         Case ChrW$(7923): C = ChrW$(7922)
         Case ChrW$(7925): C = ChrW$(7924)
         Case ChrW$(7927): C = ChrW$(7926)
73       Case ChrW$(7929): C = ChrW$(7928) 

      End Select
   Next i
   UPPERUni = vnstr
End Function
Ta chịu khó sắp xếp lại theo 1 trật tự mà VBA ưa thích (chú không phải theo chữ cái(?)) thì sẽ thấy ngay qui luật hầu để tiết giảm các dòng lệnh;
Các dòng từ 29 đến 73 có thể thay được bằng những dòng lệnh khác không các bạn?
 
Upvote 0
Một cách viết khác cho hàm UPPER của Excel cho Unicode:

Mã:
[SIZE=3]Function UpperUni(chuoi As String) As String[/SIZE]
[SIZE=3][COLOR=blue]chuoi = LCase(chuoi)[/COLOR][/SIZE]
[SIZE=3]For n = 1 To Len(chuoi)[/SIZE]
[SIZE=3]kytu = Mid(chuoi, n, 1)[/SIZE]
[SIZE=3]If AscW(kytu) < 256 Then[/SIZE]
[SIZE=3]  kytu = UCase(kytu)[/SIZE]
[SIZE=3]Else[/SIZE]
[SIZE=3]  kytu = ChrW(AscW(kytu) - 1)[/SIZE]
[SIZE=3]End If[/SIZE]
[SIZE=3]Newchuoi = Newchuoi & kytu[/SIZE]
[SIZE=3]Next[/SIZE]
[SIZE=3]UpperUni = Newchuoi[/SIZE]
[SIZE=3]End Function[/SIZE]
nếu muốn cắt các khoảng trắng thừa, thay chuoi = LCase(chuoi) bằng chuoi=Application.WorksheetFunction.Trim(LCase(chuoi))

Viết thêm phần này cho các bạn quan tâm đến Unicode:
Bảng mã tiếng Việt Unicode rất phức tạp. code chạy từ 97 (a) đến 7929 (ỹ). So sách code chữ thường và code chữ hoa của Unicode, tôi nhận thấy nó có quy luật thế này:
a. Code <256:
a ... z, A ... Z, à á â ã è é ê ì í ò ó ô õ ù ú ý À Á Â Ã È É Ê Ì Í Ò Ó Ô Õ Ù Ú Ý.
Trong nhóm này, giữa chữ thường và chữ hoa code chênh lệch 32. Ví dụ:
97 (a) - 65 (A)=32
226 (â) - 194 (Â)=32
249 (ù) - 217 (ù)=32
b. Code >256:
các ký tự tiếng Việt còn lại. Trong nhóm này, giữa chữ thường và chữ hoa code chênh lệch 1. Ví dụ:
273 (đ) - 272 (Đ)=1
432 (ư) - 431 (Ư) =1
7929 (ỹ) - 7928 (Ỹ)=1
Nắm được quy luật này, viết hàm chuyển chữ thường > HOA lại rất đơn giản:
b1. chuyển chuỗi sang chữ thường bằng hàm Lcase Lcase(chuoi)
b2. duyệt từng ký tự của chuỗi và kiểm tra code của nó:
- Nếu <256 dùng hàm Ucase chuyển kytu=UCase(kytu) hoặc giảm code đi 32 kytu=Chr(Asc(kytu)-32)
- Nếu >256 dùng giảm code đi 1 kytu = Chr(AscW(kytu) - 1)
 
Upvote 0
Một cách viết khác cho hàm UPPER của Excel cho Unicode:

Mã:
[SIZE=3]Function UpperUni(chuoi As String) As String[/SIZE]
[SIZE=3][COLOR=blue]chuoi = LCase(chuoi)[/COLOR][/SIZE]
[SIZE=3]For n = 1 To Len(chuoi)[/SIZE]
[SIZE=3]kytu = Mid(chuoi, n, 1)[/SIZE]
[SIZE=3]If AscW(kytu) < 256 Then[/SIZE]
[SIZE=3]kytu = UCase(kytu)[/SIZE]
[SIZE=3]Else[/SIZE]
[SIZE=3]kytu = ChrW(AscW(kytu) - 1)[/SIZE]
[SIZE=3]End If[/SIZE]
[SIZE=3]Newchuoi = Newchuoi & kytu[/SIZE]
[SIZE=3]Next[/SIZE]
[SIZE=3]UpperUni = Newchuoi[/SIZE]
[SIZE=3]End Function[/SIZE]
nếu muốn cắt các khoảng trắng thừa, thay chuoi = LCase(chuoi) bằng chuoi=Application.WorksheetFunction.Trim(LCase(chuoi))

Viết thêm phần này cho các bạn quan tâm đến Unicode:
Bảng mã tiếng Việt Unicode rất phức tạp. code chạy từ 97 (a) đến 7929 (ỹ). So sách code chữ thường và code chữ hoa của Unicode, tôi nhận thấy nó có quy luật thế này:
a. Code <256:
a ... z, A ... Z, à á â ã è é ê ì í ò ó ô õ ù ú ý À Á Â Ã È É Ê Ì Í Ò Ó Ô Õ Ù Ú Ý.
Trong nhóm này, giữa chữ thường và chữ hoa code chênh lệch 32. Ví dụ:
97 (a) - 65 (A)=32
226 (â) - 194 (Â)=32
249 (ù) - 217 (ù)=32
b. Code >256:
các ký tự tiếng Việt còn lại. Trong nhóm này, giữa chữ thường và chữ hoa code chênh lệch 1. Ví dụ:
273 (đ) - 272 (Đ)=1
432 (ư) - 431 (Ư) =1
7929 (ỹ) - 7928 (Ỹ)=1
Nắm được quy luật này, viết hàm chuyển chữ thường > HOA lại rất đơn giản:
b1. chuyển chuỗi sang chữ thường bằng hàm Lcase Lcase(chuoi)
b2. duyệt từng ký tự của chuỗi và kiểm tra code của nó:
- Nếu <256 dùng hàm Ucase chuyển kytu=UCase(kytu) hoặc giảm code đi 32 kytu=Chr(Asc(kytu)-32)
- Nếu >256 dùng giảm code đi 1 kytu = Chr(AscW(kytu) - 1)

Hình như trong VBA: hàm UCase thông minh hơn ta tưởng, tự nó biết trường hợp nào thì giảm mã đi 32, trường hợp nào thì giảm mã đi 1 <=> Chỉ cần thế này là đủ để chuyển tất cả các ký tự thành chữ in hoa roài
PHP:
Function UpperUni(chuoi As String) As String
chuoi=Application.WorksheetFunction.Trim(LCase(chuoi))
UpperUni = UCase(chuoi)
End Function
 
Upvote 0
Hình như trong VBA: hàm UCase thông minh hơn ta tưởng, tự nó biết trường hợp nào thì giảm mã đi 32, trường hợp nào thì giảm mã đi 1
Thank Boyxin.
Mình mất không biết bao nhiêu thời gian cho các bảng mã. Thử các trường hợp nhưng bỏ lọt lưới Ucase. Cứ nghĩ nó quá khó nên cứ tìm đường trên trời. Cám ơn GPE và Boyxin.
Bây giờ thì lại càng cực kỳ đơn giản cho việc chuyển sang chữ hoa (UPPER) và chữ Hoa Đầu Từ (PROPER).
chuyển sang chữ hoa:
Mã:
Function UpperUni(chuoi As String) As String
UpperUni = Application.WorksheetFunction.Trim(UCase(chuoi))
End Function
chuyển sang chữ Hoa Đầu Từ:
Mã:
Function ProperUni(chuoi As String) As String
chuoi = " " & Application.WorksheetFunction.Trim(LCase(chuoi))
stt = Len(chuoi)
If stt > 1 Then
  Do
    stt = InStrRev(chuoi, " ", stt)
    Mid(chuoi, stt + 1, 1) = UCase(Mid(chuoi, stt + 1, 1))
    stt = stt - 1
  Loop While stt > 0
  ProperUni = Mid(chuoi, 2)
End If
End Function
 
Upvote 0
Thầy Long ơi... về phần chuyển chử Hoa đầu sao thầy ko dùng:
PHP:
Function ProperUni(chuoi As String) As String
  Dim Chw As String
  Chw = Application.WorksheetFunction.Trim(LCase(chuoi))
  ProperUni = Application.WorksheetFunction.Proper(Chw)
End Function
Dùng hàm Proper trong công thức Excel cho kết quả ko như ý nhưng nếu cho nó vào code thì lại ngon lành... thầy thử xem!
ANH TUẤN
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng hàm Proper trong công thức Excel cho kết quả ko như ý nhưng nếu cho nó vào code thì lại ngon lành... thầy thử xem!
ANH TUẤN
Không được Anh Tuấn ơi. Nó chỉ đúng với code ký tự <256 (à á â ã è é ê ì í ò ó ô õ ù ú ý À Á Â Ã È É Ê Ì Í Ò Ó Ô Õ Ù Ú Ý). Còn phần mở rộng của Unicode thì nó chả thèm làm !
 
Upvote 0
Không được Anh Tuấn ơi. Nó chỉ đúng với code ký tự <256 (à á â ã è é ê ì í ò ó ô õ ù ú ý À Á Â Ã È É Ê Ì Í Ò Ó Ô Õ Ù Ú Ý). Còn phần mở rộng của Unicode thì nó chả thèm làm !
Em chưa hiểu lắm.. thầy có thể nói thêm phần mở rộng gì đó là cái gì dc ko?
ANH TUẤN
 
Upvote 0
Em chưa hiểu lắm.. thầy có thể nói thêm phần mở rộng gì đó là cái gì dc ko?
ANH TUẤN
Xin phép trả lời hộ Anh Long.
Phần mở rộng ie những chữ khác à á â ã è é ê ì í ò ó ô õ ù ú ý À Á Â Ã È É Ê Ì Í Ò Ó Ô Õ Ù Ú Ý (Có mã >256)
Bác chạy thử sub này sẽ thấy.
PHP:
Sub FillKyTu()
j = 1
Columns(3).ClearContents
For i = 7840 To 7921 '256 To 270
    Range("C" & j).Value = ChrW(i)
    j = j + 1
Next
 
Upvote 0
Xin phép trả lời hộ Anh Long.
Phần mở rộng ie những chữ khác à á â ã è é ê ì í ò ó ô õ ù ú ý À Á Â Ã È É Ê Ì Í Ò Ó Ô Õ Ù Ú Ý (Có mã >256)
Bác chạy thử sub này sẽ thấy.
PHP:
Sub FillKyTu()
j = 1
Columns(3).ClearContents
For i = 7840 To 7921 '256 To 270
    Range("C" & j).Value = ChrW(i)
    j = j + 1
Next
Ua sao kỳ vậy! Mấy chử ấy vẫn áp dụng Function của tôi bình thường mà.. Có gì ko ổn đâu...
Các bạn xem file này và liệt kê những ký tự nào ko convert dc dùm với... (tôi ko phát hiện ra)
ANH TUẤN
 

File đính kèm

Upvote 0
Ua sao kỳ vậy! Mấy chử ấy vẫn áp dụng Function của tôi bình thường mà.. Có gì ko ổn đâu...
Các bạn xem file này và liệt kê những ký tự nào ko convert dc dùm với... (tôi ko phát hiện ra)
ANH TUẤN

anhtuan1066 xem đi, đâu có được

Câu này nè:
1- trần xuân ẩn chữ ẩ không được
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom