hongphuong1997
Thành viên tiêu biểu
![](/diendan/data/PhoToDanhHieu/pip.gif)
- Tham gia
- 12/11/17
- Bài viết
- 771
- Được thích
- 321
- Giới tính
- Nữ
Mình có sửa dòng cuối để chuyển từ ngang sang dọc thôi
ThànhIf dic.Count Then UniqueList = dic.Keys
If .Count Then UniqueList = WorksheetFunction.transpose(.Keys)
Function UniqueList(ParamArray arrays())
Dim iTem, aTmpArr, aSubArr
'On Error Resume Next
With CreateObject("Scripting.Dictionary")
For Each aSubArr In arrays
aTmpArr = aSubArr
If Not IsArray(aTmpArr) Then aTmpArr = Array(aTmpArr)
For Each iTem In aTmpArr
If TypeName(iTem) <> "Error" Then
If Len(iTem) Then
If Not .Exists(iTem) Then .ADD iTem, Empty
End If
End If
Next
Next
If .Count Then UniqueList = WorksheetFunction.transpose(.Keys)
End With
End Function
Ban bôi đen vùng cần chứa kết quả và kết thúc bằng 3 phím Ctr + shift + entR4 = UniqueList(D443;J4:J43;G4:G43))
Em cảm ơn chị:Bạn thử dùng hàm này xem. Hàm này bạn đã đăng ở 1 bài viết còn của bạn hỏi về hàm này !
Mình có sửa dòng cuối để chuyển từ ngang sang dọc thôi
Thành
Cách sử dụng thì bạnMã:Function UniqueList(ParamArray arrays()) Dim iTem, aTmpArr, aSubArr 'On Error Resume Next With CreateObject("Scripting.Dictionary") For Each aSubArr In arrays aTmpArr = aSubArr If Not IsArray(aTmpArr) Then aTmpArr = Array(aTmpArr) For Each iTem In aTmpArr If TypeName(iTem) <> "Error" Then If Len(iTem) Then If Not .Exists(iTem) Then .ADD iTem, Empty End If End If Next Next If .Count Then UniqueList = WorksheetFunction.transpose(.Keys) End With End Function
Ban bôi đen vùng cần chứa kết quả và kết thúc bằng 3 phím Ctr + shift + ent
Sub TaoDanhSachKhongTrungTu3Cot()
Dim Rws As Long, J As Long, W As Integer
Dim Dict As Object, Rng As Range, Cls As Range
Set Dict = CreateObject("Scripting.Dictionary")
Rws = [d4].CurrentRegion.Rows.Count
Set Rng = Union([d4].Resize(Rws), [g4].Resize(Rws), [J4].Resize(Rws))
ReDim Arr(1 To Rng.Rows.Count, 1 To 1) As String
For Each Cls In Rng
If Not Dict.exists(Cls.Value) Then
W = W + 1: Arr(W, 1) = Cls.Value
Dict.Add Cls.Value, W
End If
Next Cls
If W Then
[v4].Resize(W).Value = Arr()
End If
End Sub
Cháu cảm ơn bác!Tham gia 1 macro chân phương là vầy
PHP:Sub TaoDanhSachKhongTrungTu3Cot() Dim Rws As Long, J As Long, W As Integer Dim Dict As Object, Rng As Range, Cls As Range Set Dict = CreateObject("Scripting.Dictionary") Rws = [d4].CurrentRegion.Rows.Count Set Rng = Union([d4].Resize(Rws), [g4].Resize(Rws), [J4].Resize(Rws)) ReDim Arr(1 To Rng.Rows.Count, 1 To 1) As String For Each Cls In Rng If Not Dict.exists(Cls.Value) Then W = W + 1: Arr(W, 1) = Cls.Value Dict.Add Cls.Value, W End If Next Cls If W Then [v4].Resize(W).Value = Arr() End If End Sub
Thì chờ các siêu công thức ngang qua ra tay vậy!Bác ơi nhưng cháu thích dùng hàm bác ơi.
Em cảm ơn chị, hàm rất đúng rồi chị ơiBạn thử dùng hàm này xem. Hàm này bạn đã đăng ở 1 bài viết còn của bạn hỏi về hàm này !
Mình có sửa dòng cuối để chuyển từ ngang sang dọc thôi
Thành
Cách sử dụng thì bạnMã:Function UniqueList(ParamArray arrays()) Dim iTem, aTmpArr, aSubArr 'On Error Resume Next With CreateObject("Scripting.Dictionary") For Each aSubArr In arrays aTmpArr = aSubArr If Not IsArray(aTmpArr) Then aTmpArr = Array(aTmpArr) For Each iTem In aTmpArr If TypeName(iTem) <> "Error" Then If Len(iTem) Then If Not .Exists(iTem) Then .ADD iTem, Empty End If End If Next Next If .Count Then UniqueList = WorksheetFunction.transpose(.Keys) End With End Function
Ban bôi đen vùng cần chứa kết quả và kết thúc bằng 3 phím Ctr + shift + ent
Thử dùng hàm của a @Phan Thế Hiệp và @dazkangel nhéCháu cảm ơn bác!
Bác @SA_DQ ơi nhưng cháu thích dùng hàm bác ơi.
R4=IFERROR(INDEX(T(OFFSET($D$4,MOD(ROW($1:$150)-1,50),INT((ROW($1:$150)-1)/50)*3)),MATCH(,INDEX(COUNTIF($R$3:R3,T(OFFSET($D$4,MOD(ROW($1:$150)-1,50),INT((ROW($1:$150)-1)/50)*3))),),0)),"")
OR
S4=IFERROR(INDIRECT(MID(REPT(TEXT(AGGREGATE(15,6,(COLUMN(C:L)*1000+ROW($4:$43))/ISTEXT($C$4:$L$43)/(COUNTIF(S$3:S3,$C$4:$L$43)=0),1),"C000R000"),2),5,8),0),"")
Hàm này mình học từ anh huu_thang đóThử dùng hàm của a @Phan Thế Hiệp và @dazkangel nhé
Mã:R4=IFERROR(INDEX(T(OFFSET($D$4,MOD(ROW($1:$150)-1,50),INT((ROW($1:$150)-1)/50)*3)),MATCH(,INDEX(COUNTIF($R$3:R3,T(OFFSET($D$4,MOD(ROW($1:$150)-1,50),INT((ROW($1:$150)-1)/50)*3))),),0)),"") OR S4=IFERROR(INDIRECT(MID(REPT(TEXT(AGGREGATE(15,6,(COLUMN(C:L)*1000+ROW($4:$43))/ISTEXT($C$4:$L$43)/(COUNTIF(S$3:S3,$C$4:$L$43)=0),1),"C000R000"),2),5,8),0),"")
Học của người là 1 chuyện, biết vận dụng cái học được làm phù hợp với dữ liệu thực tế lại là chuyện khác.Thử dùng hàm của a @Phan Thế Hiệp và @dazkangel nhé
Mã:R4=IFERROR(INDEX(T(OFFSET($D$4,MOD(ROW($1:$150)-1,50),INT((ROW($1:$150)-1)/50)*3)),MATCH(,INDEX(COUNTIF($R$3:R3,T(OFFSET($D$4,MOD(ROW($1:$150)-1,50),INT((ROW($1:$150)-1)/50)*3))),),0)),"") OR S4=IFERROR(INDIRECT(MID(REPT(TEXT(AGGREGATE(15,6,(COLUMN(C:L)*1000+ROW($4:$43))/ISTEXT($C$4:$L$43)/(COUNTIF(S$3:S3,$C$4:$L$43)=0),1),"C000R000"),2),5,8),0),"")
Em cảm ơn anhMuốn dùng hàm tự tạo nhé!
Đây em xem có đúng không nhé.Em cảm ơn anh
Bây giờ em muốn hàm chỉ lấy các dữ liệu xuất hiện 1 lần thì làm như nào hở anh?
(Tức là những dữ liệu nào xuất hiện 2 lần trở lên thì loại đi)
Function loc(ParamArray mang())
Dim T, arr, i As Long, dic As Object, T1, a As Long, s As String
Set dic = CreateObject("scripting.dictionary")
For Each T In mang
For Each T1 In T
s = T1.Value
If Not dic.exists(s) Then
dic.Add s, 1
Else
dic.Item(s) = dic.Item(s) + 1
End If
Next
Next
ReDim arr(1 To dic.Count, 1 To 1)
For Each T In dic.Keys
If dic.Item(T) = 1 Then
a = a + 1
arr(a, 1) = T
End If
Next
If a Then loc = arr
End Function
Function loctrung(ParamArray mang())
Dim T, dic As Object, T1, dic1 As Object, s As String
Set dic = CreateObject("scripting.dictionary")
Set dic1 = CreateObject("scripting.dictionary")
For Each T In mang
For Each T1 In T
s = T1.Value
If Not dic1.exists(s) Then
If Not dic.exists(s) Then
dic.Add s, "KK"
Else
dic.Remove s
dic1.Add s, "KK"
End If
End If
Next
Next
If dic.Count Then loctrung = WorksheetFunction.Transpose(dic.Keys)
Set dic = Nothing
Set dic1 = Nothing
End Function
Em cảm ơn anh rất nhiềuĐây em xem có đúng không nhé.
Mã:Function loc(ParamArray mang()) Dim T, arr, i As Long, dic As Object, T1, a As Long, s As String Set dic = CreateObject("scripting.dictionary") For Each T In mang For Each T1 In T s = T1.Value If Not dic.exists(s) Then dic.Add s, 1 Else dic.Item(s) = dic.Item(s) + 1 End If Next Next ReDim arr(1 To dic.Count, 1 To 1) For Each T In dic.Keys If dic.Item(T) = 1 Then a = a + 1 arr(a, 1) = T End If Next If a Then loc = arr End Function Function loctrung(ParamArray mang()) Dim T, dic As Object, T1, dic1 As Object, s As String Set dic = CreateObject("scripting.dictionary") Set dic1 = CreateObject("scripting.dictionary") For Each T In mang For Each T1 In T s = T1.Value If Not dic1.exists(s) Then If Not dic.exists(s) Then dic.Add s, "KK" Else dic.Remove s dic1.Add s, "KK" End If End If Next Next If dic.Count Then loctrung = WorksheetFunction.Transpose(dic.Keys) Set dic = Nothing Set dic1 = Nothing End Function