Cần giúp chuyển Unicode tổ hợp sang Unicode dựng sẵn trong Excel (1 người xem)

Liên hệ QC

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

leonguyenz

Thành viên gạo cội
Thành viên BQT
Moderator
Tham gia
2/8/10
Bài viết
5,225
Được thích
9,021
Giới tính
Nam
Em tìm trên GPE và một số trang khác nhưng chưa thấy. Mong các thầy giúp vấn đề này:
Trên sheet có 2 loại bảng mã Unicode dựng sẵnUnicode tổ hợp (mỗi cell một bảng mã riêng, do file tổng hợp từ nhiều người nhập liệu). Vì đây là số liệu cũ nên em muốn chuyển sang Unicode dựng sẵn, để dễ tra tìm.
Chân thành cảm ơn !
 
Em tìm trên GPE và một số trang khác nhưng chưa thấy. Mong các thầy giúp vấn đề này:
Trên sheet có 2 loại bảng mã Unicode dựng sẵnUnicode tổ hợp (mỗi cell một bảng mã riêng, do file tổng hợp từ nhiều người nhập liệu). Vì đây là số liệu cũ nên em muốn chuyển sang Unicode dựng sẵn, để dễ tra tìm.
Chân thành cảm ơn !

Hỏi lại: Dữ liệu trong file là dữ liệu thô thôi hay có chứa công thức? Vì nếu chỉ là dữ liệu thô còn dễ, có công thức sẽ "tê" hơn nhiều!
Giải thuật tạm thời của tôi là thế này:
- Tạo bảng tra cứu 2 chiều với cột 1 chứa các ký tự Unicode tổ hợp, cột 2 chứa các ký tự Unicode dựng sẵn
- Dùng vòng lập duyệt từ đầu đến cuối bảng và dùng Find and Replace để tìm và thay thế tương ứng
===> Giải thuật này chắc bạn tự triển khai được chứ nhỉ?
 
Hỏi lại: Dữ liệu trong file là dữ liệu thô thôi hay có chứa công thức? Vì nếu chỉ là dữ liệu thô còn dễ, có công thức sẽ "tê" hơn nhiều!
Giải thuật tạm thời của tôi là thế này:
- Tạo bảng tra cứu 2 chiều với cột 1 chứa các ký tự Unicode tổ hợp, cột 2 chứa các ký tự Unicode dựng sẵn
- Dùng vòng lập duyệt từ đầu đến cuối bảng và dùng Find and Replace để tìm và thay thế tương ứng
===> Giải thuật này chắc bạn tự triển khai được chứ nhỉ?

Hihi, bữa trước gặp thầy có báo cáo trước cho thầy rồi, em có biết tí code nào đâu +-+-+-+
Bảng tra cứu là bảng thô, nhưng mà nhiều dòng nhiều cột. Trong đó các cell đều là Unicode, em biết chắc chắn nhiều cell được gõ theo bảng mã Unicode tổ hợp. Em muốn chuyển tất cả hỗn hợp đó về Unicode dựng sẵn thầy ạ !
 
Hihi, bữa trước gặp thầy có báo cáo trước cho thầy rồi, em có biết tí code nào đâu +-+-+-+
Bảng tra cứu là bảng thô, nhưng mà nhiều dòng nhiều cột. Trong đó các cell đều là Unicode, em biết chắc chắn nhiều cell được gõ theo bảng mã Unicode tổ hợp. Em muốn chuyển tất cả hỗn hợp đó về Unicode dựng sẵn thầy ạ !

Đổi "đuôi" thành BAS
Dùng
Mã:
= SourceToDest(text, src_uni, dst_uni)
 

File đính kèm

File đính kèm

Công thức trên chỉ dùng trong VBA thôi bạn.Phải dùng là:
PHP:
= SourceToDest(text, 1, 1)
Mới được bạn test lại xem!
 
Lần chỉnh sửa cuối:
Em đã test thử nhưng không đổi được đuôi .BAS, khi áp code vào và sử dụng công thức thì không chạy được.
Xin cảm ơn nhiều !

