MrKhoa3108
Thành viên mới

- Tham gia
- 22/10/13
- Bài viết
- 25
- Được thích
- 4
Công thứcDear Anh/Chị diễn đàn,
Hiện tại e có file đính kèm, em chưa nghĩ ra cách nào để lấy từ 3 giá trị trùng trở lên ra từng cell tương ứng.
Với 2 giá trị trùng thì vloopup được và lấy được mà từ 3 trở lên em chưa có cách nào. Anh/Chị nào biết chỉ giúp em với ạ.
Pic minh họa như file :
View attachment 218106
E19=IFERROR(INDEX($B$3:$B$17,AGGREGATE(15,6,ROW($1:$15)/($A$3:$A$17=$D19)/(COUNTIF(OFFSET($B$2,,ROW($1:$15)),$B$3:$B$17)=0),COLUMN(A$1))),"")
=IFERROR(INDEX($B$3:$B$12542,AGGREGATE(15,6,ROW($1:$12542)/($A$3:$A$12542=$F3)/(COUNTIF(OFFSET($B$3,,ROW($1:$12542)),$B$3:$B$12542)=0),COLUMN(A$1))),"")
Thử công thức nàyDear Anh/Chị diễn đàn,
Hiện tại e có file đính kèm, em chưa nghĩ ra cách nào để lấy từ 3 giá trị trùng trở lên ra từng cell tương ứng.
Với 2 giá trị trùng thì vloopup được và lấy được mà từ 3 trở lên em chưa có cách nào. Anh/Chị nào biết chỉ giúp em với ạ.
Pic minh họa như file :
View attachment 218106
E19=IFERROR(INDEX($B$3:$B$17,AGGREGATE(15,6,ROW($1:$15)/($A$3:$A$17=$D19),COLUMN(A1))),"")
Em cảm ơn @saobekhonglac nhé, OK dùng rất OKThử công thức này
Mã:E19=IFERROR(INDEX($B$3:$B$17,AGGREGATE(15,6,ROW($1:$15)/($A$3:$A$17=$D19),COLUMN(A1))),"")
Eo ơi dữ liệu lên tới 12000 dòng, dùng công thức mảng ko ổn đâu, bạn nên dùng VBA hoặc thử dùng Pivot theo file đính kèmEm cảm ơn nhiều, Nó rất đúng với cái mảng e làm mẫu.
Mà em làm thật với cái giá trị nhiều hơn nó lại không được, cứu em
Mã:=IFERROR(INDEX($B$3:$B$12542,AGGREGATE(15,6,ROW($1:$12542)/($A$3:$A$12542=$F3)/(COUNTIF(OFFSET($B$3,,ROW($1:$12542)),$B$3:$B$12542)=0),COLUMN(A$1))),"")
Bạn muốn liệt kê tất cả hay chỉ liệt kê thời gian các mã bị trùngCảm ơn @hocexcel_1991 nhiều nhé, Hi vọng có 1 cao nhân thất lạc vào đây cho em xin 1 đoạn code.
Em góp vui tí cho xôm cửa xôm nhà!Dear Anh/Chị diễn đàn,
Hiện tại e có file đính kèm, em chưa nghĩ ra cách nào để lấy từ 3 giá trị trùng trở lên ra từng cell tương ứng.
Với 2 giá trị trùng thì vloopup được và lấy được mà từ 3 trở lên em chưa có cách nào. Anh/Chị nào biết chỉ giúp em với ạ.
Pic minh họa như file :
View attachment 218106
Sub ThietLapLaiDanhSach()
Dim Rws As Long, J As Long, W As Integer, Dm As Integer
Dim Arr()
LapDSDN
With Sheet1
Rws = [B2].CurrentRegion.Rows.Count
Arr() = [A3].Resize(Rws, 2).Value
For Dm = 3 To [D2].End(xlDown).Row
ReDim dArr(1 To 1, 1 To Rws) As String
.Cells(Dm, "E").Resize(, Rws).Value = dArr()
For J = 1 To UBound(Arr())
If Arr(J, 1) = .Cells(Dm, "D").Value Then
W = W + 1: dArr(1, W) = Arr(J, 2)
End If
Next J
If W Then
.Cells(Dm, "E").Resize(, W).Value = dArr(): W = 0
End If
Next Dm
End With
End Sub
Sub LapDSDN()
Dim Rws As Long
With Sheet1
Rws = .[A2].CurrentRegion.Rows.Count
.Range("A2").Resize(Rws).Copy Destination:=[D2]
Application.CutCopyMode = False
.Range("$D$2").Resize(Rws).RemoveDuplicates Columns:=1, Header:=xlYes
End With
End Sub
Bác làm vậy khi gặp trường hợp các mã trùng không liên tiếp nhau thì không xài được dzồiHứng lên làm chơi, thử, enter không được thì ctrl+shift+enter.
Mã:=IFERROR(VLOOKUP($D19,INDEX($A$3:$B$17,MATCH($D19,$A$3:$A$17,0)+COLUMN(A1)-1,),2,0),"")
Góp vui!!!Dear Anh/Chị diễn đàn,
Hiện tại e có file đính kèm, em chưa nghĩ ra cách nào để lấy từ 3 giá trị trùng trở lên ra từng cell tương ứng.
Với 2 giá trị trùng thì vloopup được và lấy được mà từ 3 trở lên em chưa có cách nào. Anh/Chị nào biết chỉ giúp em với ạ.
Pic minh họa như file :
View attachment 218106
Sub xuat()
Set d2 = CreateObject("Scripting.Dictionary")
Set d3 = CreateObject("Scripting.Dictionary")
a = Range("A3:B" & [A65000].End(xlUp).Row)
For i = LBound(a) To UBound(a)
If Not d2.exists(a(i, 1)) Then d2(a(i, 1)) = d2.Count + 1
d3(a(i, 1)) = d3(a(i, 1)) + 1
Next i
mx = Application.Max(d3.items)
Dim TblD(): ReDim TblD(1 To d2.Count, 1 To mx + 1)
Set d3 = CreateObject("Scripting.Dictionary")
For i = LBound(a) To UBound(a)
d3(a(i, 1)) = d3(a(i, 1)) + 1
TblD(d2(a(i, 1)), 1) = a(i, 1)
TblD(d2(a(i, 1)), d3(a(i, 1)) + 1) = a(i, 2)
Next
Range("d3").Resize(d2.Count, mx + 1) = TblD
End Sub
Cảm ơn cao nhânGóp vui!!!
Mã:Sub xuat() Set d2 = CreateObject("Scripting.Dictionary") Set d3 = CreateObject("Scripting.Dictionary") a = Range("A3:B" & [A65000].End(xlUp).Row) For i = LBound(a) To UBound(a) If Not d2.exists(a(i, 1)) Then d2(a(i, 1)) = d2.Count + 1 d3(a(i, 1)) = d3(a(i, 1)) + 1 Next i mx = Application.Max(d3.items) Dim TblD(): ReDim TblD(1 To d2.Count, 1 To mx + 1) Set d3 = CreateObject("Scripting.Dictionary") For i = LBound(a) To UBound(a) d3(a(i, 1)) = d3(a(i, 1)) + 1 TblD(d2(a(i, 1)), 1) = a(i, 1) TblD(d2(a(i, 1)), d3(a(i, 1)) + 1) = a(i, 2) Next Range("d3").Resize(d2.Count, mx + 1) = TblD End Sub
Em ngàn lần xin lỗi, do bối rối quá viết còn sai chính tả hehe.
E đã test rất là OK- cảm ơn thất lạc đại caLang thang đến đây lúc rỗi & viết macro này:
PHP:Sub ThietLapLaiDanhSach() Dim Rws As Long, J As Long, W As Integer, Dm As Integer Dim Arr() LapDSDN With Sheet1 Rws = [B2].CurrentRegion.Rows.Count Arr() = [A3].Resize(Rws, 2).Value For Dm = 3 To [D2].End(xlDown).Row ReDim dArr(1 To 1, 1 To Rws) As String .Cells(Dm, "E").Resize(, Rws).Value = dArr() For J = 1 To UBound(Arr()) If Arr(J, 1) = .Cells(Dm, "D").Value Then W = W + 1: dArr(1, W) = Arr(J, 2) End If Next J If W Then .Cells(Dm, "E").Resize(, W).Value = dArr(): W = 0 End If Next Dm End With End Sub
Mã:Sub LapDSDN() Dim Rws As Long With Sheet1 Rws = .[A2].CurrentRegion.Rows.Count .Range("A2").Resize(Rws).Copy Destination:=[D2] Application.CutCopyMode = False .Range("$D$2").Resize(Rws).RemoveDuplicates Columns:=1, Header:=xlYes End With End Sub
Nói thêm: Mình trước đây cao nhất chỉ mét sáu lăm hà, giờ không tới