Xử lý chuỗi bằng code VBA (1 người xem)

Liên hệ QC

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

axa00000019

Thành viên mới
Tham gia
28/6/12
Bài viết
14
Được thích
1
Giới tính
Nam
Nhờ các Anh/ chị giúp đỡ.
Hiện em đang có 1 file dữ liệu, em không muốn dùng công thức mà muốn thực hiện bằng code VBA.
Mục tiêu mong muốn em có note trong file.
Mong các anh chị giúp đỡ 1 đoạn code tối ưu hóa vấn đề.
Xin cảm ơn!
 

File đính kèm

Lưu ý:
1. Thêm Module1 và dán code ở dưới.
2. Code giả thiết là dữ liệu ở cột A và bắt đầu từ dòng 1, còn kết quả ở cột B. Nếu khác thì sửa code.
3. Code giả thiết là dữ liệu ở sheet1, nếu ở sheet khác thì sửa trong code "Sheet1" thành tên hiện hành. Nếu code luôn chạy cho sheet đang hoạt động, bất luận ở thời điểm chạy code sheet đó có tên là gì, thì thay ThisWorkbook.Worksheets("Sheet1") ở 2 chỗ thành ActiveSheet
4. code chỉ bỏ "Thay" ở đầu, không bỏ "thay" ở những vị trí khác nếu có.

Mã:
Sub rut_gon()
Dim lastRow As Long, r As Long, text As String, dulieu()
    With ThisWorkbook.Worksheets("Sheet1")
        lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
        .Range("B1:B" & lastRow).ClearContents  ' xoa ket qua cu
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        dulieu = .Range("A1:A" & lastRow + 1).Value ' lay du 1 dong cuoi cung
    End With
    For r = 1 To UBound(dulieu, 1) - 1  ' khong xet dong lay du
        text = dulieu(r, 1)
        If InStr(1, text, "thay ", vbTextCompare) = 1 Then text = Trim(Mid(text, 5))
        Mid(text, 1, 1) = UCase(Mid(text, 1, 1))
        text = Replace(text, "Tr" & ChrW(225) & "i", "T", , , vbTextCompare)
        text = Replace(text, "Ph" & ChrW(7843) & "i", "P", , , vbTextCompare)
        dulieu(r, 1) = text
    Next r
    ThisWorkbook.Worksheets("Sheet1").Range("B1:B" & lastRow).Value = dulieu
End Sub
 
Lưu ý:
1. Thêm Module1 và dán code ở dưới.
2. Code giả thiết là dữ liệu ở cột A và bắt đầu từ dòng 1, còn kết quả ở cột B. Nếu khác thì sửa code.
3. Code giả thiết là dữ liệu ở sheet1, nếu ở sheet khác thì sửa trong code "Sheet1" thành tên hiện hành. Nếu code luôn chạy cho sheet đang hoạt động, bất luận ở thời điểm chạy code sheet đó có tên là gì, thì thay ThisWorkbook.Worksheets("Sheet1") ở 2 chỗ thành ActiveSheet
4. code chỉ bỏ "Thay" ở đầu, không bỏ "thay" ở những vị trí khác nếu có.

Mã:
Sub rut_gon()
Dim lastRow As Long, r As Long, text As String, dulieu()
    With ThisWorkbook.Worksheets("Sheet1")
        lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
        .Range("B1:B" & lastRow).ClearContents  ' xoa ket qua cu
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        dulieu = .Range("A1:A" & lastRow + 1).Value ' lay du 1 dong cuoi cung
    End With
    For r = 1 To UBound(dulieu, 1) - 1  ' khong xet dong lay du
        text = dulieu(r, 1)
        If InStr(1, text, "thay ", vbTextCompare) = 1 Then text = Trim(Mid(text, 5))
        Mid(text, 1, 1) = UCase(Mid(text, 1, 1))
        text = Replace(text, "Tr" & ChrW(225) & "i", "T", , , vbTextCompare)
        text = Replace(text, "Ph" & ChrW(7843) & "i", "P", , , vbTextCompare)
        dulieu(r, 1) = text
    Next r
    ThisWorkbook.Worksheets("Sheet1").Range("B1:B" & lastRow).Value = dulieu
End Sub
Rất cảm ơn. Code chạy rất ổn ạ.
Em muốn làm 1 cái Addins để dùng cho vùng dữ liệu được chọn thì Code sẽ như thế nào. Mong Anh giúp ạ.
 
Rất cảm ơn. Code chạy rất ổn ạ.
Em muốn làm 1 cái Addins để dùng cho vùng dữ liệu được chọn thì Code sẽ như thế nào.
Hãy thử tập tin đính kèm (XLAM).
Thẻ "Thay thế" được tạo sau thẻ Home. Đưa chuột vào nút Rút gọn để xem hướng dẫn cách dùng (Chọn vùng trong 1 cột trên sheet rồi nhấn nút Rút gọn trên Ribbon).

Kết quả sẽ được nhập ở cột bên phải vùng chọn.
 

File đính kèm

Hãy thử tập tin đính kèm (XLAM).
Thẻ "Thay thế" được tạo sau thẻ Home. Đưa chuột vào nút Rút gọn để xem hướng dẫn cách dùng (Chọn vùng trong 1 cột trên sheet rồi nhấn nút Rút gọn trên Ribbon).

Kết quả sẽ được nhập ở cột bên phải vùng chọn.
Chạy ổn. Rất cảm ơn Anh.!
 
Web KT

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

Back
Top Bottom