Sắp xếp điểm thi

Liên hệ QC
Ok. File bạn đưa lên rồi. Nhưng tiêu chí gì để đánh giá học lực. Điểm thế nào là giỏi, khá, trung bình chứ
 
Cảm ơn bạn đã quan tâm :
Học lực giỏi : Điểm TB>= 8.5 đồng thời không được môn nào dưới điểm 7.0; Nếu không thỏa mãn điều kiện 2 thì loại khá
Học lực khá : Điểm TB>= 6.5 đồng thời không được môn nào dưới điểm 5.5; Nếu không thỏa mãn điều kiện 2 thì loại trung bình
Học lực trung bình : Điểm TB>= 5.0 đồng thời không được môn nào dưới điểm 4. Nếu không thỏa mãn điều kiện 2 thì loại yếu
Học lực yếu : các trường hợp còn lại.
 
Cảm ơn bạn đã quan tâm :
Học lực giỏi : Điểm TB>= 8.5 đồng thời không được môn nào dưới điểm 7.0; Nếu không thỏa mãn điều kiện 2 thì loại khá
Học lực khá : Điểm TB>= 6.5 đồng thời không được môn nào dưới điểm 5.5; Nếu không thỏa mãn điều kiện 2 thì loại trung bình
Học lực trung bình : Điểm TB>= 5.0 đồng thời không được môn nào dưới điểm 4. Nếu không thỏa mãn điều kiện 2 thì loại yếu
Học lực yếu : các trường hợp còn lại.

Ngày trước học ABC thì được dạy theo hàm if And lồng vào nhau nhiều quá, giờ thêm hàm min vào ngoắn hơn chút
=IF(AND(E2>=8,5;MIN(B2:D2)>=7);"Giỏi";IF(AND(E2>=6,5;MIN(B2:D2)>=5,5);"Khá";IF(AND(E2>=5;MIN(B2:D2)>=4);"Trung bình";"yếu")))
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn bạn đã trả lời nhưng mình định lập hàm VBA mà mình viết chưa được mong mọi người vào giúp
Code mình đã viết mà không biết còn thiếu chỗ nào mà nó không chạy.
 
Cảm ơn bạn đã quan tâm :
Học lực giỏi : Điểm TB>= 8.5 đồng thời không được môn nào dưới điểm 7.0; Nếu không thỏa mãn điều kiện 2 thì loại khá
Học lực khá : Điểm TB>= 6.5 đồng thời không được môn nào dưới điểm 5.5; Nếu không thỏa mãn điều kiện 2 thì loại trung bình
Học lực trung bình : Điểm TB>= 5.0 đồng thời không được môn nào dưới điểm 4. Nếu không thỏa mãn điều kiện 2 thì loại yếu
Học lực yếu : các trường hợp còn lại.

Cho tôi hỏi lại một chút: Nếu điểm trung bình 8.5 nhưng có 1 môn 3.5 điểm thì xếp loại khá hay loại yếu?
 
Cứ theo điều kiện 2 chúng ta sẽ xếp loại
Cảm ơn bạn quan tâm.
 
Bạn thử hàm này
PHP:
Function HocLuc(DiemTB As Double, DiemMon) As String
Dim Mon, Diem
Gioi:
    If DiemTB >= 8.5 Then
        For Each Mon In DiemMon
            If Mon < 7 Then
                GoTo Kha
            End If
        Next
            HocLuc = "Gioi"
            Exit Function
    End If
Kha:
    If DiemTB >= 6.5 Then
        For Each Mon In DiemMon
            If Mon < 5.5 Then
                GoTo TB:
            End If
        Next
            HocLuc = "Kha"
            Exit Function
    End If
TB:
    If DiemTB >= 5 Then
        For Each Mon In DiemMon
            If Mon < 4 Then
                GoTo Yeu:
            End If
        Next
            HocLuc = "TB"
            Exit Function
    End If
Yeu:
    HocLuc = "Yeu"
End Function
Công thức trên bản tính
Mã:
=HocLuc(E2,B2:D2)
 
Cảm ơn bạn huuthang_bd minh có copy code của bạn về rồi mà không chạy.
Mình đang tìm hiểu VBA trong quyển "Lập trình VBA - Tác giả Phan Tụ Hướng "
mà đến chỗ VD này không chạy được mặc dù mình đã viết Code như của tác giả
Bạn có thể Attach file đó lên được không?
Xin cảm ơn các bạn đã trả lời.
 
Cảm ơn bạn huuthang_bd minh có copy code của bạn về rồi mà không chạy.
Mình đang tìm hiểu VBA trong quyển "Lập trình VBA - Tác giả Phan Tụ Hướng "
mà đến chỗ VD này không chạy được mặc dù mình đã viết Code như của tác giả
Bạn có thể Attach file đó lên được không?
Xin cảm ơn các bạn đã trả lời.
Code của bạn sai cấu trúc. Tôi không nghĩ là bạn viết đúng như trong sách. Bạn kiểm tra kỹ lại xem.

