reset vòng lặp For... Next (1 người xem)

Liên hệ QC

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

nlquynhtram

Thành viên mới
Tham gia
9/11/16
Bài viết
10
Được thích
0
Các thầy cho em hỏi biến i của vòng lặp For i=... Next có thể reset nếu điều kiện if nào đó trả về kết quả true hay không. Trường hợp của em hình như bị lỗi lặp vô tận (con trỏ quay liên tục):

Em tạo vòng lặp để kiểm tra từng ký tự của chuỗi (chuỗi này nằm trong 01 cell ở 01 workbook khác), nếu gặp đúng ký tự "-" sẽ cắt đoạn chuỗi trước ký tự này, và reset i để vòng lặp quay lại kiểm tra từ ký tự đầu tiên (của chuỗi mới bị cắt). Kết quả không chạy được và bị treo.

Đoạn code nằm ở sheet ADD, button ADD_SCAN. Em cám ơn.
 

File đính kèm

Các thầy cho em hỏi biến i của vòng lặp For i=... Next có thể reset nếu điều kiện if nào đó trả về kết quả true hay không. Trường hợp của em hình như bị lỗi lặp vô tận (con trỏ quay liên tục):

Em tạo vòng lặp để kiểm tra từng ký tự của chuỗi (chuỗi này nằm trong 01 cell ở 01 workbook khác), nếu gặp đúng ký tự "-" sẽ cắt đoạn chuỗi trước ký tự này, và reset i để vòng lặp quay lại kiểm tra từ ký tự đầu tiên (của chuỗi mới bị cắt). Kết quả không chạy được và bị treo.

Đoạn code nằm ở sheet ADD, button ADD_SCAN. Em cám ơn.
Nhanh nhất là bạn nêu yêu cầu cần đạt được thì dễ giúp chứ sửa code biết mục đích của bạn ra sao mà sửa.
 
Upvote 0
Ví dụ như vầy:
Em có chuỗi aaaa-bbbbb-cccc. Em muốn cắt làm 03 chuỗi con: aaaa, bbbbb, cccc. Em thực hiện bằng cách tạo vòng lặp kiểm tra từng ký tự của chuỗi, nếu là "-" thì sẽ cắt ra để lấy chuỗi con.
aaaa-bbbbb-cccc cắt ra thành aaaa và bbbbb-cccc.
Sau đó tiếp tục kiểm tra chuỗi bbbbb-cccc để cắt tiếp đến khi đủ 03 chuỗi con. Vòng lặp ở đây phải quay lại check từ ký tự đầu tiên, do đó em muốn reset vòng lặp. Vậy em phải làm như thế nào?
 
Upvote 0
Em mới thấy hàm split có thể làm được yêu cầu rồi, cám ơn mọi người ạ.
 
Upvote 0
Ví dụ như vầy:
Em có chuỗi aaaa-bbbbb-cccc. Em muốn cắt làm 03 chuỗi con: aaaa, bbbbb, cccc. Em thực hiện bằng cách tạo vòng lặp kiểm tra từng ký tự của chuỗi, nếu là "-" thì sẽ cắt ra để lấy chuỗi con.
aaaa-bbbbb-cccc cắt ra thành aaaa và bbbbb-cccc.
Sau đó tiếp tục kiểm tra chuỗi bbbbb-cccc để cắt tiếp đến khi đủ 03 chuỗi con. Vòng lặp ở đây phải quay lại check từ ký tự đầu tiên, do đó em muốn reset vòng lặp. Vậy em phải làm như thế nào?

Thuật toán duyệt chuỗi của bạn sai tét bét hết.
Muốn reset vòng lặp thì phải đặt nó trong một vòng lặp khác.
Do
..for i = đầu chuỗi To cuối chuỗi
....If gặp ký tự tách Then
......tách làm hai, phần đầu là 1 chuỗi con, phần sau lấy làm chuỗi lớn để xét tiếp
......Exit For
....End If
..Next i
Loop While Not Hết chuỗi

Tuy nhiên, thuật toán đúng của duyệt chuỗi là không có reset quái gì cả. Vòng lặp chỉ cần đánh dấu chỗ để ngắt chuỗi và cứ tiếp tục duyệt chuỗi.

Chú: ở đây tôi chỉ phê thuật toán duyệt chuỗi thôi. Bài của bạn căn bản là phân đoạn chuỗi nên dùng hàm Split là đúng rồi. Từ Split có nghĩa là chẻ/tách/phân đoạn mờ.
 
Upvote 0
Hi bác VetMini,

Cám ơn cmt của bác. Em thì quen xài vòng lặp For mà không dùng do.. while nên loay hoay mãi không ra. May ra mà mò ra hàm split nên cũng giải quyết xong rồi.
 
Upvote 0
Câu giải thích trên của tôi giành cho những người hiểu từ "reset" trong cái vụ "reset vòng lặp..."
 
Upvote 0
Web KT

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

Back
Top Bottom