Anh có thể hướng dẫn em dùng VBA được không ah
Để thực hiện bằng VBA thì cách triển khai như thế này:
1. Tạo ra danh sách các dữ liệu tổ hợp đầu vào trong đó giải quyết được 2 việc: Mã đối tượng đầu vào (cột 1), Nhóm tổ hợp của đối tượng đó (cột 2); Cái này gọi là Data2.
Cách thức tổ chức số liệu là các phần tử được sắp xếp theo cột nhóm.
2. Danh sách kết hợp dữ liệu Data1 (dữ liệu này có thể từ đâu đó đưa vào) với 1 cột chưa mã kết hợp (bg...)
3. Tạo danh mục tổ hợp từ Data2 theo nguyên tắc:
+ Chỉ được tổ hợp trong nhóm;
+ Không tổ hợp trung (tổ hợp của một phần tử với chính nó)
Tôi làm giúp bạn 1 thủ tục tạo danh sách chuẩn trong data2.
4. So sánh với dữ liệu trong data 1 và trích lọc
[Bạn có thể tự nghiên cứu vì trong diễn đàn có nhiều người nói về cái này]
Với Acess - bạn chỉ cần 2 câu truy vấn, không cần biết code VBA, chỉ cần biết một chút về cấu trúc SQL và thiết kế cơ sở dữ liệu. Sách có rất nhiều.
Trong bài trước tôi chỉ cần dùng 2 truy vấn này
Truy vấn 1: Tạo danh mục kết hợp mã
[GPECODE=vb]
SELECT a.Group, (a.Code1 & "-" & b.code1) AS code
FROM tblSeed AS a INNER JOIN tblSeed AS b ON a.Group = b.Group
WHERE (((a.Code1)<>
.[code1]));
[/GPECODE]
Truy vấn 2: Tạo danh mục mã không tồn tại trong thực tế
[GPECODE=vb]
SELECT qry_combine_all.Group, qry_combine_all.code
FROM qry_combine_all LEFT JOIN tblData ON qry_combine_all.code = tblData.Code
WHERE (((tblData.Code) Is Null));
[/GPECODE]
Với điều kiện có 2 bảng đầu vào như trong bài viết đầu của tôi.
Nhưng với VBA - thì phải tư duy rất nhiều vì phải tưởng tượng ra thuật toán.
Ví dụ đoạn code sau đây - hơi củ chuối nhưng đó là một ví dụ để bạn tưởng tượng.
[GPECODE=vb]Sub CreateCombination() ' Thu tuc tao ra danh sach chuan
Dim InputRange As Range, DstRange As Range, i As Long
Dim Val1 As Range, Val2 As Range
Set InputRange = Range("InputRNG")
Set DstRange = Range("Combination")
Set Val1 = InputRange.Cells(1).Offset(0, 1)
Set Val2 = Val1
While Val1 <> ""
Set Val2 = Val2.Offset(1)
If Val2.Offset(0, -1) <> Val1.Offset(0, -1) Then
Set Val1 = Val1.Offset(1)
Set Val2 = Val1
Else
DstRange.Offset(i + 1) = Val1 & "-" & Val2
DstRange.Offset(i + 2) = Val2 & "-" & Val1
i = i + 2
End If
Wend
End Sub[/GPECODE]