Tìm chữ bị lỗi và thay thế (4 người xem)

Liên hệ QC

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

Hoacomay96

Thành viên chính thức
Tham gia
18/3/08
Bài viết
96
Được thích
8
Các huynh cho em hỏi. em có bảng dữ liệu là họ tên.Nhưng người lập bảng gõ chữ thị bị lỗi là "ThỊ" và không viết hoa ở đầu dòng. vậy để viết code để sửa các lỗi trên như thế nào ? dùng đoạn mã nào để tìm các chữ không phân biệt chữ Hoa hay chữ thường ?
 
Bạn dùng thử Function này xem:
PHP:
Function Convert(Clls As Range) As String
  Dim Chw, Temp, Temp1 As String
  Dim i As Integer
  Chw = " " & Trim(Clls.Value)
  For i = 1 To Len(Chw)
     If Mid(Chw, i, 1) = " " Then
        Temp1 = UCase(Mid(Chw, i + 1, 1))
     Else:
        Temp1 = LCase(Mid(Chw, i + 1, 1))
     End If
     Temp = Temp & Temp1
  Next
  Convert = Temp
End Function
ANH TUẤN
 

File đính kèm

Upvote 0
Nếu ko thích Function thì có thể dùng SUB để chạy!
PHP:
Sub Convert()
  Dim Chw, Temp, Temp1 As String
  Dim i As Integer
  Dim Clls, Rng As Range
  On Error Resume Next
  Set Rng = Application.InputBox("Chon vung", "Convert", Type:=8)
  For Each Clls In Rng
    Chw = " " & Trim(Clls.Value)
    For i = 1 To Len(Chw)
      If Mid(Chw, i, 1) = " " Then
        Temp1 = UCase(Mid(Chw, i + 1, 1))
      Else:
        Temp1 = LCase(Mid(Chw, i + 1, 1))
      End If
      Temp = Temp & Temp1
    Next i
    Clls.Value = Temp
    Temp = ""
  Next
End Sub
Xem file
ANH TUẤN
 

File đính kèm

Upvote 0
Nếu ko thích Function thì có thể dùng SUB để chạy!
PHP:
Sub Convert()
  Dim Chw, Temp, Temp1 As String:         Dim i As Integer
  Dim Clls, Rng As Range:                       On Error Resume Next
  Set Rng = Application.InputBox("Chon vung", "Convert", Type:=8)
  For Each Clls In Rng
    Chw = " " & Trim(Clls.Value)
    For i = 1 To Len(Chw)
      If Mid(Chw, i, 1) = " " Then   _
        Temp1 = UCase(Mid(Chw, i + 1, 1))       Else _
        Temp1 = LCase(Mid(Chw, i + 1, 1))
      
        Temp = Temp & Temp1
    Next i
    Clls.Value = Temp:                            Temp = ""
  Next
End Sub
To anhTuan: Chúng ta có thể tăng tốc cho việc làm này đó;
Thay vì xử từng ký tự, ta xử từng từ 1 (Nhờ hàm InStr()) ; chắc sẽ nhanh hơn tẹo(?)
 
Upvote 0
AnhTuan kiểm thử, nha!

PHP:
Option Explicit

 Sub U1LCase()
  Dim Rng As Range, Clls As Range:          Dim DoDai As Byte
  Dim StrC As String, SKQua As String
  
  Set Rng = Selection
  For Each Clls In Rng
    StrC = Trim(Clls) & " "
    Do
        DoDai = InStr(StrC, " "):           If DoDai < 2 Then Exit Do
        SKQua = SKQua & UCase$(Left(StrC, 1)) & LCase$(Mid(StrC, 2, DoDai - 1))
        StrC = Mid(StrC, DoDai + 1)
    Loop
    Clls = SKQua:                              SKQua=""
  Next Clls
 End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh Sa_DQ và Anhtuan đã cho em những đoạn code trên.Nhưng em chạy các code trên đều bị lỗi Font, riêng chữ "Thị " thì đúng. dữ liệu của em dùng font Vnarial. các anh chỉ giúp em cách lập macro để tìm và thay thế chỉ 1 chữ "ThỊ" bị lỗi như thế này bằng chữ "Thị" trong mảng dữ liệu.Vì em dùng hàm Instr() để tìm chữ "Thị" trong chuỗi để thêm chữ "Bà" vào trước họ tên nhưng các chữ bị lỗi như trên thì không tìm được. Mong các anh giúp em cách khác.
 
Upvote 0
Cảm ơn các anh .Nhưng em chạy các code trên đều bị lỗi Font, riêng chữ "Thị " thì đúng. dữ liệu của em dùng font Vnarial. các anh chỉ giúp em cách lập macro để tìm và thay thế chỉ 1 chữ "ThỊ" bị lỗi như thế này bằng chữ "Thị" trong mảng dữ liệu.Vì em dùng hàm Instr() để tìm chữ "Thị" trong chuỗi để thêm chữ "Bà" vào trước họ tên nhưng các chữ bị lỗi như trên thì không tìm được. Mong các anh giúp em cách khác.
Dùng fonts khác nhau cũng giống như người Ý & người Lào nói tiếng của nhau cho người kia hiểu mà thôi;
Có khi chữ 'ThỊ' đó đối với font người nhập vẫn là 'Thị' 1 cách bình thường; Khi ta xem bằng fonts khác thì nó hiện hình thù kì dị vậy đó;
Giờ thử vầy xem được không nha:
trong menu Edit có mục replace; Thay toàn bộ xem thử, nha:
Bằng phương pháp copy chữ 'ThỊ' của họ vô hộp thoại 'Find what:' ấy nha. Nhập bằng fonts của bạn là chả được đâu đó bạn!
Nếu quá nhiều các chữ khác nhau cần thay thì có thể tìm hướng khác; Còn giờ thì bằng cách Replace xem sao!

Chúc vui vẽ!
 
Upvote 0
Em dùng Find and Replace (nhấn Ctrl + H).
Find: ThỊ
Repalce: Thị
Nhấn Replace all
Lưu ý: Gõ trong dialog theo mã ABC (font .vnxxx) nó ra chữ miên cũng vẫn được.

Nguyên nhân: Font ABC, Ucase(ký tự có dấu) khác với KÝ TỰ CÓ DẤU. Muốn chữ hoa phải dùng font .vnxxxH

Nếu vẫn thích dùng code thì:
(giả sử cần thay 3 ký tự sai như thí dụ)
PHP:
Option Explicit 
Sub Thay()
 Dim Rng As Range, Clls As Range
 Dim KQua As String, Kytu(3 , 2) As String
  Kytu(1, 1) = "Ị"
  Kytu(2, 1) = "Ậ"
  Kytu(3, 1) = "Ù"
  Kytu(1, 2) = "ị"
  Kytu(2, 2) = "ậ"
  Kytu(3, 2) = "ù"
 Set Rng = Selection 
 For Each Clls In Rng
   For iJ = 1 to 3   
      KQua = Replace(Clls , Kytu(iJ, 1), Kytu(iJ, 2
   Next iJ
  Clls = KQua
 Next Clls
End Sub

Nếu số ký tự cần thay nhiều hơn (thí dụ 5) thì khai báo biến Kytu(5,2) và For iJ = 1 to 5
Nếu số ký tự cần thay chỉ có 1 thì khỏi For iJ:

PHP:
KQua = Replace(Clls , "Ị", "ị")
Clls = KQua
 
Upvote 0
Web KT

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

Back
Top Bottom