Tìm kiếm phần tử chung của nhiều mảng

Liên hệ QC

thungdols

Thành viên chính thức
Tham gia
27/3/09
Bài viết
66
Được thích
2
Em có một bài toán nhờ các anh chị trên GPE giúp đỡ:
Bài toán là:
Em có 3 mảng trong cùng 1 sheet. Mỗi mảng có 3 dòng và 10 cột.
Hãy dùng câu lệnh VBA để tìm kiếm phần tử cùng xuất hiện cả trong 3 mảng . Rồi điền vào dòng 15.
Em xin chân thành cám ơn toàn thể anh chị GPE. Chúc các anh,chị luôn hạnh phúc}}}}}}}}}}}}}}}
 

File đính kèm

1. Khi tìm thấy một phần tử trong dòng 1 bảng đối chiếu xuất hiện trong dữ liệu thì có tiếp tục tìm các phần tử khác hay không?
2. Bảng đối chiếu của bạn chỉ có 2 dòng hay có thể nhiều hơn?

Dạ tất nhiên là có rồi. nhưng khi tìm được các phần tử khác nữa thì ta lại có các mảng khác. ( nhưng không đem mảng này so sánh với mảng tìm được ở phần tử đầu.). Em không biết giải thích thế nào cho dễ hiểu được.
Ví dụ thế này nhé:
- Các Mảng cùng có thuộc tính A thì đem so sánh với nhau để tìm ra phần tử chung là X. nếu không có thì để trống
- Các mảng cùng có thuộc tính B thì đem so sánh với nhau để tìm được phần tử chung là Y nếu không có thì để trống
................
thuộc tính em nói ở đây là có cùng điều kiện để tìm ra mảng đó.
 
Lần chỉnh sửa cuối:
Upvote 0
2. Bảng đối chiếu của bạn chỉ có 2 dòng hay có thể nhiều hơn?
 
Upvote 0
PHP:
Sub GPE()
Dim Cll As Range, FCll As Range, iCll As Range, FirstRow As Long, Arr(), i As Long
Result.[C6:AC65536].ClearContents
For Each Cll In Result.[C2:AC2]
    Set FCll = Data.[C:AC].Find(Cll.Value, Data.[C1], xlValues, 1)
    If FCll Is Nothing Then GoTo NextCll
    FirstRow = FCll.Row
    i = 0
    Do
        Set FCll = Data.[C:AC].FindNext(FCll)
        If WorksheetFunction.CountIf(Data.Cells(FCll.Row + 1, 3).Resize(, 27), Cll.Offset(1)) > 0 Then
            i = i + 1
            ReDim Preserve Arr(1 To i)
            Arr(i) = FCll.Row + 2
        End If
    Loop Until FCll.Row = FirstRow

    For Each iCll In Data.Cells(Arr(1), 3).Resize(3, 27)
        For i = 2 To UBound(Arr)
            If Data.Cells(Arr(i), 3).Resize(3, 27).Find(What:=iCll.Value, LookAt:=xlWhole) Is Nothing Then
                GoTo NextiCll
            End If
        Next
        Result.Cells(65536, Cll.Column).End(xlUp).Offset(1).Value = iCll.Value
NextiCll:
    Next
NextCll:
Next
End Sub
Bạn tải file về chạy thử được chưa.
 

File đính kèm

Upvote 0
Em chân thành cám ơn anh. Quá tuyệt vời Anh ah. Chúc anh luôn luôn vui vẻ và hạnh phúc.
 
Lần chỉnh sửa cuối:
Upvote 0
Anh xem lại giúp em 1 chút nha. Nếu điều kiện xuất hiện tại dòng cuối cùng và tìm ra mảng không có dữ liệu hoặc sau hàng điều kiện là hàng trống thì bỏ qua mảng đó khi so sánh nha. Chân thành cám ơn anh
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom