- Giải thích
CHƯƠNG TRÌNH
11.4.1.1 Vòng lặp For – Next (lặp theo biến đếm)
Thực hiện lặp một khối lệnh theo một biến đếm với số lần lặp xác định, ví dụ như khi ta cần tính tổng của các số nằm giữa hai số nào đó. Các từ khóa: For, To, Step, Next
Cú pháp:
For <biến_đếm> = <Bắt_Đầu> To <Kết_Thúc> [Step <bước_nhảy>] [Khối_lệnh]
Next [<biến_đếm>]
Cấu trúc lặp này thực hiện theo trình tự sau: - Gán <Biến_đếm> bằng giá trị <Bắt_đầu> - So sánh <Biến_đếm> với giá trị <Kết_thúc>:
+ Nếu nhỏ hơn hoặc bằng: thực hiện các lệnh bên trong [Khối_lệnh] và tự động cộng vào <Biến_đếm> một giá trị bằng <bước_nhảy> nếu có từ khóa Step, còn không thì cộng thêm 1 và quay lại bước so sánh <Biến_đếm> với giá trị
<Kết_thúc>.
+ Nếu lớn hơn: kết thúc khối lệnh lặp.
Ghi chú: nếu trong cấu trúc lặp không đưa vào Step thì mặt định mỗi lần lặp biến đếm sẽ tăng lên 1 đơn vị.
Ví dụ 1: Một cấu trúc điển hình của For .. Next
sum = 0
For i = 1 To 10 sum = sum + i Next i
Trong ví dụ này, vòng lặp sẽ lặp lại 10 lần, kết quả của biến sum được cộng dồn sau mỗi lần lặp là: 55
Ví dụ 2: tính tổng của các số từ 1 đến 10:
Dim i, tong tong = 0
For i = 1 To n
tong = tong + i Next i
CongDay = "Tong la: " & tong
End Function
Câu lệnh Exit For
Exit For để thoát khỏi vòng lặp nếu thoả một điều kiện nào đó đã được ấn định trước.
Câu lệnh Exit For thường được lồng vào cấu trúc If..Then bên trong vòng lặp. Khi
chương trình đang chạy và gặp phải câu lệnh Exit For, thì điều khiển sẽ lập tức chuyển ra khỏi vòng lặp For.. Next, để đi đến các câu lệnh tiếp tiếp theo bên dưới Next.
Ví dụ 3:
Dim i As Integer Dim Tong As Integer
Tong = 0
For i = 10 To 0 Step -2 Tong = Tong + i
If Tong > 20 Then Exit For Next
Giải thích: mỗi lần lặp sẽ kiểm tra biến Tong, nếu biến Tong nhỏ hơn hay bằng 20 thì vòng lặp vẫn tiếp tục lặp, ngược lại sẽ gặp câu lệnh Exit For thoát khỏi vòng lặp.
Ví dụ 4: Viết hàm tính tổng các số từ 0 đến n, với n là giá trị số nguyên truyền vào. Yêu cầu chỉ
tính tổng cho đến khi nào tổng = 36 thì dừng lặp và cho biết thêm là kết quả của biến tong bao gồm bao nhiêu số nguyên công lại.
Public Function CongDay(n As Integer) Dim i, tong, dem
tong = 0
For i = 0 To n
tong = tong + i ‘ cộng dồn vào biến tong
dem = dem + 1 ‘ đếm số lượng số đã được cộng vào biến tổngg if tong = 36 Then Exit For ‘ nếu tổng = 36 thì thoát vòng lặp
CongDay= “Tong:” & tong & “cua” & dem & “so” ‘trả kết quả về cho hàm CongDay End Function
11.4.1.2Lặp For Each (lặp trong một tập hợp)
Trong trường hợp muốn thực hiện các khối lệnh lặp theo một biến đếm chạy trong một tập hợp mà tập hợp đó không thể xác định được số lượng hoặc bước nhảy thì người dùng có thể dùng vòng lặp trong tập hợp (For Each … Next). Tập hợp ở đây có thể là một tập đối tượng dạng Collection hoặc một mảng. Các từ khoá sử dụng For, Each, In, Next
Cú pháp:
For Each <biến_chạy> In <tập_hợp> [Khối_lệnh]
Next
Giải thích: <biến_chạy> sẽ nhận các giá trị từ phần tử đầu tiên đến phần tử cuối cùng trong <tập_hợp>. Ứng với mỗi giá trị của <biến_chạy>, khối lệnh được thực hiện một lần.
Chú ý: Kiểu của <biến_chạy> trong vòng lặp (For Each … Next) sẽ phụ thuộc vào kiểu
của <tập_hợp> mà nó duyệt qua là kiểu mảng hay kiểu tập đối tượng. Đối với <tập_hợp> là tập đối tượng thì kiểu dữ liệu của <biến_chạy> có thể là Variant,
hoặc đối tượng cùng kiểu với tập đối tượng đó. Đối với <tập_hợp> là mảng thì kiểu dữ liệu của <biến_chạy> chỉ có thể là Variant.
Ví dụ về cấu trúc lặp For Each: Tạo hàm cộng dãy số, hay một vùng giá trị liên tiếp nhau trong Excel (gần giống hàm sum):
Hàm vừa tạo trên được sử dụng trong Excel với kết quả như sau:
11.4.2Lặp không xác định
Ngược lại với dạng lặp For, vòng lặp Do … Loop thực hiện một khối lệnh với số lần lặp không định trước, theo một biểu thức điều kiện. (biểu thức điều kiện có giá trị Boolean: True hoặc False). Có các kiểu cú pháp như sau:
11.4.2.1Lặp trong khi điều kiện là TRUE
Do While <điều_kiện> [Khối_lệnh]
Trong dạng này, vòng lặp được tiếp tục thực hiện khi nào điều kiện được thỏa (kiểm tra rồi mới lặp). Ví dụ: sum = 0 count = 0 Do While count <= 10 sum = sum + count count = count + 1 Loop
Nếu muốn vòng lặp luôn có ít nhất một lần thi hành khối lệnh sử dụng cú pháp: Do
[Khối_lệnh] Loop While <điều kiện>
Trong dạng này vòng lặp được thực hiện khi nào điều kiện thỏa (lặp 1 lần sau đó mới kiểm tra).
Ví dụ:
sum = 0 count = 0 Do
sum = sum + count count = count + 1 Loop While count <= 10
11.4.2.2Lặp cho đến khi điều kiện là TRUE
Do Until <điều_kiện> [Khối_lệnh] Loop
Trong dạng này, vòng lặp được tiếp tục thực hiện khi nào điều kiện vẫn chưa thỏa (not true). Vòng lặp ngưng thự hiện khi điều kiện thỏa (kiểm tra rồi mới lặp).
Ví dụ:
count = 0
Do Until count > 10 sum = sum + count count = count + 1 Loop
Nếu muốn vòng lặp luôn có ít nhất một lần thi hành khối lệnh sử dụng cú pháp: Do
[Khối lệnh] Loop Until <điều_kiện>
Trong dạng này, Vòng lặp được tiếp tục thực hiện khi nào điều kiện vẫn chưa thỏa (not true).
Vòng lặp ngưng thực hiện khi điều kiện thỏa (lặp 1 lần sau đó mới kiểm tra).
Ví dụ:
sum = 0 count = 0 Do
sum = sum + count count = count + 1 Loop Until count > 10 Tóm tắt:
Qua chương này chúng ta đã nghiên cứu và biết cách sử dụng ở mức độ nâng cao hơn các tính năng trong lập trình VBA trên Excel và vận dụng được kiến thức về các cấu trúc điều khiển của ngôn ngữ lập trình VB vào việc xây dựng các hàm mới nhằm vào mục tiêu đơn giản hóa các công việc phức tạp mà trước giờ chúng ta vẫn hay làm và mất khá nhiều thời gian.
BÀI TẬP
1. Cấu trúc rẽ nhánh là gì? Cấu trúc rã nhánh khác cấu trúc tuyển (chọn) chổ nào? 2. Kể tên 6 toán tử quan hệ được dùng trong VBA và chức năng của từng toán tử
4. Tóm tắc các nguyên tắc áp dụng cho cấu trúc For … Next
5. Hãy viết các câu lệnh If – Then hoặc If – Then – Else cho các tình huống sau đây: a. Kiểm tra trị của biến sum. Nếu sum vượt quá 100 thì điều chỉnh lại cho đúng 100 b. Kiểm tra giá trị của biến sum. Nếu trị của biến sum nhỏ hơn hoặc bằng 100, thì
cộng thêm trị của biến v vào sum. Nếu sum vượt quá 100 thì hãy điều chỉnh biến sum lại cho đúng 100 rồi gán trị 0 vào cho biến v.
6. Nhập vào một số và cho biết số này là âm hay dương 7. Nhập vào một số cho biết số này chẳn hay lẻ
8. Nhập vào 2 số in ra số lớn hơn 9. Nhập vào 3 số và in ra số lớn nhất 10.Nhập vào 3 số và in ra số nhỏ nhất 11. Giải phương trình bậc nhất
12.Giải phương trình bậc 2
13.Tính chu vi và diện tích của hình tam giác (yêu cầu kiểm tra tất cả các điều kiện) 14.Nhập vào một ngày tháng năm vào cho biết tháng đó có bao nhiêu ngày? Biết :
a. Tháng 1,3,5,7,8,10,12 có 31 ngày b. Tháng 4 6 9 11 có 30
c. Tháng 2 có 28 ngày riêng năm nhuần thì có 29 ngày 15.Viết hàm tách họ và tên trong Excel
16.Viết hàm đếm số nguyên âm và phụ âm trong một chuỗi (tiếng anh) 17.Viết hàm cộng một vùng giá trị số trong Excel
18.Viết hàm đảo ngược một chuỗi ký tự nhập vào 19.Viết hàm cộng một vùng giá trị số trong Excel
20.Viết hàm đếm trong chuỗi ký tự nhập vào có bao nhiêu số, bao nhiêu khoảng trắng, bao nhiêu ký tự chữ, bao nhiêu ký tự đặt biệt (ký tự đặt biệt là ký tự không phải số, chữ, khoảng trắng).
21.Viết hàm tính tổng số nguyên n nhập vào vào và 5 số kế tiếp của n với các cấu trúc sau: a. Dùng cấu trúc For – Next
c. Dùng cấu trúc Do Until – Loop d. Dùng cấu trúc Do – Loop While e. Dùng cấu trúc Do – Loop Until
22.Viết hàm làm tròn theo cách làm tròn điểm số của sinh viên
23.Viết hàm tính trung cộng của tất cá cá số chia hết cho 2 trong dãy số từ 1 -> n. n là giá trị nhập vào
24.Viết hàm thực hiện đổi số ở hệ thập phân sang số hệ nhị phân
25.Viết hàm tính tổng của các số chẵn, tổng của các số lẻ trong dãy số từ 1 đến n, n là giá trị nhập vào.
TÀI LIỆU THAM KHẢO
1. Tài liệu tham khảo môn Tin học đại cương, Khoa Tin học quản lý, năm 2010.
2. GVC, ThS. Tạ Minh Châu, Giáo trình Tin học đại cương dành cho khối ngành kinh tế, Khoa Kinh tế - ĐHQG HCM.
3. Phan Tự Hướng, Lập trình VBA trong Excel, Nhà xuất bản Thống kê.
12. PHỤ LỤC