Cần giúp viết Code giữ 3 ký tự đầu, xóa các ký tự từ vị trí thứ 4 từ trái qua phải (2 người xem)

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

hung2412

Thành viên tích cực
Tham gia
5/8/08
Bài viết
934
Được thích
240
Giới tính
Nam
Chào các bạn GPE!
Nhờ các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Dọc theo cột B có chứa các ký tự. Giữ 3 ký tự đầu, xóa các ký tự ở đằng sau từ vị trí thứ 4 từ trái qua phải trong ô.
Ví dụ:
- Ô B5 có ký tự là "OPX01/08AAB-NN" => Giữ 3 ký tự đầu, xóa các ký tự ở đằng sau từ vị trí thứ 4 từ trái qua phải => Ô B5 có ký tự mới là "OPX".
- Ô B14 có ký tự là "AAPX01/08AAB-NN" => Giữ 3 ký tự đầu, xóa các ký tự ở đằng sau từ vị trí thứ 4 từ trái qua phải => Ô B14 có ký tự mới là "AAP".
Tôi không biết viết VBA như thế nào cho đúng và ngắn gọn.
Mong các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.
 

File đính kèm

Chào các bạn GPE!
Nhờ các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Dọc theo cột B có chứa các ký tự. Giữ 3 ký tự đầu, xóa các ký tự ở đằng sau từ vị trí thứ 4 từ trái qua phải trong ô.
Ví dụ:
- Ô B5 có ký tự là "OPX01/08AAB-NN" => Giữ 3 ký tự đầu, xóa các ký tự ở đằng sau từ vị trí thứ 4 từ trái qua phải => Ô B5 có ký tự mới là "OPX".
- Ô B14 có ký tự là "AAPX01/08AAB-NN" => Giữ 3 ký tự đầu, xóa các ký tự ở đằng sau từ vị trí thứ 4 từ trái qua phải => Ô B14 có ký tự mới là "AAP".
Tôi không biết viết VBA như thế nào cho đúng và ngắn gọn.
Mong các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.
tại sao không sử dụng công thức rồi chế biến 1 tí mà phải bắt buộc VBA
 
Upvote 0
tại sao không sử dụng công thức rồi chế biến 1 tí mà phải bắt buộc VBA
Có 2 lý do:
- Tôi biết dùng cột phụ để xài công thức Left rồi copy and paste => Cái này lòng vòng => Tôi muốn thực hiện trực tiếp trên cột B luôn.
- Đoạn này nằm trong 1 dự án VBA nên phải xài VBA.
 
Upvote 0
Có 2 lý do:
- Tôi biết dùng cột phụ để xài công thức Left rồi copy and paste => Cái này lòng vòng => Tôi muốn thực hiện trực tiếp trên cột B luôn.
- Đoạn này nằm trong 1 dự án VBA nên phải xài VBA.
trong VBA có hàm left bạn có thể sử dụng nó, còn bạn muốn cho sự kiện như thế nào hay tác động vào những vùng nào thì bạn cứ cho tác động
 
Upvote 0
trong VBA có hàm left bạn có thể sử dụng nó, còn bạn muốn cho sự kiện như thế nào hay tác động vào những vùng nào thì bạn cứ cho tác động
"trong VBA có hàm left bạn có thể sử dụng nó" => Đây là tôi đang nghĩ mãi không ra để viết như thế nào => Mong bạn nói rõ hơn được không ạ?
"còn bạn muốn cho sự kiện như thế nào hay tác động vào những vùng nào thì bạn cứ cho tác động" => Tôi không xài sự kiện bạn ơi.
 
Upvote 0
"trong VBA có hàm left bạn có thể sử dụng nó" => Đây là tôi đang nghĩ mãi không ra để viết như thế nào => Mong bạn nói rõ hơn được không ạ?
"còn bạn muốn cho sự kiện như thế nào hay tác động vào những vùng nào thì bạn cứ cho tác động" => Tôi không xài sự kiện bạn ơi.
Thử code bình dân này:
Mã:
Public Sub BaKyTu()
Dim Cll As Range
For Each Cll In Selection
    If Len(Cll) >= 3 Then
        Cll.Value = Left(Cll, 3)
    End If
Next Cll
End Sub
 
Upvote 0
Thử code bình dân này:
Mã:
Public Sub BaKyTu()
Dim Cll As Range
For Each Cll In Selection
    If Len(Cll) >= 3 Then
        Cll.Value = Left(Cll, 3)
    End If
Next Cll
End Sub
Cảm ơn bạn, cho mình hỏi với, giữa 2 lệnh:
PHP:
Next Cll
PHP:
Next
=> Có sự khác nhau không nhỉ? (Cả 2 đều chạy đúng)
 
Upvote 0
Theo mình nghỉ nó không khác nhau, chỉ dễ hiểu thôi!

Không phải để chỉ cho mình dễ hiểu mà là để cho code nó hiểu nhanh hơn chút. Đối với dân chuyên nghiệp thì luôn nên rõ ràng, đối với dạng nông dân như mình thì vô tư...
 
Upvote 0
Dùng để cho mình tự kiểm soát, lưu ý là tôi dùng từ "kiểm soát" chứ không phải "dễ hiểu".
Đặt trường hợp bạn có nhiều vòng lặp lồng vào nhau. Cái phần đi sau Next sẽ kiểm soát đuợc cái next nào là của cái nào.
Nếu bạn viết như thế này:
For c1 = ...
code abcd
For c2 = ...
code efgh
Next c1
code ijkl
Next c2
Thực sự bạn có hai vòng lặp riêng biệt nhau, nhưng vì lỡ tay gõ nhầm (*), hai vòng lặp thành ra móc vào nhau. Lúc đó compiler sẽ báo lỗi là bạn có hai vòng lặp móc vào nhau. Bạn sẽ có thể chỉnh sửa trước khi chạy
Nếu bạn chỉ dủng Next trơn thì compiler tự động hiểu là cái Next thuộc về For gần nó nhất. Và trường hợp trên sẽ cho ra vòng lặp c2 chứa bên trong c1. Compiler không hề báo lỗi, chạy sai là chuyện của bạn.

Nếu bạn luôn luôn thụt sâu code cho mỗi block của mình thì gần như bạn không cần phần đi sau Next. Bạn có thể nhìn thẳng vào các phần thụt ra thụt vào mà nhận dạng.

(*) tôi chỉ ví dụ là gõ nhầm, trên thực tế, ít khi có chuyện gõ nhầm như thế. Thương thì tình trạng bị móc vòng lặp xảy ra do xoá xửa, dời dòng code.
 
Upvote 0

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

Back
Top Bottom