Tìm nhóm dòng

Liên hệ QC

sep_hatxel

Thành viên thường trực
Tham gia
24/5/10
Bài viết
217
Được thích
7
Mình có một vấn đề rất phức tạp như sau:
CSDL ở sheet N1, N2, N3, N4, N5, N6, N7: Phần dữ liệu có giá trị nhỏ nhất là 1. Vấn đề như sau: tìm dòng dữ liệu của sheet này ghép với dòng dữ liệu của sheet kia để kết quả ghép với nhau thành nhóm dòng sao cho cột dữ liệu nào của nhóm dòng KQ đều xuất hiện giá trị nhỏ nhất 1 (Trong cùng một nhóm dòng KQ ghép với nhau không được ghép 2 dòng trong cùng một sheet ). Kết quả ghép 2 dòng dán vào sheet KQ2, kết quả ghép 3 dòng dán vào sheetKQ3, ..., kết quả ghép 5 dòng dán vào sheetKQ5 (Trong cùng sheetKQ nếu có nhiều nhóm dòng thoả mãn điều kiện thì các nhóm cách nhau 1 dòng).
Rất mong sự giúp đỡ của các bạn! Xin chân thành cảm ơn các bạn! (Mình xin gửi kèm theo file minh họa)
 

File đính kèm

  • Tim_nhom.xlsx
    28.3 KB · Đọc: 17
Bạn lại có thêm một ý tưởng độc đáo. Tuy nhiên cần xem lại chỗ này: Điều kiện ràng buộc "...sao cho cột dữ liệu nào của nhóm dòng KQ đều xuất hiện giá trị nhỏ nhất 1..." chỉ phù hợp với ghép 2 dòng. Nếu ghép hơn 2 dòng sẽ dẫn tới việc ghép vô hạn.
 
Bạn lại có thêm một ý tưởng độc đáo. Tuy nhiên cần xem lại chỗ này: Điều kiện ràng buộc "...sao cho cột dữ liệu nào của nhóm dòng KQ đều xuất hiện giá trị nhỏ nhất 1..." chỉ phù hợp với ghép 2 dòng. Nếu ghép hơn 2 dòng sẽ dẫn tới việc ghép vô hạn.
Vâng! Nếu ghép 3 dòng trở lên đúng là rất nhiều phép tính nhưng mình nghĩ excel vẫn có thể thực hiện được và quan trọng là Kết quả cuối cùng thì chỉ có ít nhóm ghép là thoả mãn điều kiện! Rất mong bạn quan tâm giúp đỡ!
Cảm ơn bạn rất nhiều!
 
-Ghép nhiều, thậm chí rất nhiều hoàn toàn khác với ghép vô hạn. Ghép vô hạn là do điều kiện ràng buộc không hợp lý.
1 0 8 2 1 1 6 7
7 1 1 1 6 4 1 1
6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7
0 0 0 0 0 0 0 0

-5 dòng trên được ghép theo đúng điều kiện bạn nêu ra ( cột nào cũng có số 1). Tuy nhiên chỉ 2 dòng đầu là ghép có quy luật. Còn 3 dòng sau là bất kỳ, dữ liệu thế nào cũng được. Chẳng có quy luật gì thì làm sao chọn để ghép.
-Cũng có thể mình chưa hiểu hết ý bạn. Bạn có thể diễn giải rõ hơn, nhất là cho nhiều ví dụ minh họa.
 
Lần chỉnh sửa cuối:
-Ghép nhiều, thậm chí rất nhiều hoàn toàn khác với ghép vô hạn. Ghép vô hạn là do điều kiện ràng buộc không hợp lý.
1 0 8 2 1 1 6 7
7 1 1 1 6 4 1 1
6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7
0 0 0 0 0 0 0 0

