- Tham gia
- 12/8/22
- Bài viết
- 32
- Được thích
- 4
Bạn mình thử code dưới xem nhé!Mình xin chào các bạn diễn đàn. Mình có 1 bảng tính như mô tả hình ảnh, mình cần 1 mã VBA lọc ra số không trùng . Xin cảm ơn các bạn giúp đỡ.
View attachment 279860
Sub Loc()
Dim Dic As Object, Key As String, Arr(), Res(1 To 100, 1 To 1)
Set Dic = CreateObject("scripting.Dictionary")
Dim k As Long, i As Long
On Error Resume Next
With Sheet1
Arr = .Range("C3:E19").Value
For i = 1 To UBound(Arr)
If Arr(i, 1) <> "" And Not Dic.exists(Arr(i, 1)) Then
k = k + 1
Dic.Add (Arr(i, 1)), k
Res(k, 1) = Arr(i, 1)
End If
If Arr(i, 3) <> "" And Not Dic.exists(Arr(i, 3)) Then
k = k + 1...
Bạn mình thử code dưới xem nhé!Mình xin chào các bạn diễn đàn. Mình có 1 bảng tính như mô tả hình ảnh, mình cần 1 mã VBA lọc ra số không trùng . Xin cảm ơn các bạn giúp đỡ.
View attachment 279860
Sub Loc()
Dim Dic As Object, Key As String, Arr(), Res(1 To 100, 1 To 1)
Set Dic = CreateObject("scripting.Dictionary")
Dim k As Long, i As Long
On Error Resume Next
With Sheet1
Arr = .Range("C3:E19").Value
For i = 1 To UBound(Arr)
If Arr(i, 1) <> "" And Not Dic.exists(Arr(i, 1)) Then
k = k + 1
Dic.Add (Arr(i, 1)), k
Res(k, 1) = Arr(i, 1)
End If
If Arr(i, 3) <> "" And Not Dic.exists(Arr(i, 3)) Then
k = k + 1
Dic.Add (Arr(i, 3)), k
Res(k, 1) = Arr(i, 3)
End If
Next i
.Range("G3:G100").ClearContents
.Range("G3").Resize(k, 1).Value = Res
End With
Set Dic = Nothing
End Sub
Nếu code được thì dùng dictionary. Còn không thì copy 2 cột C,E vào cột G rồi remove trùng điMình xin chào các bạn diễn đàn. Mình có 1 bảng tính như mô tả hình ảnh, mình cần 1 mã VBA lọc ra số không trùng . Xin cảm ơn các bạn giúp đỡ.
View attachment 279860
Cảm ơn bạn, Code chạy như ý mình luôn hihiBạn mình thử code dưới xem nhé!
PHP:Sub Loc() Dim Dic As Object, Key As String, Arr(), Res(1 To 100, 1 To 1) Set Dic = CreateObject("scripting.Dictionary") Dim k As Long, i As Long On Error Resume Next With Sheet1 Arr = .Range("C3:E19").Value For i = 1 To UBound(Arr) If Arr(i, 1) <> "" And Not Dic.exists(Arr(i, 1)) Then k = k + 1 Dic.Add (Arr(i, 1)), k Res(k, 1) = Arr(i, 1) End If If Arr(i, 3) <> "" And Not Dic.exists(Arr(i, 3)) Then k = k + 1 Dic.Add (Arr(i, 3)), k Res(k, 1) = Arr(i, 3) End If Next i .Range("G3:G100").ClearContents .Range("G3").Resize(k, 1).Value = Res .Range("G3").Sort = xlAscending End With Set Dic = Nothing End Sub
Sub ABC()
Dim sArr(), i&, j&
Dim Dic As Object: Set Dic = CreateObject("Scripting.Dictionary")
With Sheet1
sArr = .Range("C2:E19").Value
For i = 2 To UBound(sArr)
For j = 1 To UBound(sArr, 2)
If sArr(i, j) <> Empty Then
If IsNumeric(sArr(i, j)) = True Then
If Dic.exists(sArr(i, j)) = False Then
Dic.Add (sArr(i, j)), ""
End If
End If
End If
Next
Next
.Range("G3").Resize(Dic.Count).Value = Application.WorksheetFunction.Transpose(Dic.keys)
.Range("G4").Resize(Dic.Count).Sort .Range("G3"), xlAscending
End With
End Sub
Thử code.Mình xin chào các bạn diễn đàn. Mình có 1 bảng tính như mô tả hình ảnh, mình cần 1 mã VBA lọc ra số không trùng . Xin cảm ơn các bạn giúp đỡ.
View attachment 279860
Sub abc()
Dim i As Long, arr, data() As Boolean, min As Long, max As Long, a As Long
With Sheets("sheet1")
arr = .Range("C3:E20")
min = WorksheetFunction.min(.Range("C3:E20"))
max = WorksheetFunction.max(.Range("C3:E20"))
ReDim data(min To max)
For i = 1 To UBound(arr)
If arr(i, 1) <> Empty Then data(arr(i, 1)) = True
If arr(i, 3) <> Empty Then data(arr(i, 3)) = True
Next i
ReDim kq(1 To max - min, 1 To 1)
For i = min To max
If data(i) = True Then
a = a + 1
kq(a, 1) = i
End If
Next i
.Range("H3:H100").ClearContents
.Range("H3").Resize(a).Value = kq
End With
End Sub
Cảm ơn bạn. Cách của bạn nó lại sai ở chổ lọc cột D không mong muốn, Mình chỉ lọc cột C và cột E thôi, cột D nó là số hay chữ không liên quan gìThem cach khác tham khảo
Mã:Sub ABC() Dim sArr(), i&, j& Dim Dic As Object: Set Dic = CreateObject("Scripting.Dictionary") With Sheet1 sArr = .Range("C2:E19").Value For i = 2 To UBound(sArr) For j = 1 To UBound(sArr, 2) If sArr(i, j) <> Empty Then If IsNumeric(sArr(i, j)) = True Then If Dic.exists(sArr(i, j)) = False Then Dic.Add (sArr(i, j)), "" End If End If End If Next Next .Range("G3").Resize(Dic.Count).Value = Application.WorksheetFunction.Transpose(Dic.keys) .Range("G4").Resize(Dic.Count).Sort .Range("G3"), xlAscending End With End Sub
Nếu bạn biết sửa code thì sẽ đạt được mục đích màMình chỉ lọc cột C và cột E thôi, cột D nó là số hay chữ không liên quan gì
Bạn thử code sau nhé:Mình xin chào các bạn diễn đàn. Mình có 1 bảng tính như mô tả hình ảnh, mình cần 1 mã VBA lọc ra số không trùng . Xin cảm ơn các bạn giúp đỡ.
View attachment 279860
Sub GopDL_HLMT()
Dim strSQL As String
strSQL = "Select F1 From [Sheet1$C3:C100] " & _
"Union All Select F1 From [Sheet1$E3:E]"
With CreateObject("ADODB.Recordset")
.Open ("Select Distinct F1 From (" & strSQL & ") Where F1 Is Not Null"), "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
Sheet1.Range("H3").CopyFromRecordset .DataSource
End With
End Sub
Dict hay nhưng viết vậy có lẽ hơi dài dòng:Bạn mình thử code dưới xem nhé!
PHP:Sub Loc() Dim Dic As Object, Key As String, Arr(), Res(1 To 100, 1 To 1) Set Dic = CreateObject("scripting.Dictionary") Dim k As Long, i As Long On Error Resume Next With Sheet1 Arr = .Range("C3:E19").Value For i = 1 To UBound(Arr) If Arr(i, 1) <> "" And Not Dic.exists(Arr(i, 1)) Then k = k + 1 Dic.Add (Arr(i, 1)), k Res(k, 1) = Arr(i, 1) End If If Arr(i, 3) <> "" And Not Dic.exists(Arr(i, 3)) Then k = k + 1 Dic.Add (Arr(i, 3)), k Res(k, 1) = Arr(i, 3) End If Next i .Range("G3:G100").ClearContents .Range("G3").Resize(k, 1).Value = Res End With Set Dic = Nothing End Sub
Sub Loc2()
Dim Dic As Object, I As Long, J
Set Dic = CreateObject("scripting.Dictionary")
With Sheets("Sheet1")
Arr = .Range("C3:E19").Value
For I = 1 To UBound(Arr)
For Each J In Array(1, 3)
If Arr(I, J) <> "" And Not Dic.exists(Arr(I, J)) Then Dic.Add Arr(I, J), ""
Next
Next I
.Range("G3", "G" & Rows.Count).ClearContents
.Range("G3").Resize(Dic.Count, 1).Value = Application.Transpose(Dic.keys)
End With
End Sub
Cám ơn bác đã xem bài, tôi cũng đang lọ mọ ấy mà!Dict hay nhưng viết vậy có lẽ hơi dài dòng:
Mã:Sub Loc2() Dim Dic As Object, I As Long, J Set Dic = CreateObject("scripting.Dictionary") With Sheets("Sheet1") Arr = .Range("C3:E19").Value For I = 1 To UBound(Arr) For Each J In Array(1, 3) If Arr(I, J) <> "" And Not Dic.exists(Arr(I, J)) Then Dic.Add Arr(I, J), "" Next Next I .Range("G3", "G" & Rows.Count).ClearContents .Range("G3").Resize(Dic.Count, 1).Value = Application.Transpose(Dic.keys) End With End Sub