Học cách lọc giá trị lớn nhất và nhỏ nhất bằng vba! (1 người xem)

  • Thread starter Thread starter nad582
  • Ngày gửi Ngày gửi
Liên hệ QC

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

nad582

Thành viên thường trực
Tham gia
7/6/11
Bài viết
317
Được thích
48
Chào các a (c) trong diễn đàn GPE, e đang tìm học về VBA. Về mục lọc giá trị lớn nhất nhỏ nhất e chưa thông, giờ e nêu bài tập với từng trường hợp mong các a (c) tận tình chỉ dạy. E chân thành cảm ơn.

Bảng dữ liệu là: Bảng điểm học sinh qua từng năm học.
Ghi chú:
Cột A là năm hoc
Cột B là họ và tên học sinh
Cột C là Học kỳ
Cột D là môn học
Cột E là điểm số
.....Điểm số tối đa là 100 điểm.
View attachment 122527

BÀI TẬP TRƯỜNG HỢP 1:
Yêu cầu: tìm giá trị (điểm số) lớn nhất ở cột E, sau đó tô đậm (đánh dấu) giá trị đó? .hết
(ghi chú: e nghỉ bài này ko khó, chắc sử dụng vòng lặp. Cho 1 biến đi từ trên xuống dưới sau đó so sánh đánh dấu giá trị lớn nhất). Nếu giá trị lớn nhất trùng nhau (hay bằng nhau) thì vẫn đánh dấu. Ví dụ: dò từ trên xuống dưới có 3 giá trị (điêm số) lớn nhất là 100 thì đánh dấu 3 hàng có giá trị 100.
file đính kèm chỉ có cột E.
..........
Nhờ các a(c) chỉ dạy. cảm ơn
 
Yêu cầu: tìm giá trị (điểm số) lớn nhất ở cột E, sau đó tô đậm (đánh dấu) giá trị đó? .hết
Chuyện này không khó:
Dùng hàm =MAX() cột [E]
Sau đó tìm giá trị này ở vị trí/ô nào mà thôi!
 
Upvote 0
Upvote 0
Không phải VBA có được không? Chỉ cần dùng Conditional Formatting với công thức cho E5 như vầy là được thôi mà: =E5=MAX($E$5:$E$68)
Chào a,, vì e đang tìm hiểu VBA nên e muốn thực hiện bằng VBA mong anh chỉ giúp dùm e. cảm ơn. (về công thức thì đơn giản rồi, cái này e xử lý đc.)
 
Upvote 0
Chào a,, vì e đang tìm hiểu VBA nên e muốn thực hiện bằng VBA mong anh chỉ giúp dùm e. cảm ơn. (về công thức thì đơn giản rồi, cái này e xử lý đc.)
Nhất định là VBA thì tặng bạn 2 món này:
1. Sử dụng vòng lặp:
[GPECODE=vb]Sub ToMauGTLN()
Dim dMax As Double, Rng As Range, Cll As Range, fRw As Long
Set Rng = Sheets("BANGDIEM").[E5:E68]
Rng.Interior.ColorIndex = 0
dMax = WorksheetFunction.Max(Rng)
Set Cll = Rng.Find(dMax)
fRw = Cll.Row
Do
Cll.Interior.ColorIndex = 15
Set Cll = Rng.FindNext(Cll)
Loop Until Cll.Row = fRw
End Sub[/GPECODE]
2. Không sử dụng vòng lặp:
[GPECODE=vb]Sub ToMauGTLN_1()
Dim dMax As Double, Rng As Range
Set Rng = Sheets("BANGDIEM").[E5:E68]
Rng.Interior.ColorIndex = 0
dMax = WorksheetFunction.Max(Rng)
Sheets("BANGDIEM").[E4:E68].AutoFilter 1, Format(dMax, "0.0")
Rng.SpecialCells(12).Interior.ColorIndex = 15
Sheets("BANGDIEM").[E4:E68].AutoFilter
End Sub[/GPECODE]
 
Upvote 0
Cám ơn anh Hoàng Nghĩa Phúc. (Nếu muốn tìm Min thì có phải ta thay Max(Rng) => Min(Rng) ko?).
E xin nêu BÀI TẬP TRƯỜNG HỢP 2:
Yêu cầu: tìm giá trị (điểm số) lớn nhất ở cột E ứng với năm học ở cột A sau đó tô đậm (đánh dấu) giá trị đó? .hết
Ghi chú: e nghỉ câu này chắc cũng giống câu 1, nhưng hơi khó ở chỗ làm sao để ràng buộc thêm điều kiện ở cột A.
ví dụ: năm học 2009-2010 có điểm số lớn nhất là 100 (tô đậm), năm học 2010-2011 có điểm số lớn nhất là 90 (tô đậm). Nếu giá trị lớn nhất trùng nhau (hay bằng nhau) thì vẫn đánh dấu.
File đính kèm có năm hoc và điểm số.
............
Mong các a(c) chỉ giúp e. cảm ơn.
 
Upvote 0
Bạn xem theo file

...........................................................
 

File đính kèm

Upvote 0
Cảm ơn a ChanhTQ đã góp bài, đối với bài trường hợp 2 này mình có thể thực hiện code mà ko cần bước trung gian đc ko? (vì nếu như có nhiều năm học hơn nữa thì lại phải liệt kê ra, hơi tốn chút thời gian nữa..) vì thế nhờ các a(c) giúp e tiếp..
Cảm ơn nhiều!!
 
Upvote 0
Mình nghĩ là được như bạn mong muốn, nhưng chưa chắc là khả dĩ hơn!

Giờ ta đi fân tích các làm thứ hai như bạn muốn xem sao nha;
Để vậy ta cần thực hiện các bước sau (Cho trường hợp tìm tri MAX đã nha)
Khai báo 1 biến tạm & gán cho nó trị nhỏ hơn trị nhỏ nhất trong cột cần tìm MAX
Sau đó ta duyệt theo cột năm học, hễ
(*) Đúng là năm học cần tìm thì
So sánh trị ỡ cột 'Điểm' với biến tạm;

Nếu biến tạm mà nhỏ hơn thì ta làm đọng tác thay mới trị trong biến tạm này bằng trị vừa đem so.

Lần lượt từ đầu đến cuối ta sẽ tìm ra trị lớn nhất thỏa điều kiện về năm học.

Việc duyệt từ đầu chí cuối này không nhanh bằng fương thức tìm kiếm như bài trên. Đó là chưa nói cần lấy hết những em HS đều có điểm tối đa trong năm học đó; Lúc này còn fải ghi lưu vô đâu đó để cuối cùng còn trưng ra cho mọi người (& bạn) xem nữa!

Tất nhiên còn có cách đưa vô biến mảng duyệt sẽ rất nhanh; Nhưng lúc đó kiến thức về mảng của bạn cần siêu fàm lên rất nhiều!
 
Upvote 0
Web KT

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

Back
Top Bottom