[HỎI]Cách chuyển đổi tiếng Việt từ kiểu gõ Telex về ký gốc nhập từ bàn phím ?

Liên hệ QC

caothuv

Thành viên mới
Tham gia
11/2/19
Bài viết
3
Được thích
0
Chào các anh, chị
Em có 1 case như thế này nhờ mọi người giúp. Liệu có cách nào chuyển đổi văn bản kiểu : ád thành asd không ạ ?
Ví dụ khác : Cộng hòa xã hội ---> Coong Hoaf xax hoi
Hiểu đơn giản là lúc mình input bằng bàn phím như thế nào thì khi convert xong nó sẽ ra những ký tự y như thế ạ !
Em cảm ơn mn ạ.
 
Chào các anh, chị
Em có 1 case như thế này nhờ mọi người giúp. Liệu có cách nào chuyển đổi văn bản kiểu : ád thành asd không ạ ?
Ví dụ khác : Cộng hòa xã hội ---> Coong Hoaf xax hoi
Hiểu đơn giản là lúc mình input bằng bàn phím như thế nào thì khi convert xong nó sẽ ra những ký tự y như thế ạ !
Em cảm ơn mn ạ.
Có đó bạn, có thể biến tấu từ chính là các hàm viết Unicode trong VBA.
*** Nguồn của anh @ndu96081631 (cảm ơn @huuthang_bd nhắc nhở)

Bạn sử dụng công thức
A1 = "Em ơi Hà Nội phố"
=UniConvert(A1,"VNI") --> Em o7i Ha2 No65i pho61
=UniConvert(A1,"Telex") --> Em owi Haf Nooji phoos

Rich (BB code):
Function UniConvert(Text As String, InputMethod As String) As String
  Dim VNI_Type, Telex_Type, CharCode, Temp, i As Long
  UniConvert = Text
  VNI_Type = Array("a81", "a82", "a83", "a84", "a85", "a61", "a62", "a63", "a64", "a65", "e61", _
      "e62", "e63", "e64", "e65", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", "o74", _
      "o75", "u71", "u72", "u73", "u74", "u75", "a1", "a2", "a3", "a4", "a5", "a8", "a6", "d9", _
      "e1", "e2", "e3", "e4", "e5", "e6", "i1", "i2", "i3", "i4", "i5", "o1", "o2", "o3", "o4", _
      "o5", "o6", "o7", "u1", "u2", "u3", "u4", "u5", "u7", "y1", "y2", "y3", "y4", "y5")
  Telex_Type = Array("aws", "awf", "awr", "awx", "awj", "aas", "aaf", "aar", "aax", "aaj", "ees", _
      "eef", "eer", "eex", "eej", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", "owx", _
      "owj", "uws", "uwf", "uwr", "uwx", "uwj", "as", "af", "ar", "ax", "aj", "aw", "aa", "dd", _
      "es", "ef", "er", "ex", "ej", "ee", "is", "if", "ir", "ix", "ij", "os", "of", "or", "ox", _
      "oj", "oo", "ow", "us", "uf", "ur", "ux", "uj", "uw", "ys", "yf", "yr", "yx", "yj")
  CharCode = Array(ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), ChrW(7845), ChrW(7847), _
      ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), ChrW(7879), _
      ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), ChrW(7903), _
      ChrW(7905), ChrW(7907), ChrW(7913), ChrW(7915), ChrW(7917), ChrW(7919), ChrW(7921), ChrW(225), _
      ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), ChrW(259), ChrW(226), ChrW(273), ChrW(233), ChrW(232), _
      ChrW(7867), ChrW(7869), ChrW(7865), ChrW(234), ChrW(237), ChrW(236), ChrW(7881), ChrW(297), ChrW(7883), _
      ChrW(243), ChrW(242), ChrW(7887), ChrW(245), ChrW(7885), ChrW(244), ChrW(417), ChrW(250), ChrW(249), _
      ChrW(7911), ChrW(361), ChrW(7909), ChrW(432), ChrW(253), ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925))
  Select Case InputMethod
    Case Is = "VNI": Temp = VNI_Type
    Case Is = "Telex": Temp = Telex_Type
  End Select
  For i = 0 To UBound(Temp)
    'UniConvert = Replace(UniConvert, Temp(i), CharCode(i))
    UniConvert = Replace(UniConvert, CharCode(i), Temp(i))
    'UniConvert = Replace(UniConvert, UCase(Temp(i)), UCase(CharCode(i)))
    UniConvert = Replace(UniConvert, UCase(CharCode(i)), UCase(Temp(i)))
  Next i
