Đào Thuận Duy
Thành viên mới
- Tham gia
- 28/2/22
- Bài viết
- 6
- Được thích
- 0
Chuyển về cùng 1 loại đi.Dùng công cụ của Unikey.Các cao nhân cho em hỏi chút. Em có 1 file excel danh sách do mình nhập vào và 1 file excel trích xuất từ Web. Bây giờ em kiểm tra dữ liệu trên 2 file thì hiển thị giống nhau nhưng bản chất lại khác thế này có bác nào cứu em được không ạ?
Em đã dùng 1 số công cụ để chuyển đổi nhưng vẫn không được ạ. Dùng Unikey chuyển từ unicode sang unicode ko được, dùng chức năng bỏ dấu cũng không được, dùng 1 số code vba để chuyển từ tổ hợp sang dựng sẵn cũng ko được. Có bác nào có code chuẩn cho em xin với ạ!Chuyển về cùng 1 loại đi.Dùng công cụ của Unikey.
Cảm ơn bác nhiều! Bác có cách nào convert được kí tự từ unicode tổ hợp về unicode dựng sẵn không ạ? Em mò mấy hôm nay chưa ra được.Chữ trong dòng 1 là unicode tổ hợp, còn trong dòng 2 là unicode dựng sẵn. Nếu bạn chưa biết phân biệt 2 dạng này thì tìm đọc trên mạng hoặc trong cửa sổ Unikey nhấn nút "Hướng dẫn" rồi đọc mục 2.1.1 Tổ hợp hay dựng sẵn?
Trong Unikey
Bảng mã Unicode - unicode dựng sẵn
Bảng mả Unicode tổ hợp - unicode tổ hợp.
Unikey làm được mà. Nếu bạn nói không làm được thì hãy đính kèm tập tin với văn bản "cứng đầu" mà bạn cho là không "làm được".Em đã dùng 1 số công cụ để chuyển đổi nhưng vẫn không được ạ. Dùng Unikey chuyển từ unicode sang unicode ko được, dùng chức năng bỏ dấu cũng không được, dùng 1 số code vba để chuyển từ tổ hợp sang dựng sẵn cũng ko được. Có bác nào có code chuẩn cho em xin với ạ!
Cảm ơn bác nhiều! Bác có cách nào convert được kí tự từ unicode tổ hợp về unicode dựng sẵn không ạ? Em mò mấy hôm nay chưa ra được.
Dạ em cảm ơn các bác đã lưu tâm ạ! Em đính nó đây ạ!Unikey làm được mà. Nếu bạn nói không làm được thì hãy đính kèm tập tin với văn bản "cứng đầu" mà bạn cho là không "làm được".
Dạ em gửi bác ngâm cứu giúp em ạ!"bác nào cứu em"
Đưa mỗi cái ảnh thì khó cứu lắm.
Thôi được, bạn đợi đến tối tôi gửi cho bạn code. 22:00 ở chỗ tôi là 4:00 ở Việt Nam.Dạ em cảm ơn các bác đã lưu tâm ạ! Em đính nó đây ạ!
Xin lỗi bạn vì tôi không thể giúp bạn.Dạ em cảm ơn các bác đã lưu tâm ạ! Em đính nó đây ạ!
Như bài #9 đã phân tích, dữ liệu của bạn cũng là Unicode tổ hợp nhưng được sử dụng cách kết hợp ký tự khác với cách phổ biến thường thấy (tạm gọi là Unicode tổ hợp chuẩn). Cụ thể là Unicode tổ hợp chuẩn chỉ sử dụng một ký tự cho một chữ cái (không bao gồm dấu thanh) trong khi dữ liệu của bạn sử dụng 2 ký tự cho các chữ cái ngoài bảng chữ cái Latinh (ă, â, ơ...) - một ký tự trong bản chữ cái Latinh và một ký tự dấu chữ cái.Dạ em cảm ơn các bác đã lưu tâm ạ! Em đính nó đây ạ!
Bài đã được tự động gộp:
Dạ em gửi bác ngâm cứu giúp em ạ!
Function UnicodeToHop(ByVal sText As String) As String
Dim aArr1 As Variant, aArr2 As Variant, i As Long
aArr1 = Array("a" & ChrW(774), "a" & ChrW(770), "e" & ChrW(770), "o" & ChrW(770), "o" & ChrW(795), "u" & ChrW(795), "A" & ChrW(774), "A" & ChrW(770), "E" & ChrW(770), "O" & ChrW(770), "O" & ChrW(795), "U" & ChrW(795))
aArr2 = Array(ChrW(259), ChrW(226), ChrW(234), ChrW(244), ChrW(417), ChrW(432), ChrW(258), ChrW(194), ChrW(202), ChrW(212), ChrW(416), ChrW(431))
For i = LBound(aArr1, 1) To UBound(aArr1, 1)
sText = Replace(sText, aArr1(i), aArr2(i))
Next
UnicodeToHop = sText
End Function
Vâng. Em cảm ơn bác đã mất thời gian ạ. Em lại phải ngâm tiếp thôi.Xin lỗi bạn vì tôi không thể giúp bạn.
Sau khi xem kỹ thì tôi thấy dữ liệu của bạn không như tôi nghĩ.
Vd. chữ ễ trong C8 có độ lớn bằng 3.
Khi tôi gõ ễ bằng bàn phím của Windows thì được ký tự unicode tổ hợp với LEN = 2. Khi tôi dùng Unikey với bảng mã Unicode thì khi gõ eex tôi nhận được ễ với LEN = 1. Khi tôi dùng Unikey với bảng mã Unicode tổ hợp thì khi gõ eex tôi nhận được ễ với LEN = 2, giống khi gõ bằng bàn phím của Windows.
Còn ễ trong C8 được dán từ đâu đó từ web vào, ễ này có LEN = 3, gồm 3 ký tự: ký tự e, ký tự có tên là COMBINING CIRCUMFLEX ACCENT (hình 1), ký tự có tên là COMBINING TILDE (hình 2)
Code tôi viết gần 10 năm chỉ phục vụ unicode tổ hợp có từ bàn phím Windows hoặc Unikey thôi. Tôi không có hứng ngồi cầy lần nữa.
View attachment 272596
View attachment 272598
Em cảm ơn bác. Nhưng bài toán của em nó như thế này. Một bên là danh sách của nhà trường có tên hs với SBD (cái này được gõ bằng unicode dựng sẵn) và một bên là dữ liệu em tải về từ CSDL của ngành giáo dục có mã định danh của HS. Bây giờ em cần ghép SBD vào với mã định danh của HS để đẩy dữ liệu lên CSDL của ngành giáo dục. Vì có HS trùng tên nhau nên em ghép thêm tên với ngày sinh.Có bí mật là khi so sánh trực tiếp các ký tự Unicode (các thể loại dạng của bảng mã Unicode) thì Excel không phân biệt là dạng nào (giống như mắt nhìn vậy).
View attachment 272616
Thế mới hay. Nên khi đối chiếu thì cứ làm như bình thường thôi.
Đa tạ bác! Chuẩn cơm mẹ nấu rồi!Như bài #9 đã phân tích, dữ liệu của bạn cũng là Unicode tổ hợp nhưng được sử dụng cách kết hợp ký tự khác với cách phổ biến thường thấy (tạm gọi là Unicode tổ hợp chuẩn). Cụ thể là Unicode tổ hợp chuẩn chỉ sử dụng một ký tự cho một chữ cái (không bao gồm dấu thanh) trong khi dữ liệu của bạn sử dụng 2 ký tự cho các chữ cái ngoài bảng chữ cái Latinh (ă, â, ơ...) - một ký tự trong bản chữ cái Latinh và một ký tự dấu chữ cái.
Vậy thì chỉ cần sửa các chữ cái ngoài bảng chữ cái Latinh từ 2 ký tự thành 1 ký tự sẽ được văn bản ở dạng Unicode tổ hợp chuẩn. Sau đó bạn có thể dùng Unikey hoặc VBA để chuyển mã theo ý bạn.
Bạn có thể dùng UDF sau để chuyển về Unicode tổ hợp chuẩn.
Mã:Function UnicodeToHop(ByVal sText As String) As String Dim aArr1 As Variant, aArr2 As Variant, i As Long aArr1 = Array("a" & ChrW(774), "a" & ChrW(770), "e" & ChrW(770), "o" & ChrW(770), "o" & ChrW(795), "u" & ChrW(795), "A" & ChrW(774), "A" & ChrW(770), "E" & ChrW(770), "O" & ChrW(770), "O" & ChrW(795), "U" & ChrW(795)) aArr2 = Array(ChrW(259), ChrW(226), ChrW(234), ChrW(244), ChrW(417), ChrW(432), ChrW(258), ChrW(194), ChrW(202), ChrW(212), ChrW(416), ChrW(431)) For i = LBound(aArr1, 1) To UBound(aArr1, 1) sText = Replace(sText, aArr1(i), aArr2(i)) Next UnicodeToHop = sText End Function
Tôi không có hứng viết code cho bạn từ A đến Z, nhưng bạn có thể tự làm theo 2 bước. Trước hết bạn dùng code của huuthang_bd ở bài #11 để chuyển về Unicode tổ hợp chuẩn. Tiếp theo bạn dùng Unikey để chuyển về dạng mình thích. Nếu bạn ngại làm bằng tay bước 2 thì có thể dùng vd. code của tôi ở link sauVâng. Em cảm ơn bác đã mất thời gian ạ. Em lại phải ngâm tiếp thôi.
Họ tên bạn nhập vào D1 và công thức trả về ngày sinh. Nếu thế thì phải chuyển dữ liệu cột D về CHUẨN. Trong D1 bạn gõ họ tên bằng Unikey. Nếu không chuyển về chuẩn thì tìm kiếm bằng niềm tin à? Không chuyển thì muôn đời bạn có kết quả #N/A.=VLOOKUP(D1;C8: D50;2;0)
trả về TRUE không có nghĩa là Vlookup cũng tìm thấy.=D1=C8
hoặc
=COUNTIF(C8;D1)=1
Unicode là cái nhân. Dựng sẵn hay Tổ hợp là lớp cao bọc bên ngoài....
Muốn dùng Vlookup thì bắt buộc phải chuyển về cùng dạng với dữ liệu gõ bằng Unikey. Nếu dùng bảng mã Unicode thì dữ liệu cột D phải chuyển về unicode dựng sẵn. Còn nếu dùng bảng mã Unicode tổ hợp khi gõ thì thì phải chuyển cột D về unicode tổ hợp. Không có điều này mà dùng Vlookup thì muôn đời có #N/A.
???Unicode là cái nhân.
Vậy thì dùng tiếng Nam: cái nhưn.???
Cao nhân còn hiểu chứ cái nhân thì chịu. Là người giống cái? Tức đàn bà?
Tiếng kiểu này với tôi là ngoại ngữ rồi. Tôi chưa học tiếng đó.Vậy thì dùng tiếng Nam: cái nhưn.
Em cảm ơn bác. Nhưng bài toán của em nó như thế này. Một bên là danh sách của nhà trường có tên hs với SBD (cái này được gõ bằng unicode dựng sẵn) và một bên là dữ liệu em tải về từ CSDL của ngành giáo dục có mã định danh của HS. Bây giờ em cần ghép SBD vào với mã định danh của HS để đẩy dữ liệu lên CSDL của ngành giáo dục. Vì có HS trùng tên nhau nên em ghép thêm tên với ngày sinh.