GPE Phát hành sách: "Lập trình VBA trong Excel cho người mới bắt đầu - 2014" | "VBA trong Excel - Cải thiện và tăng tốc - 2013"
Hiển thị kết quả tìm kiếm từ 1 đến 5 trên tổng số: 5
  1. #1

    Tìm giá trị cao nhất trong cột theo ô tương ứng

    Chào mọi người, em có vấn đề nhờ mọi người tư vấn giúp. Đây là bảng ví dụ:
    Nhấp chuột vào hình để phóng to

Name:	Capture.PNG
Views:	4
Size:	4.4 KB
ID:	86204

    Chẳng là em đang muốn làm cái bảng điểm ở trường. Do theo quy chế tín chỉ nên SV có quyền học 1 môn nhiều lần, điểm TB của lần học nào cao nhất sẽ được lấy để tính GPA (điểm TB tích lũy). Như theo ví dụ trên, môn 1 được học 3 lần, trong đó lần học thứ 2 (ô B5) có điểm TB cao nhất trong 3 lần học. Tương tự môn 2 được học 2 lần, lần học thứ 2 (ô B6) có điểm TB cao nhất.

    Câu hỏi của em là: em muốn tìm giá trị điểm lớn nhất trong cột B tương ứng theo môn học trong cột A. Cụ thể với môn 1, em cần tìm giá trị lớn nhất trong số các giá trị tương ứng với môn 1 ở cột B. Theo ví dụ trên thì giá trị trả về mong muốn là:
    • Môn 1: 2.8
    • Môn 2: 3.6


    Em đã thử dùng PivotTable (sau 1 hồi mò mẫm), đáp ứng được yêu cầu của em nhưng PivotTable chỉ là dữ liệu tĩnh (nếu bảng dữ liệu thô có thay đổi thì lại phải tạo 1 cái pivottable khác). Giả sử SV học tiếp môn 1 lần thứ 4 với điểm TB là 3.8 (lớn nhất trong tất cả các lần học) thì sẽ lấy điểm của lần học thứ 4. Do đó em cần 1 phương pháp mang tính "động" hơn. Em có xem qua bài về hàm DMax trên forum mình nhưng chưa biết áp dụng vào bảng của em như thế nào.

    Mọi người giúp em giải quyết vấn đề này nha, em cảm ơn rất nhiều :)
    Tập tin đính kèm Tập tin đính kèm
    thay đổi nội dung bởi: peter_george, 22-07-12 lúc 02:31 AM

  2. #2
    Tham gia ngày
    09 2009
    Nơi Cư Ngụ
    Ayun Pa - Gia Lai
    Bài gởi
    4,303
    Cảm ơn
    9,855
    Được cảm ơn 7,719 lần trong 3,673 bài viết
    Cách 1: Sử dụng hàm mảng:
    1. Tạo 2 name động:
    Code:
    Mon=OFFSET(Sheet1!$A$2,,,COUNTA(Sheet1!$A:$A)-1)
    Diem=OFFSET(Mon,,1)
    2. Tạo bảng thống kê có dạng:
     FG
    1Môn họcĐiểm cao nhất
    2Môn 1 
    3Môn 2 
    4Môn 3 
    Sử dụng công thức mảng cho ô G2 như sau và fill xuống cho cả bảng thống kê:
    Code:
    =MAX(IF(Mon=F2,Diem,""))
    (nhớ kết thúc bằng tổ hợp Ctrl+Shift+Enter)
    Với cách này, có thể thay đổi điểm hoặc nhập thêm mới vào danh sách ở cột A, B (nhớ nhập liên tục) thì kết quả ở bảng thống kê tự động cập nhật.

    Cách 2: Sử dụng PivotTable với Data source động:
    1. Tạo name động:
    Code:
    DuLieu=OFFSET(Sheet1!$A$1,,,COUNTA(Sheet1!$A:$A),2)
    2. Tạo PivotTable (việc này bạn biết làm rồi)
    Với cách này, mỗi lần thay đổi điểm hoặc nhập thêm mới vào danh sách ở cột A, B (nhớ nhập liên tục) thì chỉ cần click phải vào PivotTable và chọn Refresh là kết quả sẽ được cập nhật.

    Bạn tham khảo trong file nhé.
    Tập tin đính kèm Tập tin đính kèm
    Hãy biết nhìn lên để thấy mình còn kém cỏi
    Hãy biết nhìn xuống để thấy mình có thể giúp nhiều người.
    Evaluate | SpeedOn | ExcelDiet | Scripting.Dictionary | Array

  3. Có 2 thành viên cảm ơn nghiaphuc về bài viết này:


  4. #3
    Tham gia ngày
    05 2009
    Nơi Cư Ngụ
    An Giang
    Bài gởi
    4,931
    Cảm ơn
    6,742
    Được cảm ơn 7,521 lần trong 3,950 bài viết
    Trích Nguyên văn bởi nghiaphuc View Post
    Cách 1: Sử dụng hàm mảng:
    1. Tạo 2 name động:
    Code:
    Mon=OFFSET(Sheet1!$A$2,,,COUNTA(Sheet1!$A:$A)-1)
    Diem=OFFSET(Mon,,1)
    2. Tạo bảng thống kê có dạng:
     FG
    1Môn họcĐiểm cao nhất
    2Môn 1 
    3Môn 2 
    4Môn 3 
    Sử dụng công thức mảng cho ô G2 như sau và fill xuống cho cả bảng thống kê:
    Code:
    =MAX(IF(Mon=F2,Diem,""))
    (nhớ kết thúc bằng tổ hợp Ctrl+Shift+Enter)
    Với cách này, có thể thay đổi điểm hoặc nhập thêm mới vào danh sách ở cột A, B (nhớ nhập liên tục) thì kết quả ở bảng thống kê tự động cập nhật.

    Cách 2: Sử dụng PivotTable với Data source động:
    1. Tạo name động:
    Code:
    DuLieu=OFFSET(Sheet1!$A$1,,,COUNTA(Sheet1!$A:$A),2)
    2. Tạo PivotTable (việc này bạn biết làm rồi)
    Với cách này, mỗi lần thay đổi điểm hoặc nhập thêm mới vào danh sách ở cột A, B (nhớ nhập liên tục) thì chỉ cần click phải vào PivotTable và chọn Refresh là kết quả sẽ được cập nhật.

    Bạn tham khảo trong file nhé.
    Cách 1: Nghĩa Phúc hà tiện quá vậy. =MAX(IF(Mon=F2;Diem;"")) Ctrl+Shift+Enter.
    Đã có 2 Name thì 3 Name cũng có sao đâu?
    Thêm 1 Name Diem_TB = IF(Mon=$F2;Diem;"")
    Để cho người khác khỏi phải Ctrl+Shift+Enter, chỉ cần:
    =Max(Diem_TB) rồi Enter thôi.
    Thọt lét cái, hổng nhột thì thôi. Ẹc...
    ------------------------


    --Bể dốt mênh mông, quay đầu... là bờ ?!

    Tra Cứu Hàm Excel
    Kỷ niệm Hà Nội 16/01/2010

  5. Có 2 thành viên cảm ơn Ba Tê về bài viết này:


  6. #4
    ^^ cảm ơn hai anh nhiều ạ, em dùng cách 1 của anh nghiaphuc thấy ổn nhất, không cần phải thao tác gì thêm, chỉ cần nhập entry mới là nó tự động tính toán lại :)

  7. #5
    Tham gia ngày
    10 2009
    Nơi Cư Ngụ
    BIÊN HÒA
    Bài gởi
    1,974
    Cảm ơn
    2,065
    Được cảm ơn 3,202 lần trong 1,452 bài viết
    Trích Nguyên văn bởi nghiaphuc View Post
    Cách 1: Sử dụng hàm mảng:
    1. Tạo 2 name động:
    Code:
    Mon=OFFSET(Sheet1!$A$2,,,COUNTA(Sheet1!$A:$A)-1)
    Diem=OFFSET(Mon,,1)
    2. Tạo bảng thống kê có dạng:
     FG
    1Môn họcĐiểm cao nhất
    2Môn 1 
    3Môn 2 
    4Môn 3 
    Sử dụng công thức mảng cho ô G2 như sau và fill xuống cho cả bảng thống kê:
    Code:
    =MAX(IF(Mon=F2,Diem,""))
    (nhớ kết thúc bằng tổ hợp Ctrl+Shift+Enter)
    Với cách này, có thể thay đổi điểm hoặc nhập thêm mới vào danh sách ở cột A, B (nhớ nhập liên tục) thì kết quả ở bảng thống kê tự động cập nhật.

    Cách 2: Sử dụng PivotTable với Data source động:
    1. Tạo name động:
    Code:
    DuLieu=OFFSET(Sheet1!$A$1,,,COUNTA(Sheet1!$A:$A),2)
    2. Tạo PivotTable (việc này bạn biết làm rồi)
    Với cách này, mỗi lần thay đổi điểm hoặc nhập thêm mới vào danh sách ở cột A, B (nhớ nhập liên tục) thì chỉ cần click phải vào PivotTable và chọn Refresh là kết quả sẽ được cập nhật.

    Bạn tham khảo trong file nhé.
    CÒN 1 CÁCH NỮA MÀ KHI DÙNG PIVOT TABLE CHẲNG CẦN DÙNG NAME ĐỘNG MÀ VẪN OK. ĐÓ LÀ TẠO 1 TABLE SAU ĐÓ Data source SẼ LẤY LUÔN TABLE .KHI GÕ DỮ LIỆU THÌ VÙNG DATA SOURE CŨNG DI CHUYỂN THEO NHƯ NAME ĐỘNG
    Tập tin đính kèm Tập tin đính kèm
    Ở nhà nhất mẹ nhì con
    Ra đường lắm kẻ còn giòn hơn ta


Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •  

Mudim v0.8 Tắt VNI Telex Viqr Tổng hợp
Chính tả Bỏ dấu kiểu mới  [Bật/Tắt (F9)]