Code của tôi thì bạn sửa lại công thức trên bảng tính như bài trước tôi đã nói. Bạn xem trong file này.
 

File đính kèm

Bài này rất dễ làm, và đã được giải rồi ở trên. Tuy nhiên tôi có cách phân tích như sau xem nó hào hứng chút nào không:

Điểm có tất cả 4 cách xếp hạng. Như vậy ta có thể coi nó là 1,2,3,4
Trước hết xét điểm trung bình xem thuộc hạng nào.
Kế đó xét từng điểm xem có đạt tối thiểu của hạng ấy hay không; nếu không thì bị tuột sang hạng kế.
Điều kiện: không thể tuột hơn 1 hạng.

Khi viết code, ta đổi 1-4 thành 0-3 để phù hợp cách viết code array

Mã:
Function HocLuc(DiemTB As Double, DiemMon As Variant) As String
Dim Mon As Variant
Dim lim1 As Variant
Dim lim2 As Variant
Dim HL As Variant
lim1 = Array(8.5, 6.5, 5)[COLOR=#ff0000] ' mức hạng trung bình[/COLOR]
lim2 = Array(7, 5.5, 4)[COLOR=#ff0000] ' mức hạng từng môn[/COLOR]
HL = Array("Gioi", "Kha", "TrungBinh", "Yeu")[COLOR=#ff0000] ' chuỗi dịch hạng ra chữ[/COLOR]
Dim hang As Integer
For hang = 0 To UBound(lim1)[COLOR=#ff0000] ' tính hạng theo trung bình[/COLOR]
If DiemTB >= lim1(hang) Then Exit For
Next hang
[COLOR=#ff0000]' nếu vòng lặp không exit sớm thì hạng = Ubound(lím) + 1, tức là hạng cuối cùng[/COLOR]
If hang <= UBound(lim1) Then[COLOR=#ff0000] ' xét điều kiện xem có phải tụt hạng - hạng cuối không thể tụt[/COLOR]
  For Each Mon In DiemMon
    If Mon < lim2(hang) Then[COLOR=#ff0000] ' không đạt điều kiện tối thiểu -> tụt hạng[/COLOR]
      hang = hang + 1
      Exit For
    End If
  Next
End If
HocLuc = HL(hang)
End Function
 
Gửi bạn HuuThang_bd
Bạn có thể giải thích dùm mình ý nghĩa của dong code được không?
Mình đã copy đoạn code của bạn và chạy good.
Tại sao DiemTB lại là Double?
DiemMon sao lại không khai báo(As)?
và ý nghĩa của "As String "
Mình làm phiền quá nhưng mong bạn giải thích dùm, mình đang học VBA.

Function HocLuc(DiemTB As Double, DiemMon) As String
Dim Mon
, Diem
Gioi
:
If
DiemTB >= 8.5 Then
For Each Mon In DiemMon
If Mon < 7 Then
GoTo Kha
End
If
Next
HocLuc
= "Gioi"
Exit Function
End If
Kha:
If
DiemTB >= 6.5 Then
For Each Mon In DiemMon
If Mon < 5.5 Then
GoTo TB
:
End If
Next
HocLuc
= "Kha"
Exit Function
End If
TB:
If
DiemTB >= 5 Then
For Each Mon In DiemMon
If Mon < 4 Then
GoTo Yeu
:
End If
Next
HocLuc
= "TB"
Exit Function
End If
Yeu:
HocLuc = "Yeu"
End Function
 
Bạn cần xem lại các kiểu dữ liệu
Kiểu dl | Kích thước | Phạm vi
Byte|1 byte|0 … 255
Boolean|1 byte|True/False
Integer|2 bytes|-32.768 … 32.767
Long|4 bytes|-2.147.483.648 … 2.147.483.647
Single |4 bytes|-3,402823E+38 …3,402823E+38
Double|8 bytes|-1,7976E+308 … 1,7976E+308
Currency|8 bytes|-9,223E+14 … 9,223E+14
Date|8 bytes|1/1/100…31/12/9999
Object|4 bytes|Các đối tượng
String(variable – length)|10 bytes + string length|0 … 231 ký tự
String(fixed – length)|Length of string|1…65.400 ký tự
Variant (with numbers)|16 bytes|Như kiểu double
Variant (with characters)|10 bytes + string length|Như kiểu string có độ dài thay đổi
Tùy theo nhu cầu mà người ta sử dụng kiểu dữ liệu cho phù hợp. Thông thường thì chọn kiểu dữ liệu đáp ứng được nhu cầu và chiếm ít bộ nhớ nhất.
 
Cảm ơn bạn HuuThang_bd
Mình cũng có đọc qua bảng này rồi.
Bây giờ mình đang học từng bước, thấy các anh chị trên diễn đàn viết code giỏi quá
Mình tự học theo sách của thấy Hướng nên có chỗ nào không hiểu mong mọi người giúp.
Mình xin chân thành cảm ơn.
Ah, mà bạn có thể chỉ cho mình bí quyết học VBA tốt hơn được không?
 
Web KT

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

Back
Top Bottom