Bài tập VBA đơn giản dành cho người mới bắt đầu [Phần 2]

Liên hệ QC

ChanhTQ@

0901452không62
Tham gia
5/9/08
Bài viết
4,256
Được thích
4,863
Xin các bạn có bài tập nào hay hay đăng lên để cùng nhau luyện cho mau tiến bộ nhe!
Mình xin mở màn bài đầu:
ĐỀ BÀI 1:

Tôi có bảng số liệu từ cột [A..E] như sau:

| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W 2 |HoTen|Date1|Date2|Date3|Date4|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18
3 |Hồ Lễ|3|5|7|13|Do|Do|Do|Xh|Xh|Vg|Vg|Tm|Tm|Tm|Tm|Tm|Tm||.|||
4 |Đỗ Nè|4|8|13|15|Nu|Nu|Nu|Nu|Xh|Xh|Xh|Xh|Xm|Xm|Xm|Xm|Xm|Dn|Dn|||
5 |Vũ Xe|2|4|12|13|Do|Do|Vg|Vg|Nu|Nu|Nu|Nu|Nu|Nu|Nu|Nu|Hg|||.|||

Phần từ cột [F] trở đi là phần cần viết 1 macro để nó tô màu nền khác nhau theo những giá trị cùng dòng từ cột [B..E];
Màu tô do bạn tự chọn, cốt fân biệt giữa chúng & dịu mắt là được!


PHẦN TỔNG HỢP CÁC ĐỀ BÀI TẬP:

Tên|Tóm tắc|Bài thứ
Đề bài 1|Tô màu theo trị số các ô bên trái cùng dòng| #1
Đề bài 1A|Lọc theo các số cần thiết từ các chuỗi số| #73
Đề bài 1B|Xác định loại tam giác dựa trên 3 số ngẫu nhiên được tạo ra| #82
Đề bài 2|Lập danh sách học sinh theo từng lớp| #11
Đề bài 2A|Dịch ngôn ngữ VBA sang tiếng Việt| #19
BĐT(*)|Lập danh sách các nữ HS có ngày sinh trong 1 quí| #101
Đề bài 3|Thống kế kết quả điểm của từng lớp theo từng môn học| #22
Đề bài 4|Lập danh sách HS các lớp đạt điểm cực trị của từng môn| #46
Đề bài 4A|Tìm trong danh sách thí sinh, số báo danh nào có tổng điểm các môn cao nhất| #94
Đề bài 5|Thống kê từng khoảng điểm của môn học| #58
Đề bài 6|Thống kê điểm trung bình theo giới tính| #71

(*) BĐT: Bài đọc thêm

.
.
.
 
Lần chỉnh sửa cuối:
Nếu tôi là người đang học, tôi chỉ làm những bài tập nào mà người ra đề cho biết trước:

Làm xong bài này, người làm sẽ học thêm được những gì.
 
Upvote 0
[thongbao]Làm xong bài này, người làm sẽ học thêm được những gì.
[/thongbao]

Với bài tập này, chúng ta muốn hóa giải cần nhiều thời gian suy sét kỹ trước khi đặt bút viết thử các dòng lệnh.
 
Upvote 0
Xin các bạn có bài tập nào hay hay đăng lên để cùng nhau luyện cho mau tiến bộ nhe!
Mình xin mở màn bài đầu:
ĐỀ BÀI 1:

Tôi có bạn số liệu từ cột [A..E] như sau:

|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W
2|HoTen|Date1|Date2|Date3|Date4|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18
3|Hồ Lễ|3|5|7|13|Do|Do|Do|Xh|Xh|Vg|Vg|Tm|Tm|Tm|Tm|Tm|Tm||.|||
4|Đỗ Nè|4|8|13|15|Nu|Nu|Nu|Nu|Xh|Xh|Xh|Xh|Xm|Xm|Xm|Xm|Xm|Dn|Dn|||
5|Vũ Xe|2|4|12|13|Do|Do|Vg|Vg|Nu|Nu|Nu|Nu|Nu|Nu|Nu|Nu|Nu|||.|||

Phần từ cột [F] trở đi là phần cần viết 1 macro để nó tô màu nền khác nhau theo những giá trị cùng dòng từ cột [B..E];
Màu tô do bạn tự chọn, cốt fân biệt giữa chúng & dịu mắt là được!
Em làm thử trươc, nhờ bác kiểm tra và hướng dẫn thêm:
[gpecode=vb]
Sub ToMau()
Dim Rng As Range, iR As Integer, jC As Integer
Set Rng = Sheet1.Range("B3:E" & Sheet1.Range("B65535").End(xlUp).Row)
Rng.Offset(, 4).Resize(, 18).Interior.ColorIndex = 0
For iR = 1 To Rng.Rows.Count
For jC = 4 To 1 Step -1
Rng(iR, 5).Resize(, Rng(iR, jC)).Interior.ColorIndex = Sheet1.[Z1] - jC
Next jC
Next iR
End Sub
[/gpecode]
Với ô Z1 dùng để chọn màu cho đỡ chói.
 

