Trợ giúp về chuỗi text trong Excel

Liên hệ QC

Đào Thuận Duy

Thành viên mới
Tham gia
28/2/22
Bài viết
6
Được thích
0
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 ạ?
 

File đính kèm

  • kt.png
    kt.png
    3.9 KB · Đọc: 29
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.
 
Upvote 0
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 ạ?
Chuyển về cùng 1 loại đi.Dùng công cụ của Unikey.
 
Upvote 0
Chuyển về cùng 1 loại đi.Dùng công cụ của Unikey.
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 ạ!
Bài đã được tự động gộp:

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.
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.
 
Upvote 0
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.
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".
 
Upvote 0
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 cảm ơn các bác đã lưu tâm ạ! Em đính nó đây ạ!
Bài đã được tự động gộp:

"bác nào cứu em"

Đưa mỗi cái ảnh thì khó cứu lắm.
Dạ em gửi bác ngâm cứu giúp em ạ!
 

File đính kèm

  • DS lop.xlsx
    11.7 KB · Đọc: 11
Upvote 0
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.

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.

dau mu.jpg

dau nga.jpg
 
Upvote 0
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 ạ!
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
 
Upvote 0
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).

1646191795788.png

Thế mới hay. Nên khi đối chiếu thì cứ làm như bình thường thôi.
 

File đính kèm

  • bi mat_2.xlsx
    15 KB · Đọc: 7
Upvote 0
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
Vâng. Em cảm ơn bác đã mất thời gian ạ. Em lại phải ngâm tiếp thôi.
 
Upvote 0
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.
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.
Bài đã được tự động gộp:

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
Đa tạ bác! Chuẩn cơm mẹ nấu rồi!
 

File đính kèm

  • Book1.xlsx
    23.4 KB · Đọc: 5
Lần chỉnh sửa cuối:
Upvote 0
Vâng. Em cảm ơn bác đã mất thời gian ạ. Em lại phải ngâm tiếp thôi.
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 sau


Ta cần nói rõ với nhau. Nếu dữ liệu của bạn chỉ dùng để nhìn ngắm, để in thì để như cũ vẫn được, chả sao cả. Nhưng nếu một ngày đẹp trời bạn muốn tìm kiếm thì phải đưa dữ liệu về dạng chuẩn, đồng nhất. Nguyên tắc chủ đạo là dữ liệu nguồn, cơ sở dữ liệu phải chuẩn và đồng nhất. Tôi cho ví dụ với tập tin của bạn ở bài #7. Nếu bạn muốn tìm ngày sinh của một học sinh và bạn có công thức ở E1
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.
Công thức
=D1=C8

hoặc

=COUNTIF(C8;D1)=1
trả về TRUE không có nghĩa là Vlookup cũng tìm thấy.

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.
 
Upvote 0
...
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. Dựng sẵn hay Tổ hợp là lớp cao bọc bên ngoài.
VLookup không biết cao nhân là gì cho nên không biết phân biệt. :p
 
Upvote 0
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.

Làm sao mà mình cứ són són như thế? Sau 13 bài mình mới nêu được cái đề bài (mà còn nêu không rõ ràng được).

Bí kíp kỹ thuật gia truyền đã nêu ở bài #10, #12 rồi mà mình không ngâm cứu được gì hả hay là đi ngâm cứu chuyện gì. Dựa theo 2 bài đó thì chỉ cần động đậy não thêm tí tẹo tèo teo là xong việc.

Vấn đề bé tí tẹo thôi mà. Tập trung xử lý vấn đề ấy. Xem file.
 

File đính kèm

  • bí mía_.xlsx
    33.7 KB · Đọc: 19
Upvote 0
Web KT

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

Back
Top Bottom