Có Phải Do While...Loop Chỉ Là 1 Dạng Viết Tắt Của For.. Next?
Có thể bạn quan tâm
- Trang chủ Có gì mới Hoạt động gần nhất Tác giả
- Diễn đàn Tìm bài viết mới Tìm theo chuyên mục
- Video
Video về Excel Video về tin học khác Tin tức về tin học chung - Thông tin mới Featured content Tìm bài mới Tài Nguyên Mới Hoạt động gần nhất
- Tài nguyên Đánh giá mới nhất Tìm tài nguyên
- Đóng góp
Tìm kiếm
Mọi nơi Đề tài Diễn đàn này Đề tài này Chỉ tìm trong tiêu đề Note Tìm kiếm Tìm nâng cao…- Tìm bài viết mới
- Tìm theo chuyên mục
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
- Khách ơi! GPE thông tin đến bạn ấn phẩm "lập trình VBA trong Excel": - Phần cơ bản - Phần Nâng Cao - VBA trong Excel - Cải thiện và tăng tốc
- Trang chủ
- Diễn đàn
- Lập Trình với Excel
- Thread starter Thread starter LinDan
- Ngày gửi Ngày gửi 13/3/12
Người dùng đang xem chủ đề này
Đang trực tuyến: 2 (Thành viên: 0, Khách: 2)LinDan
Thành viên tiêu biểu
Tham gia 8/2/12 Bài viết 412 Được thích 111 Tôi chưa thạo lập trình lắm, phần vòng lặp sau khi đọc tôi có cảm giác Do While...Loop và For.. Next hình như bản chất chỉ là 1 (tức là Do While...Loop nó chỉ viết tắt cho gọn) phải không các bác. Liệu có ví dụ nào thì dùng Do While...Loop nó sẽ ưu việt hơn hẳn dùng For.. Next không? Sắp xếp theo thời gian sắp xếp theo bầu chọn Nguyễn Duy Tuân
Nghị Hách
Thành viên danh dự Tham gia 13/6/06 Bài viết 4,859 Được thích 10,349 Giới tính Nam Nghề nghiệp Giáo viên, CEO tại BluesoftsLinDan đã viết: Tôi chưa thạo lập trình lắm, phần vòng lặp sau khi đọc tôi có cảm giác Do While...Loop và For.. Next hình như bản chất chỉ là 1 (tức là Do While...Loop nó chỉ viết tắt cho gọn) phải không các bác. Liệu có ví dụ nào thì dùng Do While...Loop nó sẽ ưu việt hơn hẳn dùng For.. Next không? Nhấp chuột vào đây để mở rộng...Người ta không làm thừa cái gì đâu bạn à. Hai dạng lặp: For I = 1 To N .... Next I Do While I <= N .... I = I +1 Loop Nếu trong mỗi vòng lặp N có thể thay đổi thì phải dùng Do While. Với For..Next thì dù thay đổi N thì nó vẫn lấy giá trị ban đầu để làm điều kiện lặp. Ví dụ ban đầu N= 10, trong quá trình lặp N = 100 thì For..Next vẫn đang hiểu N = 10. Vậy nếu N là không đổi thì nên dùng For..Next tốc độ sẽ nhanh hơn vì VBA không tính lại biểu thức trong N ở mỗi vòng lặp. Lần chỉnh sửa cuối: 13/3/12 Upvote 0
nghiaphuc
Thành viên gạo cội



Thành viên danh dự Tham gia 25/9/09 Bài viết 5,729 Được thích 8,859 Giới tính Nam Nghề nghiệp Giáo viên LinDan đã viết: Tôi chưa thạo lập trình lắm, phần vòng lặp sau khi đọc tôi có cảm giác Do While...Loop và For.. Next hình như bản chất chỉ là 1 (tức là Do While...Loop nó chỉ viết tắt cho gọn) phải không các bác. Liệu có ví dụ nào thì dùng Do While...Loop nó sẽ ưu việt hơn hẳn dùng For.. Next không? Nhấp chuột vào đây để mở rộng...Về bản chất, 2 vòng lặp For...Next và Do While...Loop (hay Do...Loop While, Do...Loop Until) là hoàn toàn khác nhau: - Vòng lặp For...Next là vòng lặp có số lần biết trước. Chúng ta sử dụng vòng lặp này khi đã biết trước (hoặc có thể tính được) số lần lặp. - Các vòng lặp Do... là các vòng lặp có số lần lặp chưa biết trước, nó chỉ dừng khi gặp một điều kiện phù hợp nào đó, quy định sau từ khóa While hoặc Until: + Vòng lặp Do While...Loop hoặc Do...Loop While sẽ chạy khi điều kiện sau While còn đúng, chỉ khác nhau là kiểm tra điều kiện rồi mới chạy lệnh hay ngược lại. + Vòng lặp Do...Loop Until sẽ chạy cho đến khi điều kiện sau Until đúng. Như vậy, khi nào bạn biết được số lần lặp trước thì dùng For..., ngược lại thì dùng Do... Tuy nhiên trong một số trường hợp, ta có thể "chế biến" qua lại giữa 2 vòng lặp này. Chẳng hạn: 1. Câu lệnh: PHP: Sao chép. For i=1 To N 'Dãy lệnh' Next Có thể thay bởi dãy lệnh: PHP: Sao chép. i=1 Do While i<=N 'Dãy lệnh' i=i+1 Loop 2. Câu lệnh: PHP: Sao chép. Do While Điều_kiện 'Dãy lệnh' Loop Có thể thay bởi câu lệnh: PHP: Sao chép. For i=1 to N 'Dãy lệnh' If Điều_kiện then Exit For Next Upvote 0
SA_DQ
/(hông là gì!
Thành viên danh dự Tham gia 8/6/06 Bài viết 14,776 Được thích 23,229 Nghề nghiệp U80 Sẵn đây, mình xin các bạn giải giúp bài tập sau Viết dùm hàm tự tạo đễ cho biết số ngày chủ nhật trong tháng, một khi ta được cung cấp 1 ngày cụ thể nào đó của thế kỷ trước? PHP: Sao chép. Function SoNgayCN( Dat As Date) As Byte '. . . . . . . . ' End Function Upvote 0nmhung49
Thành viên tích cực

Tham gia 20/8/09 Bài viết 1,186 Được thích 1,338 HYen17 đã viết: Viết dùm hàm tự tạo đễ cho biết số ngày chủ nhật trong tháng, một khi ta được cung cấp 1 ngày cụ thể nào đó của thế kỷ trước? Chú SA coi có làm được gì không em viết đại Nhấp chuột vào đây để mở rộng...
File đính kèm
- Ngay.xls Ngay.xls 46.5 KB · Đọc: 19
ndu96081631
Huyền thoại GPE
Thành viên BQT Super Moderator Tham gia 5/6/08 Bài viết 30,703 Được thích 53,981 nmhung49 đã viết: Viết dùm hàm tự tạo đễ cho biết số ngày chủ nhật trong tháng, một khi ta được cung cấp 1 ngày cụ thể nào đó của thế kỷ trước? Chú SA coi có làm được gì không em viết đại Nhấp chuột vào đây để mở rộng...Hàm này sai: PHP: Sao chép. Public Function SoNgayCNDoLoop(Dat As Date) As Byte Dim i As Byte, nsun As Byte Do i = i + 1 If Weekday(DateSerial(Year(Dat), Month(Dat), i)) = 1 Then nsun = nsun + 1 Else If Day(DateSerial(Year(Dat), Month(Dat) + 1, 0)) = i Then Exit Do End If Loop SoNgayCNDoLoop = nsun End Function Thử với ngày 1/9/2012 sẽ biết Ngoài ra, mấy cái As Byte, As Integer nên dẹp đi cho rồi ---> Tất cả chuyển thành biến Long là ngon nhất (Dim i As Long, nsun As Long)... Kế cả biến Dat, nếu có thể cũng nên chuyển thành biến Long luôn Lần chỉnh sửa cuối: 14/3/12 Upvote 0
SA_DQ
/(hông là gì!
Thành viên danh dự Tham gia 8/6/06 Bài viết 14,776 Được thích 23,229 Nghề nghiệp U80 Qui trình nên là vầy: (1) Xác lập ngày đầu tháng từ tham số mà ta vừa nhận; (Việc này nhờ hàm DateSerial(..., ... ,1) trong VBA) (2) Tạo vòng lặp For . . . Next hay Do . . . . Loop để duyệt từ ngày đầu của tháng đến hết ngày 25 tháng đó xem có bao nhiêu ngày CN Upvote 0phihndhsp
Thành viên gạo cội



Tham gia 26/12/09 Bài viết 3,363 Được thích 2,489 Giới tính Nam Nghề nghiệp Giáo Viên nghiaphuc đã viết: Về bản chất, 2 vòng lặp For...Next và Do While...Loop (hay Do...Loop While, Do...Loop Until) là hoàn toàn khác nhau: - Vòng lặp For...Next là vòng lặp có số lần biết trước. Chúng ta sử dụng vòng lặp này khi đã biết trước (hoặc có thể tính được) số lần lặp. - Các vòng lặp Do... là các vòng lặp có số lần lặp chưa biết trước, nó chỉ dừng khi gặp một điều kiện phù hợp nào đó, quy định sau từ khóa While hoặc Until: + Vòng lặp Do While...Loop hoặc Do...Loop While sẽ chạy khi điều kiện sau While còn đúng, chỉ khác nhau là kiểm tra điều kiện rồi mới chạy lệnh hay ngược lại. + Vòng lặp Do...Loop Until sẽ chạy cho đến khi điều kiện sau Until đúng. Như vậy, khi nào bạn biết được số lần lặp trước thì dùng For..., ngược lại thì dùng Do... Tuy nhiên trong một số trường hợp, ta có thể "chế biến" qua lại giữa 2 vòng lặp này. Chẳng hạn: 1. Câu lệnh: PHP: Sao chép. For i=1 To N 'Dãy lệnh' Next Có thể thay bởi dãy lệnh: PHP: Sao chép. i=1 Do While i<=N 'Dãy lệnh' i=i+1 Loop 2. Câu lệnh: PHP: Sao chép. Do While Điều_kiện 'Dãy lệnh' Loop Có thể thay bởi câu lệnh: PHP: Sao chép. For i=1 to N 'Dãy lệnh' If Điều_kiện then Exit For Next Nhấp chuột vào đây để mở rộng...Em nghĩ mọi vòng lặp đều có bản chất giống nhau, đều lặp đi lặp lại số hành động cần làm có khác chăng ở đây là cách thức lập thử so sánh vòng lập mà ĐK không biết trước số vòng lặp thì có vòng do While, Do ... Loop While, do... Loop Until do While, Do ... Loop While đều là số vòng lặp không biết trước số lần lặp Nhưng với do While thì kiểm tra giá trị trước khi lặp có nghĩa là có thể không chạy vào vòng lặp nếu đk không thoả còn với Do ... Loop While thì làm trước kiểm tra điều kiện sau nên ít nhất sẽ lặp được 1 lần nếu đk đầu tiên bị sai còn với Do ... Loop Until tương tự như Do ... Loop While nhưng sẽ kết thúc khi điều kiện đúng Còn vòng lặp For chẳng qua là trường hợp đặt biệt của vòng lặp While với số lần lặp được biết trước và tự động tăng hay giản biến điều kiện ngay trong vòng lặp(Nên hạn chế được việc treo máy vì đk) Upvote 0 V
vodoi2x
Nothing & Nothing
Tham gia 16/5/11 Bài viết 1,592 Được thích 1,660ndu96081631 đã viết: Ngoài ra, mấy cái As Byte, As Integer nên dẹp đi cho rồi ---> Tất cả chuyển thành biến Long là ngon nhất (Dim i As Long, nsun As Long)... Kế cả biến Dat, nếu có thể cũng nên chuyển thành biến Long luôn Nhấp chuột vào đây để mở rộng...Sao lại dẹp đi ah, thấy các sách đều nói phải chọn đúng loại khai báo, Chỗ này không hiểu , nhờ ndu... giải thích Upvote 0 V
vodoi2x
Nothing & Nothing
Tham gia 16/5/11 Bài viết 1,592 Được thích 1,660phihndhsp đã viết: Em nghĩ mọi vòng lặp đều có bản chất giống nhau, đều lặp đi lặp lại số hành động cần làm có khác chăng ở đây là cách thức lập thử so sánh vòng lập mà ĐK không biết trước số vòng lặp thì có vòng do While, Do ... Loop While, do... Loop Until do While, Do ... Loop While đều là số vòng lặp không biết trước số lần lặp Nhưng với do While thì kiểm tra giá trị trước khi lặp có nghĩa là có thể không chạy vào vòng lặp nếu đk không thoả còn với Do ... Loop While thì làm trước kiểm tra điều kiện sau nên ít nhất sẽ lặp được 1 lần nếu đk đầu tiên bị sai còn với Do ... Loop Until tương tự như Do ... Loop While nhưng sẽ kết thúc khi điều kiện đúng Còn vòng lặp For chẳng qua là trường hợp đặt biệt của vòng lặp While với số lần lặp được biết trước và tự động tăng hay giản biến điều kiện ngay trong vòng lặp(Nên hạn chế được việc treo máy vì đk) Nhấp chuột vào đây để mở rộng...Vậy thầy? thầy cho ví dụ cụ thể đi ạ, Chứ các thành viên nói kiểu này rối như canh hẹ lun, Túm lại FOR làm gì khi nào dùng, Do While, Loop khi nào dùng, vì nếu bản chất giống nhau thì cứ dùng đại phải không? Thầy nói treo máy vì đk là sao, nghĩa là cứ có đk là treo máy ah? Upvote 0
ndu96081631
Huyền thoại GPE
Thành viên BQT Super Moderator Tham gia 5/6/08 Bài viết 30,703 Được thích 53,981 vodoi2x đã viết: Sao lại dẹp đi ah, thấy các sách đều nói phải chọn đúng loại khai báo, Chỗ này không hiểu , nhờ ndu... giải thích Nhấp chuột vào đây để mở rộng...Tại sao phải dùng biến Long thay cho Integer và Byte, ở trên GPE đã nói nhiều lần rồi! Bạn tìm đi Cứ hãy nhớ thuộc lòng rằng: ĐÓ LÀ CHÂN LÝ Upvote 0 V
vodoi2x
Nothing & Nothing
Tham gia 16/5/11 Bài viết 1,592 Được thích 1,660ndu96081631 đã viết: Tại sao phải dùng biến Long thay cho Integer và Byte, ở trên GPE đã nói nhiều lần rồi! Bạn tìm đi Cứ hãy nhớ thuộc lòng rằng: ĐÓ LÀ CHÂN LÝ Nhấp chuột vào đây để mở rộng...hehe, sách mới là chân lý ah, Vấn đề là khai báo ở đây Dim i As Byte, nsun As Byte dùng để chứa ngày (chắc chắn chỉ 1--31) và nsun chắc chắn là nhỏ hơn 10 vậy dùng Byte là chuẩn ah, Vậy thì tác giả bài đó làm đúng khai đó ah (?) Không rõ ý a sao? Chập chững VBA , nên theo sách thôi,... , mong mọi người chỉ cho cách học chuẩn Lần chỉnh sửa cuối: 14/3/12 Upvote 0 5
597335
Thành viên hoạt động


Tham gia 19/2/12 Bài viết 126 Được thích 29 May quá, em cũng đang cần tìm hiểu về cái này thì tìm thấy bài http://www.giaiphapexcel.com/forum/showthread.php?13255-Biến-integer-biến-long-cái-nào-nhanh-hơn , bác Vodòix vào đây xem nhé Upvote 0 thanhlanh
Thành viên tích cực

Tham gia 21/2/08 Bài viết 858 Được thích 1,211 vodoi2x đã viết: Vậy thầy? thầy cho ví dụ cụ thể đi ạ, Chứ các thành viên nói kiểu này rối như canh hẹ lun, Túm lại FOR làm gì khi nào dùng, Do While, Loop khi nào dùng, vì nếu bản chất giống nhau thì cứ dùng đại phải không? Thầy nói treo máy vì đk là sao, nghĩa là cứ có đk là treo máy ah? Nhấp chuột vào đây để mở rộng...Ví dụ vòng lặp sẽ treo máy: Dim i as Long i=1 Do Until i=100 i= i + 2 ' .... Loop Upvote 0 V
vodoi2x
Nothing & Nothing
Tham gia 16/5/11 Bài viết 1,592 Được thích 1,660597335 đã viết: May quá, em cũng đang cần tìm hiểu về cái này thì tìm thấy bài http://www.giaiphapexcel.com/forum/showthread.php?13255-Biến-integer-biến-long-cái-nào-nhanh-hơn , bác Vodòix vào đây xem nhé Nhấp chuột vào đây để mở rộng...tôi đã đọc, Vấn đề không phải thời gian (vì bài này tính có trong tháng), hay tài nguyên (vì bài này quá nhỏ, sử dụng không nhiều biến), mà còn thể hiện sự chuẩn dữ liệu: Dữ liệu đến đâu khai báo đến đó như thế mới giúp kiểm soát lỗi tốt hơn cho biến, Nói cách khác, cứ theo sách thì bạn sẽ hiểu đúng kiểu loại dữ liệu hơn, chứ không phải vô tiền khoáng hậu kiểu dùng số đại thế, cái gì sinh ra cũng có lý của nó Upvote 0 V
vodoi2x
Nothing & Nothing
Tham gia 16/5/11 Bài viết 1,592 Được thích 1,660thanhlanh đã viết: Ví dụ vòng lặp sẽ treo máy: Dim i as Long i=1 Do Until i=100 i= i + 2 ' .... Loop Nhấp chuột vào đây để mở rộng...cám ơn bạn Cái này thì rõ ai cũng biết ah, vì đk đặt sai - lỗi sai do người viết theo thầy Phi... các vòng lặp đó giống nhau, còn vòng lặp DoWhile..Loop Until... cứ có đk là treo máy (nguyên văn: "Nên hạn chế được việc treo máy vì đk") và muốn biết khi nào thì dùng cái nào ah (?) Upvote 0
SA_DQ
/(hông là gì!
Thành viên danh dự Tham gia 8/6/06 Bài viết 14,776 Được thích 23,229 Nghề nghiệp U80 Như mình trước đây, khi mới có những hàm ngây ngô đầu tiên & chưa thể có GPE.COM, thì những SF của mình còn buồn cười hơn í chứ. & đến giờ, khi về lại cơ quan cũ, dỡ những macro thời xưa của mình, mình mới thấy nhờ GPE.COM mà mình mở mang đầu óc ra nhiều. . . . Mà mình cũng không ngờ bài tập nhỏ của mình làm sôi nổi lại sự tranh luận gây gắt khi xưa; /-)úng là: " 3 thằng Do thái không bằng 1 thằng VN; Nhưng 3 thằng VN không bằng 1 thằng Nga!" Để khỏi mang tội SPAM, mình xin gợi í thêm: Trong vòng lặp ta nên có 2 điều kiện để thoát ngay vòng lặp: (1) Thoát ngay khi đã sang tháng khác (Cái ni đương nhiên & dễ); (2) Thoát khi tìm ra CN là ngày 25 trở đi; Chỉnh sửa lần cuối bởi điều hành viên: 14/3/12 Upvote 0Nguyễn Duy Tuân
Nghị Hách
Thành viên danh dự Tham gia 13/6/06 Bài viết 4,859 Được thích 10,349 Giới tính Nam Nghề nghiệp Giáo viên, CEO tại Bluesoftsthanhlanh đã viết: Ví dụ vòng lặp sẽ treo máy: Dim i as Long i=1 Do Until i=100 i= i + 2 ' .... Loop Nhấp chuột vào đây để mở rộng...Không phải treo mà nó vẫn làm việc đến khi mất điện :d. Điều kiện của bạn không đúng. I = 1, sau đó tăng mỗi vòng lắm là I = I + 2 ==> I = 1 3 5 Toàn số lẻ, nên Until I = 100 không bao giờ xảy ra. Upvote 0
ndu96081631
Huyền thoại GPE
Thành viên BQT Super Moderator Tham gia 5/6/08 Bài viết 30,703 Được thích 53,981 vodoi2x đã viết: hehe, sách mới là chân lý ah, Vấn đề là khai báo ở đây Dim i As Byte, nsun As Byte dùng để chứa ngày (chắc chắn chỉ 1--31) và nsun chắc chắn là nhỏ hơn 10 vậy dùng Byte là chuẩn ah, Vậy thì tác giả bài đó làm đúng khai đó ah (?) Không rõ ý a sao? Chập chững VBA , nên theo sách thôi,... , mong mọi người chỉ cho cách học chuẩn Nhấp chuột vào đây để mở rộng...Tôi nói bạn không tin, bạn đọc trong quyển sách nào đó và bạn cho là chân lý thì bạn cứ việc tin... Tôi không ép! Còn những ai muốn tiếp tục "cày" với VBA hay VB thì cứ việc thuộc lòng rằng: hãy thay kiểu biến Byte hoặc Integer bằng kiểu biến Long Vậy đi nha! Upvote 0
ptm0412
Bad Excel Member
Thành viên BQT Administrator Tham gia 4/11/07 Bài viết 14,810 Được thích 37,517 Donate (Momo)
Giới tính Nam Nghề nghiệp Consultant vodoi2x đã viết: theo thầy Phi... các vòng lặp đó giống nhau, còn vòng lặp DoWhile..Loop Until... cứ có đk là treo máy (nguyên văn: "Nên hạn chế được việc treo máy vì đk") Nhấp chuột vào đây để mở rộng...Do Phi viết sai. Đúng ra theo ý đó, sẽ phải viết là "hạn chế được vòng lặp vô tận do không có điều kiện thoát hoặc điều kiện thoát sai". Vòng lặp vô tận khác với treo máy. Vòng lặp vô tận chỉ buộc Excel chạy mãi chạy hoài thôi. Nhưng! ý đó chưa đúng! Không đặt điều kiện thoát, hoặc đặt điều kiện thoát không đúng để xảy ra lỗi vòng lặp vô tận, là lỗi người viết code học chưa tới, chứ không phải lỗi của Do mà chê Do không dùng. Người ta chọn Do Loop hay chọn For - Next, là tuỳ từng bài toán cụ thể. Đối với cá nhân tôi, chỉ dùng Do khi chưa biết trước số vòng lặp. Dùng For - Next, có những cái lợi: - Có thể lồng nhiều vòng For vào nhau để đơn giản hoá code thực thi bên trong. - Cũng có thể đặt điều kiện để thoát, không cần chạy đủ số vòng lặp quy định. - Và như Tuân nói ở bài 2, For - Next nhanh hơn. Upvote 0
ptm0412
Bad Excel Member
Thành viên BQT Administrator Tham gia 4/11/07 Bài viết 14,810 Được thích 37,517 Donate (Momo)
Giới tính Nam Nghề nghiệp Consultant nghiaphuc đã viết: Về bản chất, 2 vòng lặp For...Next và Do While...Loop (hay Do...Loop While, Do...Loop Until) là hoàn toàn khác nhau Nhấp chuột vào đây để mở rộng...Câu này sai. Công dụng khác nhau thì có, nhưng bản chất thì giống nhau: Dùng cấu trúc lặp để không phải viết 1 số dòng code nhiều lần. Thí dụ: PHP: Sao chép. Sub TinhGiaithua_Khonglap() Dim Kqua As Long Kqua = 1 Kqua = Kqua * 2 Kqua = Kqua * 3 Kqua = Kqua * 4 Kqua = Kqua * 5 Msgbox Kqua End Sub Để tránh viết câu lệnh 5 lần, 10 lần, 100 lần, ta dùng vòng lặp, và ta sẽ chọn Do hay For - Next tuỳ theo.
- Các vòng lặp Do... là các vòng lặp có số lần lặp chưa biết trước, nó chỉ dừng khi gặp một điều kiện phù hợp nào đó, quy định sau từ khóa While hoặc Until: + Vòng lặp Do While...Loop hoặc Do...Loop While sẽ chạy khi điều kiện sau While còn đúng, chỉ khác nhau là kiểm tra điều kiện rồi mới chạy lệnh hay ngược lại. + Vòng lặp Do...Loop Until sẽ chạy cho đến khi điều kiện sau Until đúng. Nhấp chuột vào đây để mở rộng...Câu màu xanh có thể bị hiểu sai. Phải viết rõ ra rằng: Vòng lặp Do...Loop Until sẽ chạy cho đến khi điều kiện sau Until đúng thì dừng. Upvote 0 S
siwtom
Thành viên gắn bó


Tham gia 19/3/08 Bài viết 2,127 Được thích 4,211 thanhlanh đã viết: Ví dụ vòng lặp sẽ treo máy: Dim i as Long i=1 Do Until i=100 i= i + 2 ' .... Loop Nhấp chuột vào đây để mở rộng...Tôi hiểu từ "treo" của bạn là: bình thường thì code thực hiện một số "thao tác" nào đó rồi hiển thị, trả về kết quả ... nhưng trong th này thì cái hiển thị, trả về kết quả không bao giờ có. Có thể từ "treo" bạn dùng với nghĩa như thế, vậy tôi không "đeo bám" về câu từ. Nhưng ta thử sửa code thành: Dim i as Long i=1 Do Until i=100 i= i + 1 ' .... Loop Vậy thì mọi người sẽ "vỗ tay" là đk đúng? Ừ thì với code đó vòng lặp sẽ kết thúc nhưng về mặt lập trình thì là thói quen không thể chấp nhận được. Như trong cuộc sống ấy, nếu bạn cẩn thận, có thói quen tốt thì ít khi mắc lỗi hơn. Ta giả sử là trong code trên bạn tính toán gì đó, bạn sử dụng thuật toán gì đó. Code chạy "ngon". Nhưng sau một thời gian bạn nghĩ ra một thuật toán còn "tởm" hơn. Bạn sửa lại code, nhưng với thuật toán mới bạn phải có i = i + 2. Bạn quên sửa lại đk. Nếu code ngắn thì cái đk kia nó "đập" vào mắt và bạn "giật mình" và sửa lại đk. Hoặc có "đậ" nhing nhiều người không "nhìn" thấy và quên bẵng đi. Còn nếu code dài và cái đk kia nó không "đập" vào mắt thì có khi bạn quên luôn. Thế là vòng lặp chạy không bao giờ ngừng. Về lập trình nếu bạn muốn vòng lặp chỉ thực hiện cho những giá trị vd. < a thì không bao gờ được viết đk là Do Until i = a Lúc đó luôn phải đổi thành Do Until i >= a. Không bao giờ trong Do (...) ... Loop được có đk ĐÚNG bằng một gá trị nào đó. Hoặc i >= a hoặc i <= a. Về Byte, Integer, Long mà mọi người bàn thì tôi nghĩ như sau: Không phải mọi lúc mọi nơi cứ BYTE, INTEGER là đổi thành Long hết. Như thế "người ta" cung cấp kiểu BYTE và Integer để làm gì?. Có một điều tôi nghĩ là System 32 bít (4 bai) thì thực hiện các thao tác trong các khối 4 bai bao giờ cũng nhanh nhất. Tôi ví như (có thể không sát lắm) một người bán hàng có máy đong gạo mỗi lần đong là 10 kg, nó thao tác với lượng 10 kg là thuần thục. Nếu ai mua 10, 20, 30, ... kg thì nó đong vù một cái là xong. Mua 5 kg cũng được nhưng nó phải làm thêm thao tác chia đôi lượng vừa cân. Như thế lâu hơn. Đổi BYTE thành Long cũng được nhưng tùy th. Nếu bạn dùng một mảng rất lớn và giá trị các ô < 256 thì rất có thể không nên khai báo kiểu Long vì như thế nó chiếm bộ nhớ quá lớn. Upvote 0
ptm0412
Bad Excel Member
Thành viên BQT Administrator Tham gia 4/11/07 Bài viết 14,810 Được thích 37,517 Donate (Momo)
Giới tính Nam Nghề nghiệp Consultant phihndhsp đã viết: Em nghĩ mọi vòng lặp đều có bản chất giống nhau, đều lặp đi lặp lại số hành động cần làm có khác chăng ở đây là cách thức lập thử so sánh vòng lập mà ĐK không biết trước số vòng lặp thì có vòng do While, Do ... Loop While, do... Loop Until do While, Do ... Loop While đều là số vòng lặp không biết trước số lần lặp Nhưng với do While thì kiểm tra giá trị trước khi lặp có nghĩa là có thể không chạy vào vòng lặp nếu đk không thoả còn với Do ... Loop While thì làm trước kiểm tra điều kiện sau nên ít nhất sẽ lặp được 1 lần nếu đk đầu tiên bị sai còn với Do ... Loop Until tương tự như Do ... Loop While nhưng sẽ kết thúc khi điều kiện đúng Còn vòng lặp For chẳng qua là trường hợp đặt biệt của vòng lặp While với số lần lặp được biết trước và tự động tăng hay giản biến điều kiện ngay trong vòng lặp(Nên hạn chế được việc treo máy vì đk) Nhấp chuột vào đây để mở rộng...Bài của Phi, trừ các lỗi chính tả tô đỏ, vẫn còn những ý sai (màu xanh). vụ treo máy vì đk, tôi đã phân tích ở trên. Câu sai thứ 2: Còn vòng lặp For chẳng qua là trường hợp đặt biệt của vòng lặp While - For Next và Do loop không có cái nào là trường hợp đặc biệt của cái nào. Nó cùng bản chất là cấu trúc dùng để lặp, nhưng chả có cái nào là cha của cái nào. - Chỉ có vòng lặp Do Loop hoặc nói tắt là vòng lặp Do, chứ không có vòng lặp While Không hiểu khi đứng lớp giảng bài cho học sinh của mình, và khi soạn giáo án Phi có mắc những lỗi chính tả và lỗi từ ngữ này không? Câu sai thứ 3: tự động tăng hay giản biến điều kiện ngay trong vòng lặp Vòng lặp For Next đúng là có tự động tăng (hoặc giảm) biến chạy (hoặc biến đếm), chứ không tăng giảm biến điều kiện. Điều kiện để thoát vòng lặp (cả 2 loại) là 1 điều kiện khác, có thể dùng 1 biến khác chứ không nhất thiết dùng biến đếm (hoặc gọi là biến chạy) Lần chỉnh sửa cuối: 14/3/12 Upvote 0
ndu96081631
Huyền thoại GPE
Thành viên BQT Super Moderator Tham gia 5/6/08 Bài viết 30,703 Được thích 53,981 siwtom đã viết: ] Về Byte, Integer, Long mà mọi người bàn thì tôi nghĩ như sau: Không phải mọi lúc mọi nơi cứ BYTE, INTEGER là đổi thành Long hết. Như thế "người ta" cung cấp kiểu BYTE và Integer để làm gì?. Có một điều tôi nghĩ là System 32 bít (4 bai) thì thực hiện các thao tác trong các khối 4 bai bao giờ cũng nhanh nhất. Tôi ví như (có thể không sát lắm) một người bán hàng có máy đong gạo mỗi lần đong là 10 kg, nó thao tác với lượng 10 kg là thuần thục. Nếu ai mua 10, 20, 30, ... kg thì nó đong vù một cái là xong. Mua 5 kg cũng được nhưng nó phải làm thêm thao tác chia đôi lượng vừa cân. Như thế lâu hơn. Đổi BYTE thành Long cũng được nhưng tùy th. Nếu bạn dùng một mảng rất lớn và giá trị các ô < 256 thì rất có thể không nên khai báo kiểu Long vì như thế nó chiếm bộ nhớ quá lớn. Nhấp chuột vào đây để mở rộng...Thật ra những điều tôi nói về Byte, Integer, Long... không phải do tôi nghĩ ra cho vui mà đó là phát biểu từ Microsoft: http://msdn.microsoft.com/en-us/library/aa164754(v=office.10).aspx Và chuyện này cũng đã bàn nhiều trên diễn đàn rồi... cho nên cũng không đến lượt tôi hay bạn hay ai đó không tin vào điều này đâu Còn chuyện ai vì thói quen thích xài cái này (thay vì phải là cái khác) thì cứ tùy ý vậy! Đã biết rằng Long nhanh hơn Integer thì cứ thế mà xài, đâu cần phải thắc mắc "người ta" cung cấp kiểu BYTE và Integer để làm gì? Nói cho cùng thì câu hỏi này phải đi hỏi MS mới đúng Upvote 0 V
vodoi2x
Nothing & Nothing
Tham gia 16/5/11 Bài viết 1,592 Được thích 1,660ptm0412 đã viết: Không hiểu khi đứng lớp giảng bài cho học sinh của mình, và khi soạn giáo án Phi có mắc những lỗi chính tả và lỗi từ ngữ này không? Nhấp chuột vào đây để mở rộng...ui, thế này thì oan cho thầy quá, nặng lời thật, vì chắc là thầy ít thời gian nên gõ loạn lên thế, chứ lên lớp phong cách phải khác ah, hơn nữa
ptm0412 đã viết: Câu sai thứ 2: Còn vòng lặp For chẳng qua là trường hợp đặt biệt của vòng lặp While - For Next và Do loop không có cái nào là trường hợp đặc biệt của cái nào. Nó cùng bản chất là cấu trúc dùng để lặp, nhưng chả có cái nào là cha của cái nào. Nhấp chuột vào đây để mở rộng...Đúng là không phải loại nào nào là trường hợp đặc biệt của loại vòng lặp kia, mà chắc thầy Phi... NHƯNG có một số bài toán chúng ta có thể chọn dùng cả 2 hay 3 loại đó (khi biết chính xác số lần lặp / ngay việc thoát vòng FOR bằng ExitFOR vẫn giới hạn cần biết số vòng lặp tối đa). Khi đó thì ưu thế vòng FOR thể hiện hơn ở 2 điểm: - Không phải quản lý điều kiện, - Nếu cần đếm hoặc đánh dấu số vòng lặp: thì Không phải cần quan tâm tăng biến điều khiển vì lẽ đó nên thầy Phi chăc muốn nói TỰ ĐỘNG TĂNG BIẾN NÀY đây (không phải biến đk)
ptm0412 đã viết: - Chỉ có vòng lặp Do Loop hoặc nói tắt là vòng lặp Do, chứ không có vòng lặp While Nhấp chuột vào đây để mở rộng...Có vòng lặp While trong VBA đó là While... WEnd, và từ trước này trong tin học lập trình người ta vẫn thường gọi tắt vòng lặp với số lần không xác định - điều kiện trước là While --> từ này là đúng vài lời chia sẻ Upvote 0
thanhlanh
Thành viên tích cực

Tham gia 21/2/08 Bài viết 858 Được thích 1,211 siwtom đã viết: Tôi hiểu từ "treo" của bạn là: bình thường thì code thực hiện một số "thao tác" nào đó rồi hiển thị, trả về kết quả ... nhưng trong th này thì cái hiển thị, trả về kết quả không bao giờ có. Có thể từ "treo" bạn dùng với nghĩa như thế, vậy tôi không "đeo bám" về câu từ. Nhưng ta thử sửa code thành: Dim i as Long i=1 Do Until i=100 i= i + 1 ' .... Loop Vậy thì mọi người sẽ "vỗ tay" là đk đúng? Ừ thì với code đó vòng lặp sẽ kết thúc nhưng về mặt lập trình thì là thói quen không thể chấp nhận được. Như trong cuộc sống ấy, nếu bạn cẩn thận, có thói quen tốt thì ít khi mắc lỗi hơn. Ta giả sử là trong code trên bạn tính toán gì đó, bạn sử dụng thuật toán gì đó. Code chạy "ngon". Nhưng sau một thời gian bạn nghĩ ra một thuật toán còn "tởm" hơn. Bạn sửa lại code, nhưng với thuật toán mới bạn phải có i = i + 2. Bạn quên sửa lại đk. Nếu code ngắn thì cái đk kia nó "đập" vào mắt và bạn "giật mình" và sửa lại đk. Hoặc có "đậ" nhing nhiều người không "nhìn" thấy và quên bẵng đi. Còn nếu code dài và cái đk kia nó không "đập" vào mắt thì có khi bạn quên luôn. Thế là vòng lặp chạy không bao giờ ngừng. Về lập trình nếu bạn muốn vòng lặp chỉ thực hiện cho những giá trị vd. < a thì không bao gờ được viết đk là Do Until i = a Lúc đó luôn phải đổi thành Do Until i >= a. Không bao giờ trong Do (...) ... Loop được có đk ĐÚNG bằng một gá trị nào đó. Hoặc i >= a hoặc i <= a. .... Nhấp chuột vào đây để mở rộng...Mình chỉ ví dụ cho vodoi2x thôi, chớ ai lại đi đặt điều kiện kiểu vậy, mà sao bị chỉ trích nhiều quá, chán!. Nhưng có lẽ mình dùng khái niệm treo máy chưa chính xác (máy để dùng chớ ngu gì treo lên cho bụi bám). Khái niệm này thực ra chắc cũng chưa ai định nghĩa, vì vậy việc code chạy không bao giờ thỏa điều kiện cũng có thể gọi là treo máy (ít nhất là đối với tớ), hi hi Lần chỉnh sửa cuối: 14/3/12 Upvote 0
ptm0412
Bad Excel Member
Thành viên BQT Administrator Tham gia 4/11/07 Bài viết 14,810 Được thích 37,517 Donate (Momo)
Giới tính Nam Nghề nghiệp Consultant vodoi2x đã viết: ui, thế này thì oan cho thầy quá, nặng lời thật, vì chắc là thầy ít thời gian nên gõ loạn lên thế, chứ lên lớp phong cách phải khác ah, Nhấp chuột vào đây để mở rộng...Câu này tôi không nói riêng ai, và tôi cũng đang thực hành: Tay tôi có vài ngón bị yếu và hơi run, bàn phím thì mờ chữ, nên khi gõ thì sai m thành n, i thành u, khoảng trắng đặt lung tung, có khi thiếu hẳn 1 ký tự. Vấn đề là trước khi nhấn nút gởi bài, tôi đọc đi đọc lại ít nhất là 2 hoặc 3 lần, sửa cho bằng hết lỗi tự mình trông thấy. Cũng có thể còn sót, nhưng ít nhất, đó là tôn trọng người đọc, là tự trọng bản thân, và là tập thói quen tốt, bỏ đi tính cẩu thả. Cẩu thả ở chỗ nào? Ở chỗ viết vội 1 bài quăng lên đó, ai đọc thì đọc, sai mà đọc rồi hiểu sai, làm sai ráng chịu, hoặc đọc thấy chữ gõ sai không hiểu cũng ráng chịu luôn. (Tôi thường có lỗi gõ "không' thành "kôhg", "tin" thành "tun", đọc trời hiểu). Bản thân không đọc lại bài của mình viết cũng là 1 dạng cẩu thả. Khi bị nhiễm tính cẩu thả thì có "phong cách" gì cũng sẽ mất hết.
Có vòng lặp While trong VBA đó là While... WEnd, và từ trước này trong tin học lập trình người ta vẫn thường gọi tắt vòng lặp với số lần không xác định - điều kiện trước là While --> từ này là đúng vài lời chia sẻ Nhấp chuột vào đây để mở rộng...Đúng là có vòng lặp While Wend, nhưng phải nói cho đầy đủ. Do Loop nói tắt là Do còn gợi được cái gì đó, chứ "vòng lặp While", ... Ngoài ra: - Phi không liệt kê trước đó, nên chắc chắn là Phi không có ý nói đến While Wend - Từ bài 1 đến giờ, theo chủ đề topic, chưa ai nói tới While Wend. nếu muốn nói đến như 1 dạng vòng lặp khác, thì phải nói cho rõ ràng, giới thiệu hẳn hoi (như bạn có giới thiệu). Upvote 0 S
siwtom
Thành viên gắn bó


Tham gia 19/3/08 Bài viết 2,127 Được thích 4,211 ndu96081631 đã viết: Thật ra những điều tôi nói về Byte, Integer, Long... không phải do tôi nghĩ ra cho vui mà đó là phát biểu từ Microsoft: http://msdn.microsoft.com/en-us/library/aa164754(v=office.10).aspx Và chuyện này cũng đã bàn nhiều trên diễn đàn rồi... cho nên cũng không đến lượt tôi hay bạn hay ai đó không tin vào điều này đâu Còn chuyện ai vì thói quen thích xài cái này (thay vì phải là cái khác) thì cứ tùy ý vậy! Đã biết rằng Long nhanh hơn Integer thì cứ thế mà xài, đâu cần phải thắc mắc "người ta" cung cấp kiểu BYTE và Integer để làm gì? Nói cho cùng thì câu hỏi này phải đi hỏi MS mới đúng Nhấp chuột vào đây để mở rộng...Tôi không cho là không nên đổi thành Long. Nhưng không phải mọi lúc mọi nơi. Tôi lập trình trong Dephi và thường viết bằng API. Nếu tôi gọi hàm API và chỗ này, chỗ này phải truyền array BYTE thì tôi không thể khai báo array Integer (integer trong Delphi là 4 bai) được. Đây không phải chuyện thích hay không. Cái ""người ta" cung cấp kiểu BYTE và Integer để làm gì" là tôi nói đến một khía cạnh, nhưng đâu phải lý do duy nhất. Tôi còn đưa vd. khác nữa. vd. tôi phải thao tác trên một array BYTE (không cần lớn hơn) rất lớn thì không lý gì tôi lại phải khai báo array Long lớn gấp 4 lần và load nó vào RAM, phung phí tài nguyên. Mà nếu RAM còn ít quá thì system cứ phải liên tục chuyển những phần tạm chưa dùng lên đĩa rồi khi dùng đến đọc từ đĩa (swap file) thì những "thao tác" thêm ấy sẽ làm giảm tốc độ đáng kể (đọc ghi trong RAM bao giờ cũng nhanh hơn đọc ghi trên đĩa cứng). Long nhanh hơn BYTE thì đúng nhưng đến một lúc nào đó thì việc thay BYTE bằng Long sẽ làm chậm hơn do phát sinh thêm một số vấn đề. Việc dùng gì cũng phải cân nhắc chứ đâu cứ một kiểu được. Lần chỉnh sửa cuối: 14/3/12 Upvote 0
SA_DQ
/(hông là gì!
Thành viên danh dự Tham gia 8/6/06 Bài viết 14,776 Được thích 23,229 Nghề nghiệp U80 Cho fép được lang man dài dòng chút: Lâu nay, vài chục ngày trong năm mình cũng được gọi là thầy; Đó là chuyện được hưởng theo xái bà Sếp nhà mình! Bỡi vậy, từ đó mình cũng tin rằng người thấy/cô đúng danh nghĩa của học sinh hay học viên nào đó cũng là thầy/cô của mình. Theo cách xưa, mình luôn tôn trọng giai tầng này trong xã hội, dù họ có thế nào chăng nữa! Trong cộng đồng chúng ta cũng vậy; Cũng có lúc làm mình điên tiết họ do sự xuống cấp không ngờ theo cách suy nghĩ cố cựu của mình; Tuy nhiên, cách góp í cho họ mình sẽ fải dùng cách khác hơn. . . . . . . . . Upvote 0Nguyễn Duy Tuân
Nghị Hách
Thành viên danh dự Tham gia 13/6/06 Bài viết 4,859 Được thích 10,349 Giới tính Nam Nghề nghiệp Giáo viên, CEO tại Bluesofts Không ngờ một chủ đề nhỏ so sánh Do..Loop và For..Next lại có nhiều người có uy tín trên GPE vào giải thích. Vấn đề tưởng như rõ ràng vậy mà đang đi lan man. Người hỏi thì không thấy trả lời đã hiểu hay chưa? Upvote 0PhanTuHuong
VBA & VB.NET for Excel & AutoCad
Thành viên danh dự Tham gia 13/6/06 Bài viết 7,238 Được thích 24,781 Phân biệt rõ nhất giữa 2 anh này là đưa ra bài toán cụ thể. Sau đó áp dụng cả 2 kiểu vòng lặp và so sánh ưu nhược điểm của chúng. Upvote 0phihndhsp
Thành viên gạo cội



Tham gia 26/12/09 Bài viết 3,363 Được thích 2,489 Giới tính Nam Nghề nghiệp Giáo Viên vodoi2x đã viết: Vậy thầy? thầy cho ví dụ cụ thể đi ạ, Chứ các thành viên nói kiểu này rối như canh hẹ lun, Túm lại FOR làm gì khi nào dùng, Do While, Loop khi nào dùng, vì nếu bản chất giống nhau thì cứ dùng đại phải không? Thầy nói treo máy vì đk là sao, nghĩa là cứ có đk là treo máy ah? Nhấp chuột vào đây để mở rộng...Dạ vô tình hôm nay có người theo dõi và thấy topic này, thật sự là tui không nhớ về các bài này viết khi nào. tui có thể giải thích đơn giản như vậy @vodoi2x. Vòng lặp For theo như kiến thức tôi biết và tôi luôn chắc chắn nó là vòng lặp đặt biệt. của Do While - Loop 2 vòng lặp này điều kiểm tra điều kiện trước khi thực hiện lệnh, nhưng For thì số vòng lặp sẽ biết trước còn Do While thì không? ví dụ cụ thể tìm số chữ số trong 1 dãy số cho trước, For sẽ không biết bao nhiêu chữ số còn do while thì cứ chia cho 10 cho tới khi nào gặp số 0. còn tại sao tui nó nó là trường hợp đặt biệt, vì tất cả các bài toán mà for làm được thì Do While sẽ làm được, còn ngược lại thì chưa chắc. còn Do Loop While cũng là vòng lặp mà không biết trước số lần lặp, nhưng Do Loop While sẽ làm trước và kiểm tra sau, chính vì vậy nó luôn luôn làm ít nhất 1 lệnh trước khi kết thúc. Chỉ có vậy thôi Upvote 0 V
VetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,788 Nghề nghiệp Thầy bói bài taphihndhsp đã viết: Dạ vô tình hôm nay có người theo dõi và thấy topic này, thật sự là tui không nhớ về các bài này viết khi nào. tui có thể giải thích đơn giản như vậy @vodoi2x. Vòng lặp For theo như kiến thức tôi biết và tôi luôn chắc chắn nó là vòng lặp đặt biệt. của Do While - Loop 2 vòng lặp này điều kiểm tra điều kiện trước khi thực hiện lệnh, nhưng For thì số vòng lặp sẽ biết trước còn Do While thì không? ví dụ cụ thể tìm số chữ số trong 1 dãy số cho trước, For sẽ không biết bao nhiêu chữ số còn do while thì cứ chia cho 10 cho tới khi nào gặp số 0. còn tại sao tui nó nó là trường hợp đặt biệt, vì tất cả các bài toán mà for làm được thì Do While sẽ làm được, còn ngược lại thì chưa chắc. còn Do Loop While cũng là vòng lặp mà không biết trước số lần lặp, nhưng Do Loop While sẽ làm trước và kiểm tra sau, chính vì vậy nó luôn luôn làm ít nhất 1 lệnh trước khi kết thúc. Chỉ có vậy thôi Nhấp chuột vào đây để mở rộng...Tôi xin phép chỉnh bài của bạn, tôi tin chắc là điều này sẽ cố lợi cho dân trong nghề giáo như bạn nếu bạn chịu khó đọc cho kỹ, list đây là tóm lượt, chi tiết sẽ cho biết sau: 1. For-Next không phải là dạng tắt của Do While-Loop 2. While-Wend là dạng cũ của vòng lặp While. Có nhiều bất tiện mafd MS cải tiến về sau bằng Do While Giải thích: 1. For-Next là căn bản ngôn ngữ lập trình. Được IBM hoàn thiện theo tiêu chuẩn FORTRAN IV (lưu ý phiên bản IV, các phiên bản trước chưa là tiêu chuẩn). Do-Loop cũng là căn bản của lập trình. Chính thức là để gói một đoạn code cần chạy lặp lại nhiều lần. Vì là code vòng lại cho nên điểm quan trọng nhất của chúng là phải có cách để dứt, không lặp nữa. Vòng lặp Do dùng cách dứt tự do, tức là đặt điều kiện gì đó để dứt (ở mệnh đề While hoặc Until). Vòng lặp For cải tiến tốc độ bằng cách xác định điều kiện với một biến điều khiển, vòng lặp sẽ dứt khi biến điều khiển này vượt quá giới hạn mà For đặt trước. (giới hạn tức là trị của biểu thức nằm ngay bên phải từ khóa TO) 1.2. Các điểm khác biệt: While test điều kiện, điều kiện này có thể là "biến điều khiển vượt giới hạn" (như For), hay bất cứ biểu thức nào có thể chio về kết quả True/False - Biến điều khiển của For có thể được thay đổi bên trong vòng lặp, nhưng giới hạn chỉ tính 1 lần, thay đổi trong vòng lặp không ảnh hưởng đến giới hạn vòng lặp GH = 5 i = 1 Do While i <= GH ... GH = 10 i = i+1 Loop ' vòng lặp sẽ chạy 10 lần GH = 5 For i = 1 To GH ... GH = 10 Next i ' vòng lăp chỉ chạy 5 lần, khi i = 6 (lớn hơn trị ban đầu của GH) thì nó dứt. Điều này là điều hết sức quan trọng mà nhiều người không biết, vì chưa hề trải qua cái vụ "biểu thức giới hạn thay đổi". Vì vậy, ta có thể kết luận rằng "trong trường hợp thông thường, hai loại vòng lặp này có thể thay thế lẫn nhau. For nhanh hơn Do nhưng nếu điều kiện thoát vòng lặp phức tạp thì Do-Loop uyển chuyển hơn For-Next" 2. While-Wend là dạng cũ. Không nên dùng nữa vì nó không hỗ trợ việc thoát vòng lặp giữa chừng qua lệnh Exit (trừ Exit Function, Exit Sub) 2.1. Do...Loop Until/While (biểu thức) bảo đảm vòng lặp chạy ít nhất 1 lần, Do While (biểu thức)...Loop thì không bảo đảm. 2.2. For Each là dạng đặc biết của For dùng để duyệt qua các phần tử của một object có thực hiện (implement) giao diện "tuần tự" (iteratable). Code này rất hiệu quả, tốt hơn duyệt bằng chỉ số. Upvote 0
ptm0412
Bad Excel Member
Thành viên BQT Administrator Tham gia 4/11/07 Bài viết 14,810 Được thích 37,517 Donate (Momo)
Giới tính Nam Nghề nghiệp Consultant VetMini đã viết: Tôi xin phép chỉnh bài của bạn, tôi tin chắc là điều này sẽ cố lợi cho dân trong nghề giáo như bạn nếu bạn chịu khó đọc cho kỹ, list đây là tóm lượt, chi tiết sẽ cho biết sau: 1. For-Next không phải là dạng tắt của Do While-Loop Nhấp chuột vào đây để mở rộng...Từ đầu đến giờ (bài 8), bạn này đã phát biểu
Và giữ nguyên quan điểm mặc dù những bài phía sau phân tích cái sai (cụ thể là bài 23)
Sau 9 năm vẫn giữ quan điểm như vậy thì tôi e là anh viết bài có thể vẫn có ích cho nhiều người khác, nhưng tốn công với bạn này, Upvote 0 V VetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,788 Nghề nghiệp Thầy bói bài taNguyễn Duy Tuân đã viết:Code của bài ấy không đúng là do thiếu kinh nghiệm viết biểu thức điều kiện. Người có kinh nghiệm chỉ khi nào điệu kiện bắt buộc phải là chính xác bằng thì mới dùng dấu "=", nếu chỉ xét giới hạn thì luôn luôn dùng "<=" hoặc ">=". Vòng lăp For-Next sử dụng cách so sánh này.Điều kiện của bạn không đúng. I = 1, sau đó tăng mỗi vòng lắm là I = I + 2 ==> I = 1 3 5 Toàn số lẻ, nên Until I = 100 không bao giờ xảy ra. Nhấp chuột vào đây để mở rộng...
ptm0412 đã viết: ... Sau 9 năm vẫn giữ quan điểm như vậy thì tôi e là anh viết bài có thể vẫn có ích cho nhiều người khác, nhưng tốn công với bạn này, Nhấp chuột vào đây để mở rộng...Nếu bạn ấy không hiểu thì cũng khó mà cải tiến. Tuy nhiên, bài #33 tôi viết là để nhắc nhở chung cho các bạn học vội mà không chịu thử lại kiến thức "học vội" ấy. Vòng lặp, cũng như đệ quy, luôn phải có một cái gì đó để kết thúc - không lặp lại nữa. - Vòng lặp For là loại vòng lặp dùng một biến (counter) để điều khiển, khi counter vượt giới hạn thì kết thúc. Vì vậy, counter có thể thay đổi nhưng giới hạn thì không. - Vòng lặp Do While/Until là loại vòng lặp dùng lô gic của biểu thức để quyết định sự kết thúc, biểu thức có thể là biến (counter) nhưng cũng có thể là con toán nào đó có thể ép kiểu thành Boolean. Until chỉ là đối nghịch của While. Điều cần lưu ý là vòng lặp Do While/Until hoàn toàn không bắt buộc phải có biến điều khiển (counter). Vì vậy, tuy bề ngoài trông vó vẻ giống một vài chỗ, nhưng bên trong, hai cấu trúc này hoạt động khác nhau. - For Each là loại đặc biệt của For, counter được hiểu ngầm là một biến enum chạy từ chỉ số đầu tiên đến chỉ số cuối cùng. Tùy theo thiết kế của cái collection ấy mà nó là 0->count-1 hay 1->count. (Vì biến này hiểu ngẩm cho nên bên trong block code, không có cách nào truy cập nó) Upvote 0
HeSanbi
Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia 24/2/13 Bài viết 2,829 Được thích 4,610 Giới tính Nam (Trợ giúp trả lời bài viết đã cũ) Vòng lặp For và Do While/Until hoặc Loop While/Until không có gì liên quan đến nhau. Vì:- Vòng lặp For trả về giá trị bộ đếm qua từng vòng lặp, cho đến khi vượt qua giá trị cuối đã đặt. Các câu lệnh trong vòng lặp dựa vào giá trị bộ đếm đó để tính toán.
- Vòng lặp Do/Loop While/Until chỉ là vòng lặp xét điều kiện đủ để lặp và thoát vòng lặp.
- For...To...Step...Next: Là vòng lặp xử lý bộ đếm (Thêm bớt giá trị), bước và lệnh thoát Exit For. Xác định điều kiện thoát khi đã đếm xong giá trị đã thiết lặp.
- For Each...In.....Next: Là vòng lặp truy cập bộ nhớ tuần tự Array, ArrayList, Collection, có lệnh thoát Exit For. Xác định điều kiện thoát khi đã truy cập xong vùng nhớ cuối cùng (Phần tử cuối cùng).
- Do.......................Loop: Là vòng lặp vô tận, thoát với lệnh Exit Do.
- Do While..........Loop: Là vòng lặp xác định trước điều kiện thoát, lặp trong khi điều kiện đúng, có lệnh thoát Exit Do.
- Do Until............Loop: Là vòng lặp xác định trước điều kiện thoát, cho đến khi điều kiện đúng sẽ thoát, có lệnh thoát Exit Do.
- Do .........Loop While: Là vòng lặp xác định điều kiện thoát sau, lặp trong khi điều kiện đúng, có lệnh thoát Exit Do.
- Do ...........Loop Until: Là vòng lặp xác định điều kiện thoát sau, cho đến khi điều kiện đúng sẽ thoát, có lệnh thoát Exit Do.
- While................Wend: Là vòng lặp xác định điều kiện thoát, lặp trong khi điều kiện đúng, không có lệnh thoát.
Bài viết mới nhất
- PhanTuHuong
- Chủ nhật lúc 23:46
- Thư giãn
- hoangvucntt
- Hôm nay lúc 10:16
- Cấu trúc dữ liệu Excel và việc Xử lý dữ liệu
- levovantoan
- Hôm qua, lúc 23:25
- Giải thích, gỡ rối, xử lý lỗi công thức
- Na7979
- Hôm nay lúc 11:40
- Lọc và sắp xếp dữ liệu
- dieppk.nb92
- Chủ nhật lúc 01:22
- Hàm và công thức Excel
- huuthang_bd
- 30/12/13
- Xây dựng ứng dụng.
- kaoehtkid
- Thứ hai lúc 19:04
- Những vấn đề chung
- HeSanbi
- 13/12/25
- Xử lý chuỗi ký tự
- Nguyenkhang2404
- 24/7/25
- Hàm và công thức Excel
- tiny1010
- 16/3/10
- Cấu trúc dữ liệu Excel và việc Xử lý dữ liệu
- Na7979
- Hôm qua, lúc 14:01
- Google Sheets
- Question Question
- duongnhuxuyen
- 12/12/25
- Lập Trình với Excel
- phamdinh.huy.aladin@gmail
- Thứ hai lúc 10:18
- Hàm và công thức Excel
- Mr_Siro
- Thứ tư lúc 10:57
- Giải thích, gỡ rối, xử lý lỗi công thức
- ptthuongtn
- Thứ tư lúc 15:15
- Hàm và công thức Excel
- skygatevn
- Thứ tư lúc 11:59
- Hướng dẫn sử dụng các hàm trong Excel
- PhanTuHuong
- 10/12/25
- Câu lạc bộ hoạt động xã hội
- GPE-Trợ Lý
- 24/11/25
- Câu lạc bộ hoạt động xã hội
- Đã giải quyết
- HeSanbi
- 30/5/20
- Lập Trình với Excel
- Question Question
- ongke0711
- 6/10/24
- Lập Trình với Excel
Thành viên có số lượng bài viết cao nhất tháng
- Maika8008 38
- thanthanhan 23
- dungpham01 19
- ongke0711 19
- ptm0412 17
- eagle12 16
- nguyenanhtruong2409 16
- Phan Thế Hiệp 16
- HUONGHCKT 12
- vic_it 11
- nhhnam 10
- pycckuu410 10
- dieppk.nb92 10
- Vũ Hải Sơn 9
- HeSanbi 9
- Gà Con yêu VBA 8
- bsbnhh 7
- duongnhuxuyen 7
- Hana2610 6
- kaoehtkid 6
Thành viên có điểm tương tác cao nhất tháng
- Phan Thế Hiệp 76
- Maika8008 32
- thanthanhan 20
- ongke0711 17
- ptm0412 16
- HeSanbi 15
- dungpham01 11
- HUONGHCKT 9
- eagle12 9
- Cúc Hr 8
- dieppk.nb92 6
- Mr.hieudoanxd 5
- befaint 5
- pycckuu410 5
- SA_DQ 5
- Hoàng Tuấn 868 4
- Phuocam 4
- nguyenanhtruong2409 4
- nhhnam 2
- Gà Con yêu VBA 2
Thời gian đếm ngược.
000 Ngày 00 Giờ 00 phút 00 giây Thân mời tham dự sự kiện sinh nhật GPE 2025- Trang chủ
- Diễn đàn
- Lập Trình với Excel
- Website này sử dụng cookies. Tiếp tục sử dụng trang này, đồng nghĩa với việc bạn chấp nhận website sử dụng cookies. Chấp nhận Tìm hiểu thêm.…
Từ khóa » Câu Lệnh While Trong Vba
-
Vòng Lặp Do-While Trong VBA - VietTuts
-
Vòng Lặp While-Wend Trong VBA - VietTuts
-
Hướng Dẫn Cách Viết Vòng Lặp Do Loop Trong VBA
-
Các Vòng Lặp Trong VBA: Vòng Lặp For Và Do While
-
Hướng Dẫn Viết Cấu Trúc Do...Loop Trong Vòng Lặp VBA Excel
-
Bài 10 : Vòng Lặp -VBA Excel
-
Cách Kết Thúc Vòng Lặp Do While Trong VBA - HelpEx
-
Bài 15: Vòng Lặp DO WHILE UNTIL Trong VBA - YouTube
-
Thoát Một Vòng Lặp While Trong VBS / VBA - Wake-up
-
VBA Macro - Bài 07 - Các Câu Lệnh Lặp - Lớp Học Vi Tính
-
Excel VBA: Các Mệnh đề điều Khiển - Viblo
-
Bài 8 - Vòng Lặp For, While, Do While Trong C - TƯ VẤN SINH VIÊN HCM
-
Vòng Lặp FOR Trong VBA Và Các Ví Dụ Cách Sử Dụng
-
Thực Hành Với Visual Basic: Cấu Trúc Lặp Do ... Loop While
Điều kiện của bạn không đúng. I = 1, sau đó tăng mỗi vòng lắm là I = I + 2 ==> I = 1 3 5 Toàn số lẻ, nên Until I = 100 không bao giờ xảy ra. Nhấp chuột vào đây để mở rộng...