File đính kèm

  • Code to mau theo dieu kien.xls
    42 KB · Đọc: 311
Upvote 0
Với ô Z1 dùng để chọn màu cho đỡ chói.

Thảo có thể xài dòng lệnh này:
PHP:
Rng(iR, 5).Resize(, Rng(iR, jC)).Interior.ColorIndex = 33 + Cells(iR + 2, jC + 1).Value

Thay vì fải thiết kế vùng bảng màu
 
Upvote 0
Thảo có thể xài dòng lệnh này:
PHP:
Rng(iR, 5).Resize(, Rng(iR, jC)).Interior.ColorIndex = 33 + Cells(iR + 2, jC + 1).Value

Thay vì fải thiết kế vùng bảng màu
"Tô màu nền khác nhau theo những giá trị cùng dòng từ cột [B..E]", vậy thì các dòng tô màu không đồng nhất phải không bác?
Và em chưa hiểu lắm mục đích của bác về các ký hiệu: Do, Dn, Xh, Xm, Tm, Nu, ... có phải là các màu đỏ, đen, xanh, xám, tím, nâu? Chắc là nằm trong bài tập 2 của bác đây?
 
Upvote 0
Xin các bạn có bài tập nào hay hay đăng lên để cùng nhau luyện cho mau tiến bộ nhe!
Mình xin mở màn bài đầu:
ĐỀ BÀI 1:

Tôi có bảng số liệu từ cột [A..E] như sau:

| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W 2 |HoTen|Date1|Date2|Date3|Date4|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18
3 |Hồ Lễ|3|5|7|13|Do|Do|Do|Xh|Xh|Vg|Vg|Tm|Tm|Tm|Tm|Tm|Tm||.|||
4 |Đỗ Nè|4|8|13|15|Nu|Nu|Nu|Nu|Xh|Xh|Xh|Xh|Xm|Xm|Xm|Xm|Xm|Dn|Dn|||
5 |Vũ Xe|2|4|12|13|Do|Do|Vg|Vg|Nu|Nu|Nu|Nu|Nu|Nu|Nu|Nu|Hg|||.|||

Phần từ cột [F] trở đi là phần cần viết 1 macro để nó tô màu nền khác nhau theo những giá trị cùng dòng từ cột [B..E];
Màu tô do bạn tự chọn, cốt fân biệt giữa chúng & dịu mắt là được!
Bài này nằm trong Topic VBA, nhưng nếu không phải thì có thể dùng CF cũng được. Chọn F3:W5.
Công thức CF đầu tiên:
Mã:
=AND(COLUMN(F3)-5<=$E3,COLUMN(F3)-5>$D3)
Công thức CF thứ 2:
Mã:
=AND(COLUMN(F3)-5<=$D3,COLUMN(F3)-5>$C3)
Công thức CF thứ 3:
Mã:
=AND(COLUMN(F3)-5>$B3,COLUMN(F3)-5<=$C3)
 

File đính kèm

  • Code to mau theo dieu kien.xls
    28.5 KB · Đọc: 78
Upvote 0
Xin các bạn có bài tập nào hay hay đăng lên để cùng nhau luyện cho mau tiến bộ nhe!
Mình xin mở màn bài đầu:
ĐỀ BÀI 1:
..........................
Màu tô do bạn tự chọn, cốt fân biệt giữa chúng & dịu mắt là được!
Rất bổ ích, đúng là rất phù hợp với những người mới học VBA như em. Mong anh và các thành viên khác tiếp tục ra các bài tập tiếp theo. Nếu có ứng dụng vào công việc thực tế thì sẽ tốt hơn!
 
Upvote 0
Rất bổ ích, đúng là rất phù hợp với những người mới học VBA như em. Mong anh và các thành viên khác tiếp tục ra các bài tập tiếp theo. Nếu có ứng dụng vào công việc thực tế thì sẽ tốt hơn!
Đang hóng Đề Bài 2.
Có lẽ bác ChanhTQ@ xỉn từ tối qua tới giờ chưa dậy, kaka ...
 
Upvote 0
Bài 2

ĐỀ BÀI 2:

@$@!^%
Trong file là CSDL của khối lớp 12 của 1 trường học;
Người ta cần tạo ở ô [H2] danh sách các lớp để từ đó lựa ra 1 lớp (Ví dụ lớp 12A2)
Thì tại [B3] ta sẽ có dòng tiêu đề báo cáo:

"DANH SÁCH HỌC SINH CỦA LỚP 12A2."


& dưới dòng này có bảng báo cáo liệt kê danh sách của lớp đó với nội dung giống như sau:


5 |TT|SBD|HoTen|Nu|DanToc|Ngayinh
6 |1|3500210|Nguyễn Việt ..|1|Kinh|12/13/1993
7 |2|3500190|Vũ Phú ..||Kinh|1/19/1993
. ||3500900| ..||..|...


__--____--__
 
Lần chỉnh sửa cuối:
Upvote 0
ĐỀ BÀI 2:

@$@!^%
Trong file là CSDL của khối lớp 12 của 1 trường học;
Người ta cần tạo ở ô [H2] danh sách các lớp để từ đó lựa ra 1 lớp (Ví dụ lớp 12A2)
Thì tại [B3] ta sẽ có dòng tiêu đề báo cáo:

"DANH SÁCH HỌC SINH CỦA LỚP 12A2."


& dưới dòng này có bảng báo cáo liệt kê danh sách của lớp đó với nội dung giống như sau:


5 |TT|SBD|HoTen|Nu|DanToc|Ngayinh
6 |1|3500210|Nguyễn Việt ..|1|Kinh|12/13/1993
7 |2|3500190|Vũ Phú ..||Kinh|1/19/1993
. ||3500900| ..||..|...
Em xin nộp bài cách giải hơi Gà vì mình kết hợp ghi Macro. Mong các thành viên khác góp ý cho em.
 

File đính kèm

  • BaiGiai-Chuot0106.rar
    39.8 KB · Đọc: 86
Lần chỉnh sửa cuối:
Upvote 0
ĐỀ BÀI 2:

@$@!^%
Trong file là CSDL của khối lớp 12 của 1 trường học;
Người ta cần tạo ở ô [H2] danh sách các lớp để từ đó lựa ra 1 lớp (Ví dụ lớp 12A2)
Thì tại [B3] ta sẽ có dòng tiêu đề báo cáo:

"DANH SÁCH HỌC SINH CỦA LỚP 12A2."


& dưới dòng này có bảng báo cáo liệt kê danh sách của lớp đó với nội dung giống như sau:


5 |TT|SBD|HoTen|Nu|DanToc|Ngayinh
6 |1|3500210|Nguyễn Việt ..|1|Kinh|12/13/1993
7 |2|3500190|Vũ Phú ..||Kinh|1/19/1993
. ||3500900| ..||..|...
Làm thử bài này nộp sư phụ xem, module lấy duy nhất lớp sau đó đặt 1 cái tên và sử dụng data validation để đưa vào H2
module trích lọc dữ liệu từ sheet1 qua sheet 2
 

File đính kèm

  • MinIf.rar
    54 KB · Đọc: 93
Upvote 0
Em có một ý kiến nho nhỏ góp ý với anh ChanhTQ, đó là sau một thời gian nhất định nào đó, VD 1 tuần, 2 tuần...(tùy anh) sau khi đưa đề bài anh nên đưa đáp án của anh để bọn em học hỏi thêm với ạ. Hiện tại là bài tập 1 anh vẫn chưa cho đáp án. Chắc có lẽ mới có 1 lời giải của leonguyen nên anh chưa đưa đáp án ạ?
 
Upvote 0
Làm thử bài này nộp sư phụ xem, module lấy duy nhất lớp sau đó đặt 1 cái tên và sử dụng data validation để đưa vào H2
module trích lọc dữ liệu từ sheet1 qua sheet 2
Xem code anh Phi viết thì đâu còn giành cho người mới bắt đầu nữa. Thấy có cả dic và trong đó nữa, cái này chắc phải 1 thời gian dài nữa em mới ngấm được. Em chỉ làm bài này với công cụ của 1 người mới học VBA thôi!
To: ChanhTQ
+ Không thấy anh ChanhTQ nói rõ là lọc trực tiếp trên Sheet1 hay là đưa kết quả sang sheet khác nữa! Lần sau ra đề mong anh có kết quả minh họa bằng tay để cho bọn em đỡ phải đoán mò!
 
Upvote 0
Vài nhận xét macro ở #13

PHP:
Sub DinhDang(i As Long)
'DINH DANG  '
1    Sheet2.Select
    Range("A7:Z2000").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
2   Range("A7:G" & i + 6).Select
   Selection.Borders(xlEdgeLeft).Weight = xlThin
   Selection.Borders(xlEdgeTop).Weight = xlThin
   Selection.Borders(xlEdgeBottom).Weight = xlThin
   Selection.Borders(xlEdgeRight).Weight = xlThin
   Selection.Borders(xlInsideVertical).Weight = xlThin
   Selection.Borders(xlInsideHorizontal).Weight = xlThin
 
