Bài toán tổng hợp số điểm thi theo từng lớp (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

kiennguyen1309

Thành viên mới
Tham gia
2/3/07
Bài viết
14
Được thích
1
Tôi có bảng điểm như file gửi kèm. mong mọi người chỉ giáo.
- Dựa vào sheet:nhập điểm hãy thống kê theo con điểm ở sheet : tổng hợp ( thống kế theo điểm 0,0; 0,1; 0,2; .....10. theo mẫu). Cảm ơn mọi người trước nhé.
 

File đính kèm

Tôi có bảng điểm như file gửi kèm. mong mọi người chỉ giáo.
- Dựa vào sheet:nhập điểm hãy thống kê theo con điểm ở sheet : tổng hợp ( thống kế theo điểm 0,0; 0,1; 0,2; .....10. theo mẫu). Cảm ơn mọi người trước nhé.

Bạn xem file đính kèm nhé! Với kiểu dữ liệu của bạn, lập công thức vẫn được, nhưng excel sẽ hơi chậm!
 

File đính kèm

File nặng quá Ca_Dafi ơi!
Xem thử cái này nè, nhẹ hơn nhiều, chạy vèo vèo luôn.

Trước hết, xin trách tác giả một chuyện đã. Bạn quên cho biết trong cái Sheet DIEM, cột nào là Toán, cột nào là Lý, cột nào là Hóa, v.v... ?

Nhưng phải công nhận đây là một trong những bài toán rất hay.

Tạm thời, tôi xin phép gán cho các cột từ F đến M (bên Sheet DIEM) là Toán, Vật Lý, Hóa học, v.v... theo thứ tự từ 1 đến 8 bên Sheet TONGHOP, như hình sau:
000-48.gif
Bật mí cho bạn cách làm nhanh: Bạn chọn đại một khối ô chứa các tên của môn học bên Sheet TONGHOP, khối ô B6:B13 chẳng hạn, rồi nhấn copy, sau đó bạn nhảy qua bên Sheet DIEM, đứng tai ô F1, gọi lệnh Paste Special, đánh dấu vào tùy chọn Transpose, nhấn OK. Bạn sẽ có cái giống như ở trên hình. Dĩ nhiên, cái chữ Lớp ở E1 thì phải tự gõ thêm vào.

Bây giờ là đến chuyện đặt tên (Name) cho các cột từ E đến M (Lớp, và các môn thi) trong Sheet DIEM. Cũng để cho nhanh, bạn chọn hết từ E1:M138, gọi Insert | Name | Create... rồi đánh dấu vào ô Top Row, xong nhấn OK. Excel sẽ tạo cho bạn một loạt Name: Lớp, Toán, Văn... Ví dụ, Name "Lớp" = $E$2:$E$138

Để cho "khoa học" tí, bạn tạo một cái Data Validation bên Sheet TONGHOP, ví dụ tại A1 và B1 như hình sau (cái này là để chọn lớp mà xem, thay vì phải cuộn màn hình lên xuống để xem từng lớp như trong file gốc của bạn):
000-49.gif
Để có được cái Data Validation ở B1, bạn đứng tại B1, gọi lệnh Data | Validation..., rồi chọn List trong khung Allow, trong khung Source bạn nhập vào: 10B1,10B2,10B3,10B4,10B5

Khi đã có cái Data Validation rồi, bạn chỉ cần giữ lại một nhóm tổng hợp từ A3:DA18 thôi, còn xóa hết mấy cái phía dưới đi.

Bây giờ là các công thức:

Công thức cho Tổng số học sinh (C6:C13): =COUNTIF(Lớp, "=" & $B$1)

Công thức để tìm ra có bao nhiêu điểm 10 của một lớp... (khối ô E6:DA13):
Bạn chọn hết khối ô này (E6:DA13), nhập công thức sau:
=SUMPRODUCT((Lớp = $B$1)*(INDIRECT(SUBSTITUTE($B6, " ", "_")) = E$4))
Xong nhấn Ctrl+Enter.

Chỉ có vậy thôi. Bạn thích xem tổng hợp của lớp nào thì bạn chọn lớp đó trong ô B1.

Nếu không thích thấy mấy con số 0 thì bạn gọi Tools | Options, rồi chọn đừng có hiển thị số 0 trong bảng tính.

Gửi bạn cái file tôi vừa trình bày ở trên:
 

File đính kèm

Lần chỉnh sửa cuối:
Đa tạ ca_dafi và BNTT nhé. Tôi đã làm được rồi.
 
Bạn xem file đính kèm nhé! Với kiểu dữ liệu của bạn, lập công thức vẫn được, nhưng excel sẽ hơi chậm!
Mạn phép sửa file của Kiệt lại 1 chút
- Sort trước dử liệu theo lớp
- Dùng name động để loại bỏ điều kiện
Bảo đãm file chạy nhanh như "tên lửa"
Dùng SUMPRODUCT trong bài này vừa rắc rối, công thức dài mà tốc độ lại rất chậm (may mà chỉ có 128 dòng)... Dùng name động thì công thức quá gọn (chỉ là COUNTA và COUNTIF)....
Còn file của BNTT thì name nhiều quá đến mức ko cần thiết. Nó chạy "vèo vèo" là vì dử liệu mới có 128 dòng thôi đấy đồng chí à! Hãy thử với dử liệu từ 1000 dòng trở lên sẽ biết
He... he...
 

File đính kèm

Lần chỉnh sửa cuối:
Đồng ý với anh là Name nhiều quá. Có điều chưa đến mức không cần thiết đâu. Và công thức SUMPRODUCT của em cũng không quá dài.

Cách của anh, là phải sort trước cột Lớp, thì mới sử dụng được, nếu không thì công thức cho ra kết quả trật lất. Có nghĩa là phải sửa đổi lại cấu trúc của Database bên Sheet DIEM.

Còn cách của em, là em chỉ bổ sung thêm tên của các cột điểm (đây là cái bắt buộc phải có, mà có lẽ là tác giả khi gửi file lên đã quên nhập vào), chứ không sửa đổi gì cấu trúc của Sheet DIEM hết. Anh có xem file gốc không? Ở bên Sheet DIEM, người ta có những lần Nhập 1, Nhập 2, Nhập 3... và mỗi lần Nhập như vậy thì người ta lại sắp xếp thứ tự từ 1. Chắc là phải có ý đồ.

Bài này, cũng giống bài hôm trước em hỏi, có thể là cách trình bày và nhập dữ liệu không được khoa học cho lắm, nhưng nhiều khi đó là thói quen, thậm chí đó là khuôn mẫu mà người nhập phải theo, không được tự ý sửa đổi. Anh cũng hay giúp người khác, chắc anh hiểu chuyện này.

Cho nên, quan điểm của em là không sửa lại cấu trúc của Database, cứ để yên nó như vậy, và mình thì phải cố gắng làm sao để vừa không sửa lại cấu trúc Database mà vừa làm được cái người ta yêu cầu.
 
Theo mình hiểu thì có lẽ vẫn có thể sửa lại bên sheet data ( điểm), bởi tác giả bố trí không khoa học thôi và hình như điểm đó theo từng phòng hay gì đó. Còn không thì copy sang sheet khác và sort lại dữ liệu.
 
tôi đã xem cả 2 file của BNTT và của Anh Tuấn và thấy rằng kết quả có khác nhau.
File của BNTT khi tính số học sinh có điểm các môn bằng 0 tính luôn cả số học sinh không tham dự môn thi nên không có điểm,do vậy cột tổng số học sinh và cột số học sinh tham dự kiểm tra không đúng
File của Anh Tuấn dùmg hàm Countif nên đếm chính xác số học sinh bị điểm 0 và do vậy số học sinh không tham dự không có điểm sẽ không được đếm vào
Ủng hộ quan điểm không can thiệp làm thay đổi dữ liệu của tác giả của anh BNTT nhưng có thể thay đổi dùng 1 name động cho các môn thi thay vì đặt 1 loạt name cho từng môn thi và trong công thức Sumproduct sẽ có thêm 1 mảng điểm môn thi khác 0.
góp vui với các bác 1 file
 

File đính kèm

Cảm ơn Cao Mạnh Sơn. Đúng là trong công thức tôi quên mất chuyện học sinh bỏ không dự thi.
Nếu như "ngoan cố" giữ lại cách làm của mình, thì chỉ cần sửa công thức lại như scoau:
=SUMPRODUCT((Lớp = $B$1)*(INDIRECT(SUBSTITUTE($B6, " ", "_")) = E$4)*(INDIRECT(SUBSTITUTE($B6, " ", "_")) <> ""))​
Tuy nhiên, ai lại làm vậy, cách của bạn hay hơn của tôi nhiều.
 
boyxin ủng hộ cách sort theo lớp

Các dữ liệu liên quan đến điểm thi từng môn học thường được lấy từ danh sách các lớp trong khoa, trong trường

khi nhập cũng sẽ nhập hết lớp này đến lớp khác ...

Vậy khi sort theo lớp vừa mang tính khoa học, vừa tăng tính chính xác, dễ kiểm tra khi thấy dấu hiệu nhầm lẫn

boyxin góp 1 cách (sort theo lớp) tốc độ xử lý cực nhanh
 

File đính kèm

Sở dỉ tôi vẩn muốn sort dử liệu là vì với dử liệu từ vài ngàn dòng đến vài chục ngàn dòng thì dám cá với các bạn rằng nếu ko sort trước sẽ ko thể nào tăng tốc tính toán đc cho dù dùng bất cứ cách đặt name động theo kiểu gì (ko chừng name động còn chậm hơn)
Còn với dử liệu 200 dòng trở xuống thì cách gì mà chẳng dc, thậm chí là Filter với SUBTOTAL cho nó gọn
He.. he...
Cho nên, quan điểm của em là không sửa lại cấu trúc của Database, cứ để yên nó như vậy, và mình thì phải cố gắng làm sao để vừa không sửa lại cấu trúc Database mà vừa làm được cái người ta yêu cầu.
Sort đâu phải là sửa Data chứ... làm xong, muốn xem lại như củ thì sort lại, đâu có mất gì
 
Hi
Trong thực tế, nếu công việc tổng hợp là của boyxin mà lại có yêu cầu không được sort sheet diem thì boyxin làm thế này

Việc đặt name chỉ là để công thức ngắn gọn (không dùng name vẫn ngon lành)
 

File đính kèm

Trước hết xin cảm ơn tất cả mọi người, lâu quá rồi máy hỏng, mạng hư, công việc nhiều không lên lại. nay mới có dịp thấy mọi người góp ý chân thành và hướng dẫn cách làm tôi xin chân thành cảm ơn. Tuy nhiên mục đích của tôi là không sort lại sheet DIEM, làm cách nào cũng hay nhưng làm công thức SUMPRODUCT thì khả năng tính toán rất chậm ( trường tôi có 54 lớp và hơn 2000 học sinh) và tôi cũng đã thực hiện được rôi. CHÂN THÀNH CẢM ƠN TẤT CẢ MỌI NGƯỜI.
 
Web KT

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

Back
Top Bottom