Loại khoảng trắng & bỏ dấu tiếng việt

Liên hệ QC

Thien

Thành viên thường trực
Tham gia
23/6/06
Bài viết
352
Được thích
112
Nhờ các bác viết code ứng dụng trong việc Loại khoảng trắng & bỏ dấu tiếng việt. Hiện tại ứng dụng hàm LoaiDauUni & AllTrim thấy phải mở thêm cột khó khăn quá.

ví dụ: khi chọn chữ Tàu Hủ và chạy macro sẽ thành TauHu.

Ứng dụng hàm trên chỉnh sửa tá lả để thành marco chẳng được như ý. Tiện cho mình hướng dẫn sự khác nhau giữa hàm & macro & cách chuyển đổi chúng.

TC.
 
Tôi xin giới thiệu nguyên tắc để bạn viết thủ tục trên theo ý của bạn.

_Đầu tiên bạn phải có 2 mảng: mảng A chứa các ký tự có cả dấu, mảng B chứa các ký tự không có dấu. Ví dụ
Mã:
Dim arrA As Variant, arrB As Variant
arrA = Array("a", "¨", "Ê", " ")
arrB = Array("a", "a", "a", "")
Sau đó bạn chỉ việc viết vòng lập quét qua chuổi bạn cần chuyển đổi, so sánh nếu là ký tự ở mảng a (arrA) thì sẽ được thay thế bằng chuổi ở mảng B (arrB)

Vậy là bạn viết được một thủ tục theo ý của bạn.

Chúc bạn thành công.

Lê Văn Duyệt
 
Upvote 0
Thien đã viết:
Nhờ các bác viết code ứng dụng trong việc Loại khoảng trắng & bỏ dấu tiếng việt. Hiện tại ứng dụng hàm LoaiDauUni & AllTrim thấy phải mở thêm cột khó khăn quá.
ví dụ: khi chọn chữ Tàu Hủ và chạy macro sẽ thành TauHu.
Ứng dụng hàm trên chỉnh sửa tá lả để thành marco chẳng được như ý. Tiện cho mình hướng dẫn sự khác nhau giữa hàm & macro & cách chuyển đổi chúng.
TC.
Bạn viết thủ tục này:
Mã:
Sub LoaiDau()
For Each mycell In Selection
  mycell.Value = AllTrim(LoaiDauUni(mycell.Value))
Next
End Sub

Chọn các cell cần chuyển đổi, chay Sub LoaiDau.

Theo mẫu Sub này, bạn có thể viết các Sub khác để chuyển trực tiếp không cần mở cột phụ.
 
Lần chỉnh sửa cuối:
Upvote 0
Dear phamduylong.
Cảm ơn bác đã chỉ dẫn. Nhưng bạn chưa test code của bạn thì phải. Mình chép code bạn đặt vào Module rùi chạy thì bị báo lỗi chổ này nè "LoaiDauUni".
(Mình vẫn addin tiện ích của bạn mà).

Bạn xem lại giúp nhen.

TC.

Trời ơi tới giờ mà chưa ai giúp giải đáp hả ta. Buồn quá đi mất. đi ngủ nha.

TC.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Thien đã viết:
Trời ơi tới giờ mà chưa ai giúp giải đáp hả ta. Buồn quá đi mất. đi ngủ nha.
TC.
Bạn phải viết sub LoaiDau và phải mở HoTroTiengViet VBA.xla mới có thủ tục và hàm để làm việc. Tôi đã ghi vào HoTroTiengViet VBA.xla.
Muốn sử dụng, bạn phải mở HoTroTiengViet VBA.xla, mỡ tập tin cần làm việc, chọn vùng, menu Tools > Macro > nhập vào Macro Name =Loaidau > Run.
 

File đính kèm

  • HoTroTiengViet VBA.zip
    25.5 KB · Đọc: 3,366
Upvote 0
Dear All
chẳng lẽ không có ai khác giải đáp giùm sao trời.

To phamduylong.
Cảm ơn bạn đã quan tâm. Nhưng như bài 4 mình đã nói có sử dụng add-in của bạn mà vẫn báo lỗi đó chứ.

Muốn sử dụng, bạn phải mở HoTroTiengViet VBA.xla, mỡ tập tin cần làm việc, chọn vùng, menu Tools > Macro > nhập vào Macro Name =Loaidau > Run.
Nhấn ALT+F8 là thấy macro Loaidau đó nhấn run là được mà, chỉ chi mà dài dòng thế.

Xem lại dùm nha.

TC.
 
Upvote 0
ttphong2007 đã viết:
Chào Thien,
Bạn kiểm tra cẩn thận lại xem sau, mình đã Add-Ins của anh Long thấy chạy rất tốt.
TP.

Anh ơi em biết hàm thì chạy rất tốt nhưng dùng code này thì đang bị báo lỗi
Mã:
Sub LoaiDau()
For Each mycell In Selection
  mycell.Value = AllTrim(LoaiDauUni(mycell.Value))
Next
End Sub

