Tính điểm trung bình với môn chuyên nhân đôi bằng VBA

Liên hệ QC

thao nguyen01

Thành viên thường trực
Tham gia
8/12/19
Bài viết
241
Được thích
30
Kính gửi anh/chị trên diễn đàn,

Em muốn tính điểm trung bình với môn chuyên được nhân đôi bằng VBA. Em có mô tả trong file đính kèm ạ. Anh/chị xem giúp em với ạ. Em cảm ơn nhiều ạ
 

File đính kèm

Kính gửi anh/chị trên diễn đàn,

Em muốn tính điểm trung bình với môn chuyên được nhân đôi bằng VBA. Em có mô tả trong file đính kèm ạ. Anh/chị xem giúp em với ạ. Em cảm ơn nhiều ạ
Tôi thấy bạn dùng công thức được rồi sao lại đòi code làm gì?
 
Upvote 0
Tôi thấy bạn dùng công thức được rồi sao lại đòi code làm gì?

Dạ, vì đây là ví dụ em đưa ra thôi ạ. Ví dụ trên em mô phổng dựa trên công việc em ạ. Dữ liệu thực tế của em nhiều dòng nên em dùng hàm sẽ chậm ạ. Em muốn viết bằng VBA để xử lý nhanh hơn và em cũng muốn học hỏi thêm về VBA ạ.
 
Upvote 0
Dạ, vì đây là ví dụ em đưa ra thôi ạ. Ví dụ trên em mô phổng dựa trên công việc em ạ. Dữ liệu thực tế của em nhiều dòng nên em dùng hàm sẽ chậm ạ. Em muốn viết bằng VBA để xử lý nhanh hơn và em cũng muốn học hỏi thêm về VBA ạ.
Hy vọng đúng như yêu cầu.
 

File đính kèm

Upvote 0

Dạ em cảm ơn anh @befaint . Kết quả ra đúng ạ. Nhưng em có thử suy nghĩ code của bài này, em định viết dictionary để lưu vị trí tất cả những môn học từ D3:L3 vô Dictionary. Sau đó nếu từng dòng từ C4:C7 có trong Dic ở trên sẽ lấy giá trị ô nhân đôi đó ra ạ. Nhưng em đang gặp khó khăn là em không biết viết code như thế nào ạ. Nếu có thể anh xem giúp em ạ. Em cảm ơn nhiều ạ.
Bài đã được tự động gộp:

Hy vọng đúng như yêu cầu.

Dạ em cảm ơn anh @giaiphap ạ . Kết quả ra đúng ạ. Nhưng em có thử suy nghĩ code của bài này, em định viết dictionary để lưu vị trí tất cả những môn học từ D3:L3 vô Dictionary. Sau đó nếu từng dòng từ C4:C7 có trong Dic ở trên sẽ lấy giá trị ô nhân đôi đó ra ạ. Nhưng em đang gặp khó khăn là em không biết viết code như thế nào ạ. Nếu có thể anh xem giúp em ạ. Em cảm ơn nhiều ạ.
 

File đính kèm

Upvote 0
Từ D đến L không tới 10 món. Đít chi vậy?

Dạ, vì thực sự em chỉ biết cách dò tìm theo Dictionary ạ. Và dữ liệu của em nhiều nên em thường sẽ nghĩ dùng dictionary để xử lý. Em mới học nên cũng không biết nhiều ạ. Em chỉ cố gắng vận dụng những gì mình đang học để áp dụng vào công việc nhưng riêng bài này em chưa xử lý được ạ.
 
Upvote 0
Bài naỳ chỉ cần đếm số môn của HS, lúc đếm thì so nó với lớp chuyên của HS, chả có lý do gì liên quan đít với điếc:

Mã:
' code này dò theo chỉ số mảng trực tiếp, ưu việt hơn đít
dongCuoi = ' ... code tính dòng cuối ở đây
MonHoc = Range("C3:L3").Value ' danh sách môn học, ô đàu tiên chỉ để sync với bảng điểm
BangDiem = Range("C4:L" & dongCuoi).Value ' bảng điểm, với cột đầu là tên lớp chuyên
numDong = UBound(BangDiem, 1)
numCot = UBound(BangDiem, 2)
Redim a(1 To numDong, 1 To 1)
For i = 1 To numDong
  n = 0 ' số môn
  tong = 0 ' tổng điểm
  For j = 2 To numCot
    If Not IsEmpty(BangDiem(i, j)) Then
      heSo = IIF(BangDiem(i, 1) = MonHoc(1, j), 2, 1) ' hệ số cho môn học
      n = n + 1 * heSo
      tong = tong + BangDiem(i, j) * heSo
    End If
  Next j
  If n <> 0 Then a(i, 1) = tong / n ' trung bình
Next i
' ghi a ra sheet ở đây
 
Lần chỉnh sửa cuối:
Upvote 0
Bài naỳ chỉ cần đếm số môn của HS, lúc đếm thì so nó với lớp chuyên của HS, chả có lý do gì liên quan đít với điếc:

Mã:
' code này dò theo chỉ số mảng trực tiếp, ưu việt hơn đít
dongCuoi = ' ... code tính dòng cuối ở đây
MonHoc = Range("C3:L3").Value ' danh sách môn học, ô đàu tiên chỉ để sync với bảng điểm
BangDiem = Range("C4:L" & dongCuoi).Value ' bảng điểm, với cột đầu là tên lớp chuyên
numDong = UBound(BangDiem, 1)
numCot = UBound(BangDiem, 2)
Redim a(1 To numDong, 1 To 1)
For i = 1 To numDong
  n = 0 ' số môn
  tong = 0 ' tổng điểm
  For j = 2 To numCot
    If Not IsEmpty(BangDiem(i, j)) Then
      heSo = IIF(BangDiem(i, 1) = MonHoc(1, j), 2, 1) ' hệ số cho môn học
      n = n + 1 * heSo
      tong = tong + BangDiem(i, j) * heSo
    End If
  Next j
  If n <> 0 Then a(i, 1) = tong / n ' trung bình
Next i
' ghi a ra sheet ở đây

Dạ, em học thêm một cách mới từ code của Thầy ạ. Em cảm ơn Thầy nhiều lắm ạ.
 
Upvote 0
Web KT

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

Back
Top Bottom