Bạn chuột phải trên tập tin TXT --> Rename --> thay đuôi txt bằng bas.
Do GPE không cho gửi bas nên tôi phải chuyển sang txt
Bạn không thể lập công thức cho vd. A1 khi mà bạn truyền vào hàm cũng chính là A1
Bạn thử lập công thức cho A1 là =SUM(A1;B1)???
Nếu dùng trên sheet thì công thức cho cell Ax là = SourceToDest(Ay, 1, 1)
Với x <> y
 
Lần chỉnh sửa cuối:
Bạn chuột phải trên tập tin TXT --> Rename --> thay đuôi txt bằng bas.
Do GPE không cho gửi bas nên tôi phải chuyển sang txt
Bạn không thể lập công thức cho vd. A1 khi mà bạn truyền vào hàm cũng chính là A1
Bạn thử lập công thức cho A1 là =SUM(A1;B1)???
Nếu dùng trên sheet thì công thức cho cell Ax là = SourceToDest(Ay, 1, 1)
Với x <> y

Thú thật là em chưa nghiên cứu code nên chưa biết cách áp dụng. Sau khi rename file .bas, em không biết bước tiếp theo phải làm gì luôn.
Mong mọi người giúp, test và up file lên từ file em gửi bài #5 dùm.
 
Thú thật là em chưa nghiên cứu code nên chưa biết cách áp dụng. Sau khi rename file .bas, em không biết bước tiếp theo phải làm gì luôn.
Mong mọi người giúp, test và up file lên từ file em gửi bài #5 dùm.
- Đổi đuôi file txt thành bas
- Khởi động Excel, bấm Alt + F11 để vào cửa sổ VBA
- Trong cửa sổ lập trình, vào menu File\Import File ---> Duyệt đến file .bas rồi bấm Open
- Xem lại sẽ thấy 1 module vừa được chèn vào
- Bấm Alt + Q để trở về bảng tính
- Giờ, trên bảng tính, bạn có thể gõ hàm để convert, chẳng hạn =SourceToDest(A1,1,1) nghĩa là convert chuổi tại cell A1 có nguồn là unicode (tổ hợp hay dựng sẵn) sang unicode dựng sẵn
 
Bạn cũng có thể không cần đổi đuôi cũng được, Alt+F11 sao đó chèn Module vào Alt+I+M, tiếp theo chèn text file vào Alt + I + L sao đó tìm đến txt file rồi ok
 
Bạn cũng có thể không cần đổi đuôi cũng được, Alt+F11 sao đó chèn Module vào Alt+I+M, tiếp theo chèn text file vào Alt + I + L sao đó tìm đến txt file rồi ok

Làm vậy cũng được nhưng có 2 vấn đề xảy ra:
- Thứ nhất: bạn phải xóa dòng đầu tiên (Attribute VB_Name = "vietnamese_unicode_convert") trong file txt thì code mới chạy được
- Thứ hai: Chèn code như vậy sẽ mất tên Module
 
Làm vậy cũng được nhưng có 2 vấn đề xảy ra:
- Thứ nhất: bạn phải xóa dòng đầu tiên (Attribute VB_Name = "vietnamese_unicode_convert") trong file txt thì code mới chạy được
- Thứ hai: Chèn code như vậy sẽ mất tên Module
Em test rồi không thấy hiện tuợng như anh nói code vẫn chạy bình thường chỉ thiếu khai báo biến kytu2 thôi
 
Em test rồi không thấy hiện tuợng như anh nói code vẫn chạy bình thường chỉ thiếu khai báo biến kytu2 thôi
Tôi đâu có nói là không chạy được code, có điều bạn phải xóa dòng Attribute VB_Name = "vietnamese_unicode_convert"
Ngoài ra sẽ không có tên Module ---> Dùng Inprot file sẽ vừa chèn code vừa đặt tên cho module luôn trong khi nếu copy/paste thì bạn phải làm bằng tay mọi thứ
Thế thôi
 