Có nhã ý thì giúp dùm.

TC.
 
Upvote 0
Nó báo làm sao đại ca, chắc là không có function LoaiDauUni thì sao mà chạy.
Mà dùng UDF không hay hơn Sub sao.
Chép function LoaiDauUni vào file.
 
Upvote 0
Chào bạn Thiện

Bạn add-ins file đính kèm | sau đó mở file cần loại bỏ dấu | chọn vùng cần loại bỏ dấu | nhấp phải chuột | chọn Loai bo dau. OK

Không phục hồi có dấu lại được, mình khuyên bạn nên dùng hàm!

Loaibodau.jpg


Thanh Phong
 

File đính kèm

  • HoTroTiengViet VBA.rar
    21.1 KB · Đọc: 2,740
Upvote 0
Dear Anh Phong.
Rất cảm ơn Anh đã giải đáp. Đúng như ý mình, mà mình thì đang rất cần.

Dear Thunghi
nó báo lỗi ngay LoaiDauUni trong đoạn code mycell.Value = AllTrim(LoaiDauUni(mycell.Value))

Thân chào.
 
Upvote 0
bạn chỉnh lại thử xem loại bỏ dấu nhưng không loại bỏ khoảng trắng có được không!
 
Upvote 0
Cho tôi được cảm ơn thầy Phạm Duy Long đã giúp tôi hàm:

=LoaiDauUni(Left(A1),1) ' Để lấy 1 ký tự đầu tiên phía bên trái và lọai bỏ dấu (bảng mã unicode).

Cảm ơn cả anh Thu Nghi nữa !
 
Upvote 0
ongtrungducmx25 đã viết:
bạn chỉnh lại thử xem loại bỏ dấu nhưng không loại bỏ khoảng trắng có được không!

Vâng, cái này loại dấu không loại khoảng trắng! Cái này dùng font Unicode.

TP.
 

File đính kèm

  • HoTroTiengViet VBA.rar
    24.9 KB · Đọc: 1,175
Upvote 0
Các bác ơi khi sử dụng nó rồi nhưng các chữ nó lại liền nhau ko cách như chữ ban đầu? Các bác có cách nào khi bỏ dấu mà nó vẫn giữ như vị trí ban đầu ko?
 
Upvote 0
mình thấy có phần miền tự điền dấu khi mình gõ vào chữ không dấu thì nó chuyển sang có dấu thì không biết code đó viết như thế nào zậy ai có thể cho biết cái này không!
 
Upvote 0
Vâng, cái này loại dấu không loại khoảng trắng! Cái này dùng font Unicode.
Trong HoTroTiengViet VBA.xla có hàm AllTrim loại bỏ các khoảng trắng.
Bạn kết hợp AllTrim(LoaiDauUni(A1)) để loại bỏ dấu và loại bỏ khoảng trắng.
 
Upvote 0
Có cái nào loại bỏ dấu của bảng mã TCVN ko, cho mình xin với
 
Upvote 0
Các bác ơi, em có cái này, chỉ để loại bỏ khoảng trắng (khi lỡ nhấn Space hai lần trở lên)

Các bác xem và góp ý dùm em xem có thể làm cho nó ngắn hơn không:
PHP:
Public Function BoKhoangTrang(ABC)
    XYZ = Trim(ABC)
    ViTri = InStr(1, XYZ, Space(2))
    Do While ViTri > 0
        XYZ = Left(XYZ, ViTri) & Trim(Mid(XYZ, ViTri))
        ViTri = InStr(1, XYZ, Space(2))
    Loop
    BoKhoangTrang = XYZ
End Function
 
Upvote 0
BNTT đã viết:
Các bác ơi, em có cái này, chỉ để loại bỏ khoảng trắng (khi lỡ nhấn Space hai lần trở lên)

Các bác xem và góp ý dùm em xem có thể làm cho nó ngắn hơn không:
PHP:
Public Function BoKhoangTrang(ABC)
    XYZ = Trim(ABC)
    ViTri = InStr(1, XYZ, Space(2))
    Do While ViTri > 0
        XYZ = Left(XYZ, ViTri) & Trim(Mid(XYZ, ViTri))
        ViTri = InStr(1, XYZ, Space(2))
    Loop
    BoKhoangTrang = XYZ
End Function

Ủa Excel có sẵn hàm Trim loại bỏ nhiều hơn 1 khoảng trắng trong chuỗi và chừa lại 1 khoảng trắng thôi. Em thử thấy vẫn Ok với tất cả bảng mã, do vậy mình đâu cần tạo UDF. Không biết anh BNTT dùng hàm tạo trên vào việc gì đặc biệt vậy mà hàm Trim không đáp ứng được?.

FB
 
Upvote 0
Hàm Trim chỉ có thể dùng trong cell của Excel thôi.
Mình làm cái này để gài vào mấy ô nhập liệu trong cái Form.
Gán vào cái sự kiện AfterUpdate()ấy.
 
Upvote 0
Web KT
Back
Top Bottom