Có Phải Do While...Loop Chỉ Là 1 Dạng Viết Tắt Của For.. Next?

Giải Pháp Excel
  • 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 New 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
  • Facebook
  • Đóng góp
Đăng nhập Đăng Ký Có gì mới? Tìm kiếm

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 Bởi: Tìm kiếm Tìm nâng cao…
  • Tìm bài viết mới
  • Tìm theo chuyên mục
Menu Đăng nhập Đăng Ký Install the app Install How to install the app on iOS

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
You are using an out of date browser. It may not display this or other websites correctly.You should upgrade or use an alternative browser. Có phải Do While...Loop chỉ là 1 dạng viết tắt của For.. Next? (1 người xem)
  • Thread starter Thread starter LinDan
  • Ngày gửi Ngày gửi 13/3/12
Liên hệ QC

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

Đang trực tuyến: 2 (Thành viên: 0, Khách: 2) LinDan

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

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 Bluesofts
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...
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

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

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 0 nmhung49

nmhung49

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
Upvote 0 ndu96081631

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

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 0 phihndhsp

phihndhsp

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,660
ndu96081631 đã 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,660
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...
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

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,660
ndu96081631 đã 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

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,660
597335 đã 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,660
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...
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

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 0 Nguyễn Duy Tuâ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 Bluesofts
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...
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

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

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) Donate 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

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) Donate 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

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) Donate 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

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,660
ptm0412 đã 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

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

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) Donate 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

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 0 Nguyễn Duy Tuâ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 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 0 PhanTuHuong

PhanTuHuong

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 0 phihndhsp

phihndhsp

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 ta
phihndhsp đã 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

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) Donate 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 1697000866473.png 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) 1697000993301.png 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 ta
Nguyễn Duy Tuân đã viết: 1697007369059.png Đ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...
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.
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

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.
----------------------------------------------------------- Lý thuyết căn bản về vòng lặp trong VBA:
  1. 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.
  2. 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).
  3. Do.......................Loop: Là vòng lặp vô tận, thoát với lệnh Exit Do.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
Lần chỉnh sửa cuối: 11/10/23 Upvote 0 Bạn phải đăng nhập hoặc đăng ký để trả lời bài viết tại đây.

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

PhanTuHuong Nếu diễn đàn GPE đóng cửa? (4 người xem)
    • Thích
    • Yêu thích
  • PhanTuHuong
  • Chủ nhật lúc 23:46
  • Thư giãn
Trả lời 20 Đọc 694 18 phút trước SA_DQ SA_DQ H hướng dẫn xóa dòng, cột file excel (3 người xem)
  • hoangvucntt
  • Hôm nay lúc 10:16
  • Cấu trúc dữ liệu Excel và việc Xử lý dữ liệu
Trả lời 1 Đọc 37 Hôm nay lúc 17:39 ptm0412 ptm0412 L nhờ hoàn thiện file dò xổ số (2 người xem)
  • levovantoan
  • Hôm qua, lúc 23:25
  • Giải thích, gỡ rối, xử lý lỗi công thức
Trả lời 4 Đọc 124 Hôm nay lúc 12:01 Phan Thế Hiệp Phan Thế Hiệp N Hướng dẫn công thức Query kết hợp Arrayfomula bị lỗi
  • Na7979
  • Hôm nay lúc 11:40
  • Lọc và sắp xếp dữ liệu
Trả lời 0 Đọc 30 Hôm nay lúc 11:40 Na7979 N D Xin giúp.......Kết hợp countifs và Sumproduct để đếm dữ liệu và tính số lượng tổng không trùng lặp với nhiều điều kiện (3 người xem)
  • dieppk.nb92
  • Chủ nhật lúc 01:22
  • Hàm và công thức Excel
Trả lời 20 Đọc 521 Hôm nay lúc 10:56 Phan Thế Hiệp Phan Thế Hiệp huuthang_bd Cùng xây dựng file Gia Phả (2 người xem)
    • Thích
  • huuthang_bd
  • 30/12/13
  • Xây dựng ứng dụng.
Trả lời 44 Đọc 21K Hôm nay lúc 10:19 Maika8008 Maika8008 K Các nút Buttom, Combobox, Textbox bị thay đổi kích thước ... (3 người xem)
  • kaoehtkid
  • Thứ hai lúc 19:04
  • Những vấn đề chung
Trả lời 13 Đọc 295 Hôm qua, lúc 19:07 ongke0711 ongke0711 HeSanbi Thuật ngữ "Đối chiếu Unicode" quan trọng trong việc xử lý chuỗi ký tự (2 người xem)
    • Thích
  • HeSanbi
  • 13/12/25
  • Xử lý chuỗi ký tự
Trả lời 2 Đọc 240 Hôm qua, lúc 17:38 HeSanbi HeSanbi Nguyenkhang2404 Tính định mức sản phẩm (2 người xem)
    • Chấp nhận
  • Nguyenkhang2404
  • 24/7/25
  • Hàm và công thức Excel
Trả lời 11 Đọc 929 Hôm qua, lúc 14:27 nguyenanhtruong2409 N T Lọc dự liệu với hai điều kiện (2 người xem)
  • tiny1010
  • 16/3/10
  • Cấu trúc dữ liệu Excel và việc Xử lý dữ liệu
Trả lời 18 Đọc 7K Hôm qua, lúc 14:11 nguyenanhtruong2409 N N Tổng hợp 2 sheet khác nhau (có 1 cột dữ liệu trùng) trong goole sheet (2 người xem)
  • Na7979
  • Hôm qua, lúc 14:01
  • Google Sheets
Trả lời 0 Đọc 26 Hôm qua, lúc 14:01 Na7979 N D
  • Question Question
Tách dòng tự động theo điều kiện bằng VBA (2 người xem)
    • Cười
  • duongnhuxuyen
  • 12/12/25
  • Lập Trình với Excel
Trả lời 17 Đọc 426 Hôm qua, lúc 12:04 ptm0412 ptm0412 P Lỗi hàm VBA phải add-in sau mỗi lần mở file (2 người xem)
  • phamdinh.huy.aladin@gmail
  • Thứ hai lúc 10:18
  • Hàm và công thức Excel
Trả lời 7 Đọc 236 Hôm qua, lúc 08:11 minhnghia123 M M Sai lệch vùng dữ liệu khi tạo Name Range bằng VBA (2 người xem)
    • Buồn
  • Mr_Siro
  • Thứ tư lúc 10:57
  • Giải thích, gỡ rối, xử lý lỗi công thức
Trả lời 5 Đọc 160 Thứ năm lúc 13:23 Mr_Siro M P Tìm giá trị tồn kho đầu ngày (2 người xem)
  • ptthuongtn
  • Thứ tư lúc 15:15
  • Hàm và công thức Excel
Trả lời 3 Đọc 161 Thứ năm lúc 11:22 Duy Tùng 9x Duy Tùng 9x skygatevn Xin giúp đỡ về việc áp dụng hàm phù hợp để phân tách dữ liệu (3 người xem)
  • skygatevn
  • Thứ tư lúc 11:59
  • Hướng dẫn sử dụng các hàm trong Excel
Trả lời 3 Đọc 122 Thứ tư lúc 13:52 skygatevn skygatevn PhanTuHuong Bán sách Excel nâng cao để ủng hộ đồng bào bão lũ năm 2025! (2 người xem)
    • Yêu thích
  • PhanTuHuong
  • 10/12/25
  • Câu lạc bộ hoạt động xã hội
Trả lời 5 Đọc 345 Thứ tư lúc 12:43 GPE-Trợ Lý GPE-Trợ Lý GPE-Trợ Lý CHUNG TAY HƯỚNG VỀ MIỀN TRUNG NĂM 2025 (2 người xem)
    • Thích
  • GPE-Trợ Lý
  • 24/11/25
  • Câu lạc bộ hoạt động xã hội
Trả lời 12 Đọc 940 Thứ tư lúc 07:38 PhanTuHuong PhanTuHuong HeSanbi
  • Đã giải quyết
WeatherXL - Ứng dụng lấy dữ liệu Thời tiết siêu nhanh (***Đang phát triển lại) (2 người xem)
    • Thích
    • Yêu thích
  • HeSanbi
  • 30/5/20
  • Lập Trình với Excel
Trả lời 92 Đọc 27K Thứ ba lúc 19:57 Maika8008 Maika8008 ongke0711
  • Question Question
Tải hóa đơn điện tử (https://hoadondientu.gdt.gov.vn/) Excel Vba (4 người xem)
    • Thích
    • Yêu thích
    • Cảm ơn
  • ongke0711
  • 6/10/24
  • Lập Trình với Excel
4 5 6 Trả lời 580 Đọc 83K Thứ ba lúc 08:39 pycckuu410 pycckuu410 Xem thêm… Chia sẻ: Facebook X Bluesky LinkedIn Reddit Pinterest Tumblr WhatsApp Email Chia sẻ Link

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.…
Back Top Bottom

Từ khóa » Câu Lệnh While Trong Vba