Lần chỉnh sửa cuối:
Thú thật là em chưa nghiên cứu code nên chưa biết cách áp dụng. Sau khi rename file .bas, em không biết bước tiếp theo phải làm gì luôn.Mong mọi người giúp, test và up file lên từ file em gửi bài #5 dùm.
A chuyển code của Siwton vào file cho e rồi.Có bổ sung thêm 1 chút cho UDF, chả biết có đúng ý tác giả.SourceToDest = Trim(s)
 

File đính kèm

Lần chỉnh sửa cuối:
A chuyển code của Siwton vào file cho e rồi.Có bổ sung thêm 1 chút cho UDF, chả biết có đúng ý tác giả.SourceToDest = Trim(s)

Không đúng ý tác giả.
Tác giả chủ ý làm thế. Ta hãy tưởng tượng là những chuỗi cần convert kia chỉ là những chuỗi trung gian, tạm thời, và chúng có dấu cách ở đầu (cuối). Các chuỗi được lấy từ đâu đó, lọc từ đâu đó và sau khi convert chúng sẽ được nối với các chuỗi khác để tạo thành kết quả. Nếu bạn xóa các dấu cách trước sau thì trong chuỗi kết quả một số từ sẽ bị dính vào nhau.
Dù trường hợp nào chăng nữa thì hàm convert chỉ làm nhiệm vụ convert, nó không can thiệp, không sửa dữ liệu của người dùng, vì quá mạo hiểm. Nếu người dùng cần xóa các dấu cách ở 2 đầu thì luôn luôn có thể dùng Trim(SourceToDest(...)). Tức việc xóa do người dùng quyết định.

Hay là bạn nhìn ở đầu tôi có text = text & " " nên bạn nghĩ tôi quên xóa dấu cách tự thêm vào? Nếu thế thì bạn nên nhìn "While n < k" - k = Len(text) thì bạn thấy dấu " " tôi thêm vào không bao giờ được đọc riêng với mục đích convert nó. Nó chỉ được đọc kèm với ký tự trước cuối khi cần kiểm tra ký tự trước cuối (tức ký tự cuối trong chuỗi của người dùng) có là ký tự 2 bai không mà thôi. Tất nhiên nếu chuỗi người dùng có ký tự " " ở cuối thì nó được "convert" vì nó là ký tự trước cuối trong chuỗi text truyền vào WHILE.

Tóm lại chuỗi của người dùng thế nào (có hoặc không có dấu " ") thì hàm trả về y nguyên như thế (có hoặc không có dấu " "). Không thêm và cũng không bớt dấu " " cho chuỗi người dùng. Bạn thử thì sẽ thấy.

Kinh nghiệm: muốn sửa code nào đó thì nên tìm hiểu kỹ nó hoạt động như thế nào
 
- Đổi đuôi file txt thành bas
- Khởi động Excel, bấm Alt + F11 để vào cửa sổ VBA
- Trong cửa sổ lập trình, vào menu File\Import File ---> Duyệt đến file .bas rồi bấm Open
- Xem lại sẽ thấy 1 module vừa được chèn vào
- Bấm Alt + Q để trở về bảng tính
- Giờ, trên bảng tính, bạn có thể gõ hàm để convert, chẳng hạn =SourceToDest(A1,1,1) nghĩa là convert chuổi tại cell A1 có nguồn là unicode (tổ hợp hay dựng sẵn) sang unicode dựng sẵn

Vậy nếu em muốn chuyển unidoce tổ hợp sang unicode dựng sẵn thì dùng như thế nào? Có thể áp dụng để chuyển đổi database trong VB ko?
 
Vậy nếu em muốn chuyển unidoce tổ hợp sang unicode dựng sẵn thì dùng như thế nào? Có thể áp dụng để chuyển đổi database trong VB ko?

Giờ, trên bảng tính, bạn có thể gõ hàm để convert, chẳng hạn =SourceToDest(A1,1,1) nghĩa là convert chuổi tại cell A1 có nguồn là unicode (tổ hợp hay dựng sẵn) sang unicode dựng sẵn

