Da Chào Thầy trong Chương 11: Vòng Lặp có bài tập bên dưới, nhưng em chỉ thực hiện được yêu cầu dùng vòng lặp For, còn vòng lặp For Each thì kết quả lại ra sai, nhờ Thầy xem giúp em đoạn code bị sai chỗ nào ạ
Sub ForEach_Next()
'Gan bien doi tuong
Dim MucGia, SoLuong As Range
Set MucGia = Sheets(1).Range("A9:A13")
Set SoLuong = Sheets(1).Range("B9:B13")
'Gan bien phan tu
Dim a, b As Object
For Each a In MucGia
For Each b In SoLuong
'Tinh Doanh Thu
Dim DoanhThu As Long
DoanhThu = a.Value * b.Value
'Tinh Chi Phi
Dim ChiPhi As Long
ChiPhi = b.Value * Range("D2").Value + Range("D1").Value
'Tinh Loi Nhuan
Dim LoiNhuan As Long
LoiNhuan = DoanhThu - ChiPhi
a.Offset(0, 2).Value = LoiNhuan
Next a, b
MsgBox "Hoan Thanh"
End Sub
Chào bạn bạn xem lại vòng lặp foreach trong tài liệu vba có cách viết bạn nhé.
code mẫu khi sử dụng for each
Sub
Thuong_BP_KinhDoanh()
Dim
BoPhan as
Range
Set BoPhan
=
Worksheets("10").Range("F16:F22")
Dim i as Range
For Each i
in BoPhan
If
i.Value
= Range("I16").Value Then
i.Offset(0,
1).Value = Range("J16").Value
End If
Next
i
End
Sub
Da bài tập Thưởng Kinh doanh này em đã hiểu rõ và làm được rồi ạ. Nhưng đó chỉ có 1 phần tử i thay đổi trong đối tượng BoPhan thôi ạ, còn bài tập trong chương bài giảng thì có đến 2 đối tượng MucGia va Soluong thay đổi nên nhờ Thầy sửa giúp em code For each cho bài tập này ạ. Em cám ơn
vòng lặp bạn dùng ở trên chưa đúng. Ở đoạn:
For Each a In MucGia
For Each b In SoLuong
không dùng đồng thời 2 lệnh vòng lặp như thế này. Cách này chỉ dùng với vòng lặp lồng nhau thôi.
Ở đây bạn chỉ cần 1 vòng lặp, trong đó b sẽ là a.offset(0,1) chứ không cần tới vòng lặp cho b
Do cách viết 2 lệnh vòng lặp ở trên, mà ở dưới bạn lại chỉ có 1 dòng Next a, b nên không đúng cú pháp. Nếu là vòng lặp lồng ghép thì phải 1 dòng next a, 1 dòng next b riêng
Da em đã làm được rồi, cám ơn Thầy và Trung tâm đã hướng dẫn ạ