Mình đã sửa lại bài, nhấn vào CommandButton mới thi hành.
Private Sub CommandButton1_Click()
Dim i%, j%, n%: i = 1: j = 4
1.For n = 5 To 49
2.Range("B" & n) = "" : Range("C" & n) ="" : Range("D" & n) = ""
3.Next
Code từ dòng 1 đến dòng 3: Xoá dữ liệu cột A từ dòng 5 đến 49 trước khi điền dữ liệu mới để tránh thừa dữ liệu.
4.Do: i = i + 1
5.If Sheets("DSHS").Range("E" & i) > 0 And Sheets("DSHS").Range("D" & i) = Range("E3") Then
Dòng 5: Kiểm tra xem Sheets("DSHS") ở cột E từ dòng 2 đến hết danh sách xem có học sinh nào thuộc lớp trùng với tên lớp đã chọn không và học sinh này đã đóng học phí hay chưa.
6.j = j + 1
7.Range("B" & j) = Sheets("DSHS").Range("B" & i)
8.Range("C" & j) = Sheets("DSHS").Range("C" & i)
9.Range("D" & j) = Sheets("DSHS").Range("E" & i)
10.End If
Từ dòng 7 đến dòng 9: Điền dữ liệu tương ứng vào các cột B, C, E
11.Loop Until Trim(Sheets("DSHS").Range("D" & i)) = Empty
Dòng 11: Kết thúc việc thực hiện khi Sheets("DSHS") kết thúc không còn lớp nào nữa.
End Sub
Đơn giản không, code rất gọn, nhưng hiệu quả.
View attachment 88932