S
1. Thống kê theo độ tuổi & phái tính của các đơn vị.
Giả dụ chúng ta có CSDL (cơ sở dữ liệu) gồm 5 trường như bảng dẫn ra dưới đây:
H1450|An|True|D|24|| DTuoi |Nam|Nu|Nam|Nu|Nam|Nu|Nam|Nu
J1150|Ba|False|A|54|| <30 |?|?|?|?|?|?|?|?
A8150|Ca|True|A|41|| <40 |?|?|?|?|?|?|?|?
M1205|Na|False|C|34|| <50 |?|?|?|?|?|?|?|?
A0150|La|True|C|19|| >=50 |?|?|?|?|?|?|?|?
M1250|Sa|False|C|34|| Sum ||?||?||?||?
B0050|Xa|True|C|19|||?||?||?||?|
Yêu cầu đề ra là thống kê xem từng đơn vị có bao nhiêu nam hay nữ ở các độ tuổi thanh niên, trung niên, cao tuổi,. . . . khác nhau. Kết quả sẽ phải trả lời bằng số liệu ở các ô có dấu chấm hỏi
Xin mời các bạn xem trong file kèm theo & macro sau:
Mã:
Option Explicit: Option Base 1
[B]Sub ThongKeTheoDoTuoiVaFaiTinh()[/B]
Dim Rng As Range, sRng As Range
Dim MyAdd As String
Dim jJ As Byte, NS As Byte, Tuoi As Byte, Col As Byte, N_N As Byte
Sheet1.Select: Col = [Ai1].End(xlToLeft).Column
Set Rng = Range([d1], [d65500].End(xlUp))
For jJ = 8 To Col Step 2 'Cot H'
ReDim NamNu(4, 2) As Byte
Set sRng = Rng.Find(Cells(1, jJ).Value, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then
MyAdd = sRng.Address
Do
NS = sRng.Offset(, 1).Value
If NS <= 18 Then MsgBox "Tuoi Vi Thành Nien", , "GPE"
Tuoi = Switch(NS < 30, 1, NS < 40, 2, NS < 50, 3, NS >= 50, 4)
If sRng.Offset(, -1).Value Then N_N = 2 Else N_N = 1
NamNu(Tuoi, N_N) = 1 + NamNu(Tuoi, N_N)
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
For NS = 3 To 6
Cells(NS, jJ).Value = NamNu(NS - 2, 1)
Cells(NS, jJ + 1).Value = NamNu(NS - 2, 2)
Next NS
End If
Next jJ
[B]End Sub
[/B] Đính kèm
Sửa lần cuối:

