Gộp dữ liệu từ nhiều hàng (4 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Cá ngừ F1

( ͡° ͜ʖ ͡°)
Thành viên BQT
Moderator
Tham gia
1/1/08
Bài viết
2,579
Được thích
3,723
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Quan hệ.. và quan hệ..
E có 1 file thông tin khách hàng
Một khách hàng có 1 số CMT, tuy nhiên các thông tin lại ở các dòng khác nhau
Bây giờ e muốn gộp lại thành 1 dòng ứng với từng số CMT
Mong các anh/chị giúp đỡ
P/S: có thể hướng dẫn cả bằng VBA thì tốt ạh...
 

File đính kèm

E có 1 file thông tin khách hàng
Một khách hàng có 1 số CMT, tuy nhiên các thông tin lại ở các dòng khác nhau
Bây giờ e muốn gộp lại thành 1 dòng ứng với từng số CMT
Mong các anh/chị giúp đỡ
P/S: có thể hướng dẫn cả bằng VBA thì tốt ạh...
Đặt một Name DK:
Mã:
=IF(Sheet1!$A$2:$A$15=Sheet1!$H2,ROW(Sheet1!$A$2:$A$15)-1,"")
Công thức tại I2 (kéo cho các ô còn lại):
Mã:
=IFERROR(INDEX($B$2:$B$15,SMALL(DK,COLUMN(A$1))),"")
 

File đính kèm

đặt một name dk:
Mã:
=if(sheet1!$a$2:$a$15=sheet1!$h2,row(sheet1!$a$2:$a$15)-1,"")
công thức tại i2 (kéo cho các ô còn lại):
Mã:
=iferror(index($b$2:$b$15,small(dk,column(a$1))),"")
bài thì đã làm được, nhưng khai triển cái name dk ra mà chưa hiểu rõ lắm.. Mong leonguyen giải thích giùm..
 
P/S: có thể hướng dẫn cả bằng VBA thì tốt ạh...
Làm thử bằng VBA :
PHP:
Sub GomdulieuCMND()
Dim i    As Long
Dim k    As Long
Dim j    As Long
Dim Dic  As Object
Dim sArr(), dArr()

sArr = Sheet1.Range("A2:B" & Sheet1.[A65536].End(xlUp).Row).Value
ReDim dArr(1 To UBound(sArr), 1 To 2)
Set Dic = CreateObject("Scripting.dictionary")

With Dic
For i = 1 To UBound(sArr)
    If Not .exists(sArr(i, 1)) Then
        k = k + 1
        .Add sArr(i, 1), Array(k, 2)
        dArr(k, 1) = sArr(i, 1)
        dArr(k, 2) = sArr(i, 2)
    Else
    If .Item(sArr(i, 1))(1) + 1 > j Then j = .Item(sArr(i, 1))(1) + 1
        ReDim Preserve dArr(1 To UBound(sArr), 1 To j)
        dArr(.Item(sArr(i, 1))(0), .Item(sArr(i, 1))(1) + 1) = sArr(i, 2)
        .Item(sArr(i, 1)) = Array(.Item(sArr(i, 1))(0), .Item(sArr(i, 1))(1) + 1)
    End If
Next
End With

Sheet1.[H2].Resize(k, j) = dArr
Set Dic = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Làm thử bằng VBA :
PHP:
Sub GomdulieuCMND()
Sheet1.[H2].Resize(k, j) = dArr

End Sub

Code viết hay lắm mà nên sửa đoạn trên thành đề phòng lỗi

[GPECODE=vb]
Sheet1.[H8].Resize(k, Application.WorksheetFunction.Max(UBound(sArr, 2), j)) = dArr
[/GPECODE]

Vì nếu dữ liệu không có hoặc 1 dòng sẽ báo lỗi
 
Web KT

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

Back
Top Bottom