End Sub

(*) Nên khai báo thêm 1 biến đếm & dùng 2 vòng lặp cho 2 vùng dòng lệnh sau số 1 & 2;

(*) Vùng chọn Range("A7:Z2000").Select
Là quá dư giả, có nghĩa là chưa tiết kiệm
Nếu là mình thì mình sẽ xem xét lại câu lệnh này: Sheet2.Range("A7:Z100000").ClearContents

Có thể thay bỡi câu lệnh xóa các dòng có chứa dữ liệu học sinh của lần chạy macro lần trước mà thôi.
(Nếu xóa dòng thì macro con DinhDang ta sẽ bớt đi 1 nữa động tác thừa);

Vài thiển í & chúc vui!




 
Upvote 0
[thongbao]+ Không thấy anh ChanhTQ nói rõ là lọc trực tiếp trên Sheet1 hay là đưa kết quả sang sheet khác nữa! Lần sau ra đề mong anh có kết quả minh họa bằng tay để cho bọn em đỡ phải đoán mò![/thongbao]

Đúng là đề bài chưa nói rõ chuyện này;
Nhưng có 1 cái gần như là nguyên tắc rằng đã là CSDL thì ta hết sức tránh thao tác trức tiếp trên nó!

Yêu cầu của đề bài là làm báo cáo thì ngầm định là báo cáo nên ở 1 trang khác.
 
Upvote 0
ĐỀ BÀI 2:mad:$@!^%
Trong file là CSDL của khối lớp 12 của 1 trường học;Người ta cần tạo ở ô [H2] danh sách các lớp để từ đó lựa ra 1 lớp (Ví dụ lớp 12A2)Thì tại [B3] ta sẽ có dòng tiêu đề báo cáo:"DANH SÁCH HỌC SINH CỦA LỚP 12A2."& dưới dòng này có bảng báo cáo liệt kê danh sách của lớp đó với nội dung giống như sau:
5 |TT|SBD|HoTen|Nu|DanToc|Ngayinh 6 |1|3500210|Nguyễn Việt ..|1|Kinh|12/13/1993 7 |2|3500190|Vũ Phú ..||Kinh|1/19/1993 . ||3500900| ..||..|...
Thấy các bạn làm bài mình tham gia tý . Hình như đề chỉ yêu cầu đến cột "Ngày sinh" thì phải . Chuột đúng là nhanh .
 

File đính kèm

  • BaiGiai-NT.rar
    41.9 KB · Đọc: 59
Upvote 0
Bài tập 2A:

Đề bài:
(1) Bạn hãy dịch ngôn ngữ VBA này sang tiếng Việt:

PHP:
 'Tác Giả: Ngoai Thanh;581885'
Private Sub Worksheet_Change(ByVal Target As Range)
1 Application.ScreenUpdating = False
 If Intersect(Target, [H2]) Is Nothing Then Exit Sub
3 Me.UsedRange.Resize(, 8).Offset(5).Clear
 Sheet1.[A6:H2000].AdvancedFilter 2, [IV1:IV2], [A6]
5 Range("G5:H1000").Select
 Selection.Delete Shift:=xlToLeft
7 Range("B3") = "Danh sách h" & ChrW(7885) & "c sinh c" & ChrW(7911) & "a l" & ChrW(7899) & "p" & Range("H2").Value & "."
 Range("D1").Select
9 Application.ScreenUpdating = True
End Sub

(2) Dòng lệnh có số 7 có thể có cách nào khác mà vẫn đạt kết quả như vậy?
 
Upvote 0
Đề bài:
(1) Bạn hãy dịch ngôn ngữ VBA này sang tiếng Việt:

PHP:
 'Tác Giả: Ngoai Thanh;581885'
Private Sub Worksheet_Change(ByVal Target As Range)
1 Application.ScreenUpdating = False
 If Intersect(Target, [H2]) Is Nothing Then Exit Sub
3 Me.UsedRange.Resize(, 8).Offset(5).Clear
 Sheet1.[A6:H2000].AdvancedFilter 2, [IV1:IV2], [A6]
5 Range("G5:H1000").Select
 Selection.Delete Shift:=xlToLeft
7 Range("B3") = "Danh sách h" & ChrW(7885) & "c sinh c" & ChrW(7911) & "a l" & ChrW(7899) & "p" & Range("H2").Value & "."
 Range("D1").Select
9 Application.ScreenUpdating = True
End Sub

(2) Dòng lệnh có số 7 có thể có cách nào khác mà vẫn đạt kết quả như vậy?
Mong anh góp ý chút về lời giả của em!
 
Upvote 0
Web KT
Back
Top Bottom