Xin giải thuật về bài toán so sánh dữ liệu

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

leba207

Thành viên mới
Tham gia
9/5/10
Bài viết
29
Được thích
1
Em xin mô tả dữ liệu đầu vào và kết quả đầu ra.
1. Đầu vào 2 sheet, mỗi sheet gồm tiêu đề cột là mã hàng, tên hàng.
2. Đầu ra trả kết quả ra 3 vùng.
Vùng 1: cả 2 dữ liệu cùng có
Vùng 2: dữ liệu data 1 có , data 2 không có.
Vùng 3: dữ liệu data 1 không có, data 2 có.
xin mọi người chỉ cách làm bằng VBA.
Xin cám ơn!
 
- Lấy data có số lượng lớn hơn nạp vào Dic ( Giả sử là data1 )
- Quét data2 còn lại, so sánh với Dic:
+ Nếu phần tử data2 có trong Dic -> Gán vào vùng 1. Remove phần tử vừa xét
+ Nếu phần tử data2 không có trong Dic -> Gán vào Vùng 3
+ Gán các phần tử còn lại trong Dic vào Vùng 2
...
1. Đọc bảng 1 vào mảng b1, bảng 2 vào mảng b2
2. Duyệt từng dòng b1. Xét hiện hữu trong bảng 2 (dùng hàm Application.Match hoặc gì đó)
2.1 nếu không có thì ghi vào vùng 2
2.2 nếu có thì ghi vào vùng 1; VÀ đồng thời xoá trị trong mảng b2
3. Duyệt từng dòng b2, cái nào chưa xoá thì ghi vào vùng 3
2 giải thuật này có đúng hay không là còn tùy vào câu trả lời cho bạn snow25. Nhưng chủ thớt lờ câu hỏi của snow25 đi nên không biết mong đợi thế nào. Tuy nhiên lấy duy nhất có lẽ gần với mong đợi. Bởi nếu không thì khi 2 mảng đều chỉ chứa vd. 1000 số 1 thì vùng 1 là 1000 số 1. Lấy 1000 số giống nhau để mà làm gì?

Còn nếu mong đợi là lấy các giá trị duy nhất thì 2 giải thuật là sai. Tôi viết trong notepad, chỉ kiểm tra bằng mắt nhưng hy vọng không viết nhầm.
1.
- Lấy data có số lượng lớn hơn nạp vào Dic ( Giả sử là data1 )
- Quét data2 còn lại, so sánh với Dic:
+ Nếu phần tử data2 có trong Dic -> Gán vào vùng 1. Remove phần tử vừa xét
+ Nếu phần tử data2 không có trong Dic -> Gán vào Vùng 3
+ Gán các phần tử còn lại trong Dic vào Vùng 2
a. Giả sử data2 có 2000 số trong đó 1000 số là 1. Giả sử data1 không có số 1. Vùng 3 sẽ có 1000 số 1.
b. Giả sử data2 có 2000 số trong đó 1000 số là 1. Giả sử data1 có ít nhất 1 số 1. Tức trong dic có 1 số 1. Vung 1 có 1 số 1, Vung 3 có 999 số 1.

2.
1. Đọc bảng 1 vào mảng b1, bảng 2 vào mảng b2
2. Duyệt từng dòng b1. Xét hiện hữu trong bảng 2 (dùng hàm Application.Match hoặc gì đó)
2.1 nếu không có thì ghi vào vùng 2
2.2 nếu có thì ghi vào vùng 1; VÀ đồng thời xoá trị trong mảng b2
3. Duyệt từng dòng b2, cái nào chưa xoá thì ghi vào vùng 3
a. Giả sử data1 có 2000 số trong đó 1000 số là 1. Giả sử data2 không có số 1. Vùng 2 sẽ có 1000 số 1.
b. Giả sử data1 có 2000 số trong đó 1000 số là 1. Giả sử data2 có 5 số 1. Vung 1 có 5 số 1, Vung 2 có 995 số 1.
 
Upvote 0
Giải thuật giả sử rằng hai bên bảng đều chỉ có dữ liệu duy nhất.
Nếu không có điều kiện duy nhất thì giải thuật phải thêm phần dò suốt từng bảng. VÀ:
Nếu bảng 1 có 3 số 1 và bảng 2 có 5 số 1 thì bên kết quả, vùng 1 muốn có 1, 3, 5, hay 15 số 1?
 
Upvote 0
Em đoán: chắc chủ thớt nghĩ SQL ở nền tảng khác.. chứ không nghĩ là SQL trong VBA. :)
mình dùng Atool của để làm.
Bài đã được tự động gộp:

mình dùng atool để làm, dùng join để so sánh lấy ra kết quả mong muôn, nhưng vì chuyển cho máy khác dùng thì không cài atool và nghĩ cách làm sao đơn giản nhất cho người sử dụng nên muốn viết bằng VBA để người dùng chỉ cần bấm nút là kết quả trả ra. còn sử dụng adodb mình sẽ tìm hiểu thêm về. thanks mọi người
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom