Đặt một Name DK: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...
=IF(Sheet1!$A$2:$A$15=Sheet1!$H2,ROW(Sheet1!$A$2:$A$15)-1,"")
=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..đặt một name dk:
công thức tại i2 (kéo cho các ô còn lại):Mã:=if(sheet1!$a$2:$a$15=sheet1!$h2,row(sheet1!$a$2:$a$15)-1,"")
Mã:=iferror(index($b$2:$b$15,small(dk,column(a$1))),"")
Name DK nó trả về một dãy giá trị số dòng chứ có gì đâu. Gõ =DK, bôi đen DK và nhấn F9 để thấy rõ hơn.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..
Làm thử bằng VBA :P/S: có thể hướng dẫn cả bằng VBA thì tốt ạh...
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àm thử bằng VBA :
PHP:Sub GomdulieuCMND() Sheet1.[H2].Resize(k, j) = dArr End Sub