End Function
 

File đính kèm

  • UniConvert.xlsm
    18.2 KB · Đọc: 20
Lần chỉnh sửa cuối:
Upvote 0
Bác Thành nào? Blog nào? :rolleyes:
 
Upvote 0
Em cảm ơn bác ạ, em vừa thử code của bác, tuy nhiên nó không giải quyết triệt để được vấn đề convert về basic input keyboard ạ.
Ví dụ : Nghĩa : Có 2 cách viết ở Telex : Nghiax và Nghixa đều viết được, nhưng khi convert thì chỉ convert được thành 1 loại duy nhất là : Nghixa chứ không convert được thành Nghiax , em mong được giúp đỡ ạ.
1640830413483.png
Có đó bạn, có thể biến tấu từ chính là các hàm viết Unicode trong VBA.
Mình chỉnh sửa lại 1 chút copy từ blog của bác Thanh
Nguồn của anh @ndu96081631 (cảm ơn @huuthang_bd nhắc nhở)
Bạn sử dụng công thức
A1 = "Em ơi Hà Nội phố"
=UniConvert(A1,"VNI") --> Em o7i Ha2 No65i pho61
=UniConvert(A1,"Telex") --> Em owi Haf Nooji phoos

Rich (BB code):
Function UniConvert(Text As String, InputMethod As String) As String
'https://blog.hocexcel.online/go-tieng-viet-trong-vba-su-dung-msgbox-co-ho-tro-unicode-trong-vba.html
  Dim VNI_Type, Telex_Type, CharCode, Temp, i As Long
  UniConvert = Text
  VNI_Type = Array("a81", "a82", "a83", "a84", "a85", "a61", "a62", "a63", "a64", "a65", "e61", _
      "e62", "e63", "e64", "e65", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", "o74", _
      "o75", "u71", "u72", "u73", "u74", "u75", "a1", "a2", "a3", "a4", "a5", "a8", "a6", "d9", _
      "e1", "e2", "e3", "e4", "e5", "e6", "i1", "i2", "i3", "i4", "i5", "o1", "o2", "o3", "o4", _
      "o5", "o6", "o7", "u1", "u2", "u3", "u4", "u5", "u7", "y1", "y2", "y3", "y4", "y5")
  Telex_Type = Array("aws", "awf", "awr", "awx", "awj", "aas", "aaf", "aar", "aax", "aaj", "ees", _
      "eef", "eer", "eex", "eej", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", "owx", _
      "owj", "uws", "uwf", "uwr", "uwx", "uwj", "as", "af", "ar", "ax", "aj", "aw", "aa", "dd", _
      "es", "ef", "er", "ex", "ej", "ee", "is", "if", "ir", "ix", "ij", "os", "of", "or", "ox", _
      "oj", "oo", "ow", "us", "uf", "ur", "ux", "uj", "uw", "ys", "yf", "yr", "yx", "yj")
  CharCode = Array(ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), ChrW(7845), ChrW(7847), _
      ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), ChrW(7879), _
      ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), ChrW(7903), _
      ChrW(7905), ChrW(7907), ChrW(7913), ChrW(7915), ChrW(7917), ChrW(7919), ChrW(7921), ChrW(225), _
      ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), ChrW(259), ChrW(226), ChrW(273), ChrW(233), ChrW(232), _
      ChrW(7867), ChrW(7869), ChrW(7865), ChrW(234), ChrW(237), ChrW(236), ChrW(7881), ChrW(297), ChrW(7883), _
      ChrW(243), ChrW(242), ChrW(7887), ChrW(245), ChrW(7885), ChrW(244), ChrW(417), ChrW(250), ChrW(249), _
      ChrW(7911), ChrW(361), ChrW(7909), ChrW(432), ChrW(253), ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925))
  Select Case InputMethod
    Case Is = "VNI": Temp = VNI_Type
    Case Is = "Telex": Temp = Telex_Type
  End Select
  For i = 0 To UBound(Temp)
    'UniConvert = Replace(UniConvert, Temp(i), CharCode(i))
    UniConvert = Replace(UniConvert, CharCode(i), Temp(i))
    'UniConvert = Replace(UniConvert, UCase(Temp(i)), UCase(CharCode(i)))
    UniConvert = Replace(UniConvert, UCase(CharCode(i)), UCase(Temp(i)))
  Next i
End Function
 

File đính kèm

  • 1640830381056.png
    1640830381056.png
    1.6 KB · Đọc: 7
Upvote 0
Thì thấy dấu hỏi ngã nặng sắc huyền (?~.'`) thì chuyển gõ dấu (rxjsf) về cuối cùng là được .
 
Upvote 0
Em cảm ơn bác ạ, em vừa thử code của bác, tuy nhiên nó không giải quyết triệt để được vấn đề convert về basic input keyboard ạ.
Ví dụ : Nghĩa : Có 2 cách viết ở Telex : Nghiax và Nghixa đều viết được, nhưng khi convert thì chỉ convert được thành 1 loại duy nhất là : Nghixa chứ không convert được thành Nghiax , em mong được giúp đỡ ạ.
View attachment 270939
Tôi tên Thắng và tôi gõ các cách sau đều được: Thawngs, Thanwgs, Thangws, Thasngw, Thansgw, Thangsw, Thawsng, Thaswng, Thawnsg, Thasnwg...
Vậy thì biết cái nào là gốc?
Thì thấy dấu hỏi ngã nặng sắc huyền (?~.'`) thì chuyển gõ dấu (rxjsf) về cuối cùng là được .
Các ký tự này không phải lúc nào cũng là dấu. Làm cách này chắc phải đi đường vòng, chuyển sang kiểu VNI trước, dồn số về cuối rồi chuyển kiểu VNI sang kiểu Telex.
 
Upvote 0
Mình thua (ngoài khả năng).
Nhưng cũng nói để anh em nào biết vào chỉ thêm.
1. Theo như mình hiểu, font chữ được quy định thông qua bộ mã charcode, bộ gõ tiếng Việt (Telex hay Vni) cũng là 1 chuỗi các quy tắc.
Khi gõ "xuaw" hay "xuwa" đều thành "xưa" là vì bộ gõ (bộ chuyển đổi) cho phép cách nhập như vậy và chuyển đổi nó thành "x - ư - a"
đã chuyển xong thì kg thể biết xưa kia bạn gõ kiểu gì.
2. Nếu muốn thì ghi lại cái input từ bàn phím, bấm gì ra đó thì có vẽ khả dĩ hơn (Keylogger)
 
Upvote 0
Có đó bạn, có thể biến tấu từ chính là các hàm viết Unicode trong VBA.
Mình chỉnh sửa lại 1 chút copy từ blog của bác Thanh
Nguồn của anh @ndu96081631 (cảm ơn @huuthang_bd nhắc nhở)

Bạn sử dụng công thức
A1 = "Em ơi Hà Nội phố"
=UniConvert(A1,"VNI") --> Em o7i Ha2 No65i pho61
=UniConvert(A1,"Telex") --> Em owi Haf Nooji phoos
Đã đính chính thì xóa luôn cái link trong code nha bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Em cảm ơn các anh, chị nhiều. Đúng là việc convert ngược lại lúc đầu bất khả thi thật. Nhờ mn giải thích mà em hiểu rõ vấn đề rồi ạ. :)
 
Upvote 0
Đã đính chính thì xóa luôn cái link trong code nha bạn.
à, mình biết rõ nguồn thì ghi thêm, còn cái code trước khi mình edit thì đúng là copy từ blog người ta mà, có phải lấy bài của anh ndu đâu.
Chuyện blog họ xào thành của họ và kg ghi nguồn cũng đâu có phải lỗi mình :D
 
Upvote 0
Các ký tự này không phải lúc nào cũng là dấu.
Chưa hiểu ý anh.

Mã:
'Ví dụ:
'Có từ kết quả "nghiax", strKQ
'Chữ hoa thường tính sau
Telex_Type = Array("aws", "awf", "awr", "awx", "awj", "aas", "aaf", "aar", "aax", "aaj", "ees", _
      "eef", "eer", "eex", "eej", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", "owx", _
      "owj", "uws", "uwf", "uwr", "uwx", "uwj", "as", "af", "ar", "ax", "aj", "aw", "aa", "dd", _
      "es", "ef", "er", "ex", "ej", "ee", "is", "if", "ir", "ix", "ij", "os", "of", "or", "ox", _
      "oj", "oo", "ow", "us", "uf", "ur", "ux", "uj", "uw", "ys", "yf", "yr", "yx", "yj")
For each item in  Telex_Type
If instr(1, strKQ, item) > 0 Then
strDau = vba.right(item,1)
strKytu = vba.left(item, vba.len(item)-1)
strKQ = vba.replace(strKQ, item, strKytu) & strDau
Exit for
End if
Next item
 
Upvote 0
Chưa hiểu ý anh.

Mã:
'Ví dụ:
'Có từ kết quả "nghiax", strKQ
'Chữ hoa thường tính sau
Telex_Type = Array("aws", "awf", "awr", "awx", "awj", "aas", "aaf", "aar", "aax", "aaj", "ees", _
      "eef", "eer", "eex", "eej", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", "owx", _
      "owj", "uws", "uwf", "uwr", "uwx", "uwj", "as", "af", "ar", "ax", "aj", "aw", "aa", "dd", _
      "es", "ef", "er", "ex", "ej", "ee", "is", "if", "ir", "ix", "ij", "os", "of", "or", "ox", _
      "oj", "oo", "ow", "us", "uf", "ur", "ux", "uj", "uw", "ys", "yf", "yr", "yx", "yj")
For each item in  Telex_Type
If instr(1, strKQ, item) > 0 Then
strDau = vba.right(item,1)
strKytu = vba.left(item, vba.len(item)-1)
strKQ = vba.replace(strKQ, item, strKytu) & strDau
Exit for
End if
Next item
À nếu duyệt các trường hợp như vậy thì không vấn đề gì, tôi tưởng ý bạn là chuyển các ký tự gõ dấu (rxjsf) về cuối từ nên nghĩ là sẽ nhầm với các ký tự không phải dùng để gõ dấu (Ví dụ: sông).
 
Upvote 0
Chào các anh, chị
Em có 1 case như thế này nhờ mọi người giúp. Liệu có cách nào chuyển đổi văn bản kiểu : ád thành asd không ạ ?
Ví dụ khác : Cộng hòa xã hội ---> Coong Hoaf xax hoi
Tôi không hiểu. Bạn có "Cộng hòa xã hội", bạn muốn từ đó có "Coong Hoaf xax hoi". Bạn muốn có "Coong Hoaf xax hoi" để làm gì vậy?
 
Upvote 0
Lúc gõ mình đừng bật bộ gõ tiếng Việt, gõ xong là mình có kết quả luôn.
 
Upvote 0
Tôi không hiểu. Bạn có "Cộng hòa xã hội", bạn muốn từ đó có "Coong Hoaf xax hoi". Bạn muốn có "Coong Hoaf xax hoi" để làm gì vậy?
Có thể ứng dụng để sửa lỗi bỏ dấu sai:
hoà -> hoaf -> hòa
thuỷ -> thuyr -> thủy
 
Upvote 0
Web KT

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

Back
Top Bottom