-5 dòng trên được ghép theo đúng điều kiện bạn nêu ra ( cột nào cũng có số 1). Tuy nhiên chỉ 2 dòng đầu là ghép có quy luật. Còn 3 dòng sau là bất kỳ, dữ liệu thế nào cũng được. Chẳng có quy luật gì thì làm sao chọn để ghép.
-Cũng có thể mình chưa hiểu hết ý bạn. Bạn có thể diễn giải rõ hơn, nhất là cho nhiều ví dụ minh họa.
Vâng! Mình hiểu ý của bạn! Đúng là điều kiện của mình rộng quá, nếu đã 2 dòng thoả mãn rồi thì nó ghép thêm bao nhiêu dòng cũng sẽ vẫn thoả mãn! Vậy mình mạn phép đưa ra điều kiện này: Ban đầu là tìm ghép nhóm 2 dòng nếu không có 1 nhóm nào thoả mãn thì chuyển sang tìm ghép nhóm 3 dòng, nếu cũng không có nhóm nào thoả mãn thì lại chuyển sang tìm ghép nhóm 4 dòng, ..v..v.. cứ như vậy cho đến khi tìm được nhóm ghép thoả mãn điều kiện với số dòng ghép là n dòng ít nhất và khi tìm xong tất cả các nhóm ghép có số dòng ghép là n dòng ít nhất thoả mãn điều kiện như vậy thì kết thúc cuộc tìm kiếm (Với điều kiện là trong cùng nhóm dòng được ghép không được có 2 dòng trong cùng một sheet dữ liệu).
Mong bạn xem giúp điều kiện trên có thể làm được không ạ? Cảm ơn bạn rất nhiều!
 
Bạn thử kiểm lại & chỉ mới trường hợp ghép 2 dòng

--=0 --=0 --=0
--=0 --=0 --=0
--=0 --=0 --=0
 

File đính kèm

  • gpeThuThuat.rar
    17.6 KB · Đọc: 5
Mình có một vấn đề rất phức tạp như sau:
CSDL ở sheet N1, N2, N3, N4, N5, N6, N7: Phần dữ liệu có giá trị nhỏ nhất là 1. Vấn đề như sau: tìm dòng dữ liệu của sheet này ghép với dòng dữ liệu của sheet kia để kết quả ghép với nhau thành nhóm dòng sao cho cột dữ liệu nào của nhóm dòng KQ đều xuất hiện giá trị nhỏ nhất 1 (Trong cùng một nhóm dòng KQ ghép với nhau không được ghép 2 dòng trong cùng một sheet ). Kết quả ghép 2 dòng dán vào sheet KQ2, kết quả ghép 3 dòng dán vào sheetKQ3, ..., kết quả ghép 5 dòng dán vào sheetKQ5 (Trong cùng sheetKQ nếu có nhiều nhóm dòng thoả mãn điều kiện thì các nhóm cách nhau 1 dòng).
Rất mong sự giúp đỡ của các bạn! Xin chân thành cảm ơn các bạn! (Mình xin gửi kèm theo file minh họa)
Góp một cách ghép 2 dòng:
Mã:
Private Sub Worksheet_Activate()
Dim I, J, M, N, K, Vung, VungDo
[a1:aj10000].ClearContents
For I = 1 To 6
Set Vung = Sheets("N" & I).[a4:a13]
    For J = I + 1 To 7
    Set VungDo = Sheets("N" & J).[a4:a13]
        For M = 1 To 10
            For N = 1 To 10
                 K = 1
                 Do
                    If K = 35 Then
                        [a10000].End(xlUp)(3).Resize(, 36).Value = Vung(M).Resize(, 36).Value
                        [a10000].End(xlUp)(2).Resize(, 36).Value = VungDo(N).Resize(, 36).Value
                        Exit Do
                    End If
                        If Vung(M).Offset(, K) = 1 Or VungDo(N).Offset(, K) = 1 Then
                            K = K + 1
                        Else
                            Exit Do
                        End If
                  Loop
              Next N
        Next M
    Next J
Next I
End Sub
Còn ghép 3, 4, 5 thì tăng vòng lặp lên thôi, nhưng máy dễ bị...."tèo". Ghép 3 dòng cho kết quả rất nhiều, trong bài mới thử tới 3, chưa dám 4 hoặc 5. bạn chọn sheet "KQ2", "KQ3" xem kết quả & kiểm tra thử xem chứ nhìn nó chóng mặt lắm
Mình mới chỉ nghĩ cách giải bằng vòng lặp xử lý trực tiếp trên sheet nên ghép 3 là nó chạy hơi chậm rồi, không biết "chơi" nó bằng mảng được hông nữa
Thân
Híc
 

File đính kèm

  • Tim_nhom_gi_do.rar
    106.2 KB · Đọc: 6
/-(ỏng biết bạn Cò Già của tôi ghép 3 dòng với tiêu chí sao nữa luôn!

Nếu điều kiện là bất kì cột nào trong 3 dòng ghép chỉ cần chứa 1 số 1 thì => Bài toán vô số nghiệm, nếu một khi ghép 2 dòng đã có nghiệm

Nếu điều kiện là bất kì cột nào trong 3 dòng ghép lại cần có 2 con số 1 thì không nghiệm nào là cái chắc luôn!
 
Nếu điều kiện là bất kì cột nào trong 3 dòng ghép chỉ cần chứa 1 số 1 thì => Bài toán vô số nghiệm, nếu một khi ghép 2 dòng đã có nghiệm

Nếu điều kiện là bất kì cột nào trong 3 dòng ghép lại cần có 2 con số 1 thì không nghiệm nào là cái chắc luôn!
Híc
- Em ghép theo yêu cầu của chủ topic này bác ạ:
3 dòng của 3 sheet ghép lại có đủ số 1 theo cột
- Một khi đã ghép 2 dòng đã có nghiệm, theo em nó chỉ có thêm 50 nghiệm nữa thôi chứ bác vì:
sep_hatxel
Tìm nhóm dòng
Mình có một vấn đề rất phức tạp như sau:
CSDL ở sheet N1, N2, N3, N4, N5, N6, N7: Phần dữ liệu có giá trị nhỏ nhất là 1. Vấn đề như sau: tìm dòng dữ liệu của sheet này ghép với dòng dữ liệu của sheet kia để kết quả ghép với nhau thành nhóm dòng sao cho cột dữ liệu nào của nhóm dòng KQ đều xuất hiện giá trị nhỏ nhất 1 (Trong cùng một nhóm dòng KQ ghép với nhau không được ghép 2 dòng trong cùng một sheet ). Kết quả ghép 2 dòng dán vào sheet KQ2, kết quả ghép 3 dòng dán vào sheetKQ3, ..., kết quả ghép 5 dòng dán vào sheetKQ5 (Trong cùng sheetKQ nếu có nhiều nhóm dòng thoả mãn điều kiện thì các nhóm cách nhau 1 dòng).
Nên kết quả của ghép 3 dòng nhiều hay ít tùy vào dữ liệu
Kết quả ghép 2 dòng càng nhiều thì ghép 3 dòng càng....kinh khủng
Chưa ăn sáng, làm đại, hổng biết trúng hông nữa
Híc
 
Híc
- Em ghép theo yêu cầu của chủ topic này bác ạ:
3 dòng của 3 sheet ghép lại có đủ số 1 theo cột
- Một khi đã ghép 2 dòng đã có nghiệm, theo em nó chỉ có thêm 50 nghiệm nữa thôi chứ bác vì:

Nên kết quả của ghép 3 dòng nhiều hay ít tùy vào dữ liệu
Kết quả ghép 2 dòng càng nhiều thì ghép 3 dòng càng....kinh khủng
Chưa ăn sáng, làm đại, hổng biết trúng hông nữa
Híc
/)ạ! Bác Concogia đúng rồi ạ! Mong bác giúp hộ trường hợp còn lại ạ! Hì, chậm như vậy là nhanh lắm rồi ạ! Cảm ơn bác Concogia và các Bạn đã giúp đỡ! Thân ái!
 
/)ạ! Bác Concogia đúng rồi ạ! Mong bác giúp hộ trường hợp còn lại ạ! Hì, chậm như vậy là nhanh lắm rồi ạ! Cảm ơn bác Concogia và các Bạn đã giúp đỡ! Thân ái!

/-)úng là đúng thế nào; Như trong trường hợp sau:

Ở KQ2 ta đã tìm ra nghiệm
7N1|. . .
5N2|. . .

Vậy khi ghép 3 thì cặp dòng này sẽ là nghiệm khi ghép với bất kỳ dòng nào được lấy ra từ N3;

Vậy tác gia & ConCòGià sẽ lấy ra dòng nào từ 9 dòng của N3 đây?
Dòng 4 (vòng lặp từ trên xuống), hay dòng 13 (vòng lặp ngược từ dưới lên & Nếu cắt cớ tôi dùng Randomize từ 4 - 13 thì dẫn đến cải lộn nhau à?

/-(ình như chủ topic chưa định hướng cho í tưởng mình thì fải?!
 
/-)úng là đúng thế nào; Như trong trường hợp sau:

Ở KQ2 ta đã tìm ra nghiệm
7N1|. . .
5N2|. . .

Vậy khi ghép 3 thì cặp dòng này sẽ là nghiệm khi ghép với bất kỳ dòng nào được lấy ra từ N3;

Vậy tác gia & ConCòGià sẽ lấy ra dòng nào từ 9 dòng của N3 đây?
Dòng 4 (vòng lặp từ trên xuống), hay dòng 13 (vòng lặp ngược từ dưới lên & Nếu cắt cớ tôi dùng Randomize từ 4 - 13 thì dẫn đến cải lộn nhau à?

/-(ình như chủ topic chưa định hướng cho í tưởng mình thì fải?!
Máy (chứ hổng phải em) nó lấy luôn 10 dòng của N3
Theo em, mỗi cặp khi thoả, ghép 3 dòng sẽ được 50 kết quả:
Cụ thể: 7N1 & 5N2 thoả ==> kết hợp với 1N3, 2N3, 3N3......1N4, 2N4.......7N7, 8N7, 9N7, 10N7 ==> cho ra 50 kết quả thoả
Ghép 2 dòng em cho 2 vòng lặp chạy lệch 1 "thằng N", ghép 3 dòng em cho 3 thằng chạy lệch 1 & 2 "thằng N", bảo đảm từng em một trong 7 sheet sẽ giáp mặt với nhau theo đúng cột hết
Cũng may chỉ có 7 sheet, mỗi sheet 10 dòng & 36 cột chứ nhiều hơn nữa thì cũng chẳng biết làm sao nữa
Nói chung là rối rắm & nhức đầu lắm, hông làm nữa đâu, để sức tối...nhậu
Híc
 
Máy (chứ hổng phải em) nó lấy luôn 10 dòng của N3
Theo em, mỗi cặp khi thoả, ghép 3 dòng sẽ được 50 kết quả:
Cụ thể: 7N1 & 5N2 thoả ==> kết hợp với 1N3, 2N3, 3N3......1N4, 2N4.......7N7, 8N7, 9N7, 10N7 ==> cho ra 50 kết quả thoả
Ghép 2 dòng em cho 2 vòng lặp chạy lệch 1 "thằng N", ghép 3 dòng em cho 3 thằng chạy lệch 1 & 2 "thằng N", bảo đảm từng em một trong 7 sheet sẽ giáp mặt với nhau theo đúng cột hết
Cũng may chỉ có 7 sheet, mỗi sheet 10 dòng & 36 cột chứ nhiều hơn nữa thì cũng chẳng biết làm sao nữa
Nói chung là rối rắm & nhức đầu lắm, hông làm nữa đâu, để sức tối...nhậu
Híc
Vâng! Ý tưởng ban đầu giống như bác Concogia nghĩ đấy ạ! Đúng là điều kiện rộng quá, nếu mỗi sheet có nhiều dòng và cột thì đúng là khủng khiếp! Vậy mình mạn phép đưa ra điều kiện này cách tìm sẽ giảm bớt đi ạ: Ban đầu là tìm ghép nhóm 2 dòng nếu không có 1 nhóm nào thoả mãn thì chuyển sang tìm ghép nhóm 3 dòng, nếu cũng không có nhóm nào thoả mãn thì lại chuyển sang tìm ghép nhóm 4 dòng, ..v..v.. cứ như vậy cho đến khi tìm được nhóm ghép thoả mãn điều kiện với số dòng ghép là n dòng ít nhất và khi tìm xong tất cả các nhóm ghép có số dòng ghép là n dòng ít nhất thoả mãn điều kiện như vậy thì kết thúc cuộc tìm kiếm (Với điều kiện là trong cùng nhóm dòng được ghép không được có 2 dòng trong cùng một sheet dữ liệu).
Mong các bạn xem giúp điều kiện trên có thể làm được không ạ? Cảm ơn rất nhiều!
 
Vâng! Ý tưởng ban đầu giống như bác Concogia nghĩ đấy ạ! Đúng là điều kiện rộng quá, nếu mỗi sheet có nhiều dòng và cột thì đúng là khủng khiếp! Vậy mình mạn phép đưa ra điều kiện này cách tìm sẽ giảm bớt đi ạ: Ban đầu là tìm ghép nhóm 2 dòng nếu không có 1 nhóm nào thoả mãn thì chuyển sang tìm ghép nhóm 3 dòng, nếu cũng không có nhóm nào thoả mãn thì lại chuyển sang tìm ghép nhóm 4 dòng, ..v..v.. cứ như vậy cho đến khi tìm được nhóm ghép thoả mãn điều kiện với số dòng ghép là n dòng ít nhất và khi tìm xong tất cả các nhóm ghép có số dòng ghép là n dòng ít nhất thoả mãn điều kiện như vậy thì kết thúc cuộc tìm kiếm (Với điều kiện là trong cùng nhóm dòng được ghép không được có 2 dòng trong cùng một sheet dữ liệu).
Mong các bạn xem giúp điều kiện trên có thể làm được không ạ? Cảm ơn rất nhiều!
Làm mấy bài của bạn này đau đầu thiệt. Bạn test thử có sai sót gì không.
 

File đính kèm

  • GPE.xls
    85 KB · Đọc: 7
Web KT

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

Back
Top Bottom