Cái dòng đỏ đỏ bạn trích này chả đã hướng dẫn rồi còn gì.

Bạn có strUni là text unicode - không quan trọng là tổ hợp hay dựng sẵn và bạn muốn convert sang unicode dựng sẵn strUniDungsan thì:
strUniDungsan = SourceToDest(strUni, 1, 1)
 
quá tuyệt vời, cám ơn rất rất nhiều!
 
Tôi đã thử và thấy: nếu trong sheets chỉ có 2 loại unicode tổ hợp và unicode và muốn chuyển hết về unicode thì chỉ cần sử dụng chức năng chuyển mã của bộ gõ Unicode.

Cụ thể:
1. Gõ Ctrl - Shift - F6 để hiện menu, chọn nguồn và đích đều là Unicode. Chọn chuyển mã Clipboard.
2. Chọn khối ô, gõ Ctrl - C, Ctrl - Shift - F9, Ctrl - V là được

Trước tôi cứ thấy lạ sao đổi Unicode sang Unicode. Khi so sánh chuỗi trong VBA thì gặp False với 2 ô giống nhau (viết công thức trên excel thì True, ví dụ =a1 = b1 cho True)

Nhờ dùng "chuyển mã" nêu trên mà chúng thực sự giống nhau.

Và có 1 nhận xét thế này: Bảng mã Unicode có 2 bảng mã con.
 
Và có 1 nhận xét thế này: Bảng mã Unicode có 2 bảng mã con.

Chả nhẽ tôi học thêm được điều mới?

Theo tôi bạn phát biểu không chính xác.

Khái niệm tổ hợp và dựng sẵn chỉ có khi ta nói tới cách biểu diễn một chuỗi ký tự. Chuỗi ở đây được hiểu là 1 ký tự hoặc nhiều ký tự.

Trong bảng mã unicode mỗi "phần tử" là 1 ký tự duy nhất (ký tự chứ không phải chuỗi) và có điểm mã là một con số 2 bai. Vậy bạn có thể chỉ ra cho tôi 1 ký tự trong bảng mã Unicode được công bố mà theo bạn thì đó là unicode tổ hợp được không?

Khi tôi cần biểu diễn 1 ký tự mà có hình hài - glyph - "như thế này" thì nhiều khi tôi có 2 cách biểu diễn. "Nhiều khi" vì có khi chỉ có 1 cách biểu diễn duy nhất - vd. ký tự "a" trong bảng mã unicode. Vd. ký tự mà ta nhìn thấy là "ồ". Tôi có thể biểu diễn "nó" bằng 1 ký tự unicode duy nhất mà trong bảng mã unicode có điểm mã là &H1ED3 (2 bai): ChrW(&H1ED3) = ChrW(7891). Nhưng ai đó có thể biểu diễn ký tự mà mắt nhìn thấy là "ồ" bằng 2 ký tự mà trong bảng mã unicode có điểm mã là ChrW(&HF4) và ChrW(300) (2 + 2 = 4 bai): ChrW(&HF4) & ChrW(300) = ChrW(244) & ChrW(768). Trong trường hợp này ta "lắp ráp" (tổ hợp) 2 ký tự là "ô" (điểm mã 244) và "dấu huyền" (điểm mã 768) để có ký tự mà mắt nhìn thấy là "ồ".

Tóm lại nếu có một ký tự nào đó trong bảng mã unicode (2 bai) mà ta có thể biểu diễn bằng cách dùng 2, 3 ký tự khác cũng của bảng mã unicode thì có thể nói là cách thứ 2 biểu diễn ký tự (có cùng glyph như cách thứ nhất) bằng cách dùng unicode tổ hợp (luôn dùng > 2 bai). Riêng về bảng mã unicode thì chỉ có 1, mỗi ký tự là unicode - chả dựng sẵn mà cũng chả tổ hợp - 2 bai. Cùng lắm theo tôi thì nói mỗi ký tự trong bảng mã unicode là unicode dựng sẵn. Theo tôi không có cái gọi là "Bảng mã Unicode có 2 bảng mã con"
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom