hiénlinh197
Thành viên tiêu biểu
![](/diendan/data/PhoToDanhHieu/pip.gif)
- Tham gia
- 26/5/09
- Bài viết
- 491
- Được thích
- 113
Thử codeNhờ các bạn sửa giúp code theo file đính kèm,
Cảm ơn các bạn!
Sub Rectangle1_Click()
Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long
Arr = Sheet1.Range("l3:z22").Value
ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
For i = 1 To UBound(Arr, 1)
k = 0
For j = 1 To UBound(Arr, 2)
If Arr(i, j) <> "" Then
k = k + 1
kq(i, k) = Arr(i, j)
End If
Next j
If jMax < k Then jMax = k 'Tính só cot ket qua
Next i
Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq
End Sub
Cảm ơn anhThử codeNếu không đúng ý thì nhập kết quả và gởi lênMã:Sub Rectangle1_Click() Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long Arr = Sheet1.Range("l3:z22").Value ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2)) For i = 1 To UBound(Arr, 1) k = 0 For j = 1 To UBound(Arr, 2) If Arr(i, j) <> "" Then k = k + 1 kq(i, k) = Arr(i, j) End If Next j If jMax < k Then jMax = k 'Tính só cot ket qua Next i Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq End Sub
Cảm ơn anh
HieuCD
. Anh ơi nhưng em muốn là các số trùng nhau thì chỉ lấy 1 số . anh sửa giúp em với nhé!
Sub Rectangle1_Click()
Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key As String
Arr = Sheet1.Range("l3:z22").Value
ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
With CreateObject("Scripting.dictionary")
For i = 1 To UBound(Arr, 1)
k = 0
For j = 1 To UBound(Arr, 2)
key = CStr(Arr(i, j))
If key <> "" Then
If Not .exists(key) Then
.Add key, ""
k = k + 1
kq(i, k) = key
End If
End If
Next j
.RemoveAll 'Neu loai trung tat ca dòng thì bo lenh nay
If jMax < k Then jMax = k 'Tính só cot ket qua
Next i
End With
Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq
End Sub
Cảm ơn anh rất nhiều, code chạy rất chuẩn anh à, Nhưng bây giờ anh giúp em chút síu nữa là khi muốn dồn 2 hoặc nhiều mảng không liền kề nhau thì làm như nào?Mã:Sub Rectangle1_Click() Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key As String Arr = Sheet1.Range("l3:z22").Value ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2)) With CreateObject("Scripting.dictionary") For i = 1 To UBound(Arr, 1) k = 0 For j = 1 To UBound(Arr, 2) key = CStr(Arr(i, j)) If key <> "" Then If Not .exists(key) Then .Add key, "" k = k + 1 kq(i, k) = key End If End If Next j .RemoveAll 'Neu loai trung tat ca dòng thì bo lenh nay If jMax < k Then jMax = k 'Tính só cot ket qua Next i End With Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq End Sub
Thêm vòng lập tính dòng cuối mảng dữ liệu, bạn có thể nhìn bảng và nhập trực tiếp vào lệnh tạo mảng ArrCảm ơn anh rất nhiều, code chạy rất chuẩn anh à, Nhưng bây giờ anh giúp em chút síu nữa là khi muốn dồn 2 hoặc nhiều mảng không liền kề nhau thì làm như nào?
Sub donso() 'Hieucd b2
Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key As String
For j = 12 To 26 'Cot L toi cot Z
i = Cells(65500, j).End(xlUp).Row 'dòng cuoi cot j
If i > k Then k = i 'dòng cuoi cua mang du lieu
Next j
Arr = Sheet1.Range("L3:Z" & k).Value
ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
With CreateObject("Scripting.dictionary")
For i = 1 To UBound(Arr, 1)
k = 0
For j = 1 To UBound(Arr, 2)
key = CStr(Arr(i, j))
If key <> "" Then
If Not .exists(key) Then
.Add key, ""
k = k + 1
kq(i, k) = key
End If
End If
Next j
.RemoveAll 'Neu loai trung tat ca dòng thì bo lenh nay
If jMax < k Then jMax = k 'Tính só cot ket qua
Next i
End With
Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq
End Sub
Thêm vòng lập tính dòng cuối mảng dữ liệu, bạn có thể nhìn bảng và nhập trực tiếp vào lệnh tạo mảng Arr
Mã:Sub donso() 'Hieucd b2 Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key As String For j = 12 To 26 'Cot L toi cot Z i = Cells(65500, j).End(xlUp).Row 'dòng cuoi cot j If i > k Then k = i 'dòng cuoi cua mang du lieu Next j Arr = Sheet1.Range("L3:Z" & k).Value ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2)) With CreateObject("Scripting.dictionary") For i = 1 To UBound(Arr, 1) k = 0 For j = 1 To UBound(Arr, 2) key = CStr(Arr(i, j)) If key <> "" Then If Not .exists(key) Then .Add key, "" k = k + 1 kq(i, k) = key End If End If Next j .RemoveAll 'Neu loai trung tat ca dòng thì bo lenh nay If jMax < k Then jMax = k 'Tính só cot ket qua Next i End With Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq End Sub
Em cảm ơn anhThêm vòng lập tính dòng cuối mảng dữ liệu, bạn có thể nhìn bảng và nhập trực tiếp vào lệnh tạo mảng Arr
Mã:Sub donso() 'Hieucd b2 Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key As String For j = 12 To 26 'Cot L toi cot Z i = Cells(65500, j).End(xlUp).Row 'dòng cuoi cot j If i > k Then k = i 'dòng cuoi cua mang du lieu Next j Arr = Sheet1.Range("L3:Z" & k).Value ReDim kq(1 To UBound(Arr, 1), 1 To UBound(Arr, 2)) With CreateObject("Scripting.dictionary") For i = 1 To UBound(Arr, 1) k = 0 For j = 1 To UBound(Arr, 2) key = CStr(Arr(i, j)) If key <> "" Then If Not .exists(key) Then .Add key, "" k = k + 1 kq(i, k) = key End If End If Next j .RemoveAll 'Neu loai trung tat ca dòng thì bo lenh nay If jMax < k Then jMax = k 'Tính só cot ket qua Next i End With Sheet1.Range("A3").Resize(UBound(kq, 1), jMax).Value = kq End Sub
Dạ cảm ơn anh!Nhập tay kết quả gởi lên
Dạ cảm ơn anh!
Sub donso() 'Hieucd b3 (Láy nhieu mang)
Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key
For j = 12 To 26 'Cot L toi cot Z
i = Cells(65500, j).End(xlUp).Row 'dòng cuoi cot j
If i > k Then k = i 'dòng cuoi cua mang du lieu
Next j
Arr = Sheet1.Range("L4:Z" & k).Value
k = 0
With CreateObject("Scripting.dictionary")
For i = 1 To UBound(Arr, 1)
For j = 1 To UBound(Arr, 2)
key = Arr(i, j)
If TypeName(key) = "Double" Then
If Not .exists(key) Then
.Add key, ""
k = k + 1
ReDim Preserve kq(1 To k)
kq(k) = key
End If
End If
Next j
Next i
End With
Sheet1.Range("B2").Resize(, k).Value = kq
End Sub
Sub donso() 'Hieucd b3 (Láy nhieu mang)
Dim Arr(), i As Long, j As Long, k As Long, key
For j = 12 To 26 'Cot L toi cot Z
i = Sheet1.Cells(Rows.Count, j).End(xlUp).Row 'dong cuoi cot j
If i > k Then k = i 'dong cuoi cua mang du lieu
Next j
Arr = Sheet1.Range("L4:Z" & k).Value
With CreateObject("Scripting.dictionary")
For i = 1 To UBound(Arr, 1)
For j = 1 To UBound(Arr, 2)
key = Arr(i, j)
If TypeName(key) = "Double" Then
If Not .exists(key) Then .Add key, ""
End If
Next j
Next i
Sheet1.Range("B2").Resize(, .Count).Value = .keys()
End With
End Sub
Cảm ơn anhMã:Sub donso() 'Hieucd b3 (Láy nhieu mang) Dim Arr(), kq(), i As Long, j As Long, k As Long, jMax As Long, key For j = 12 To 26 'Cot L toi cot Z i = Cells(65500, j).End(xlUp).Row 'dòng cuoi cot j If i > k Then k = i 'dòng cuoi cua mang du lieu Next j Arr = Sheet1.Range("L4:Z" & k).Value k = 0 With CreateObject("Scripting.dictionary") For i = 1 To UBound(Arr, 1) For j = 1 To UBound(Arr, 2) key = Arr(i, j) If TypeName(key) = "Double" Then If Not .exists(key) Then .Add key, "" k = k + 1 ReDim Preserve kq(1 To k) kq(k) = key End If End If Next j Next i End With Sheet1.Range("B2").Resize(, k).Value = kq End Sub
Cảm ơn bạnThử rút gọn code của bạn HieuCD
Mã:Sub donso() 'Hieucd b3 (Láy nhieu mang) Dim Arr(), i As Long, j As Long, k As Long, key For j = 12 To 26 'Cot L toi cot Z i = Sheet1.Cells(Rows.Count, j).End(xlUp).Row 'dong cuoi cot j If i > k Then k = i 'dong cuoi cua mang du lieu Next j Arr = Sheet1.Range("L4:Z" & k).Value With CreateObject("Scripting.dictionary") For i = 1 To UBound(Arr, 1) For j = 1 To UBound(Arr, 2) key = Arr(i, j) If TypeName(key) = "Double" Then If Not .exists(key) Then .Add key, "" End If Next j Next i Sheet1.Range("B2").Resize(, .Count).Value = .keys() End With End Sub
Code đó có phải của tôi đâu?Cảm ơn bạn
batman1
đã rút gọn code, chạy rất tốt, nhưng có điều là không xóa dữ liệu cũ đi nên hay bị nhầm dữ liệu.
Rút gọn thôi chứ không thêm.Thử rút gọn code của bạn HieuCD
Vâng! Cảm ơn bạn nhe!Code đó có phải của tôi đâu?
Tôi thấy bạn "thích" nên nghĩ là bạn hài lòng rồi.
Tôi viết rõ mà
Rút gọn thôi chứ không thêm.
Bài này trước đây tôi có làm 1 lần, nó thế này:Nhờ các bạn sửa giúp code theo file đính kèm,
Cảm ơn các bạn!
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 = .Keys
End With
End Function
Sub Main()
Dim Arr
Arr = UniqueList(Range("L4:Z23"), Range("L31:Z50"))
If IsArray(Arr) Then Range("B2").Resize(, UBound(Arr) + 1).Value = Arr
End Sub
Cảm ơn bácBài này trước đây tôi có làm 1 lần, nó thế này:
1> Viết 1 hàm lọc duy nhất
2> Code áp dụng:Mã: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 = .Keys End With End Function
Mã:Sub Main() Dim Arr Arr = UniqueList(Range("L4:Z23"), Range("L31:Z50")) If IsArray(Arr) Then Range("B2").Resize(, UBound(Arr) + 1).Value = Arr End Sub
Trời, em chưa để ý bácBài này trước đây tôi có làm 1 lần, nó thế này:
1> Viết 1 hàm lọc duy nhất
2> Code áp dụng:Mã: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 = .Keys End With End Function
Mã:Sub Main() Dim Arr Arr = UniqueList(Range("L4:Z23"), Range("L31:Z50")) If IsArray(Arr) Then Range("B2").Resize(, UBound(Arr) + 1).Value = Arr End Sub