nguyentheviet86
Thành viên hoạt động
- Tham gia
- 18/7/20
- Bài viết
- 114
- Được thích
- 7
Sub ChamCong()
Dim Dic1 As Object, iRow As Long, i As Long
Dim Arr() As Variant, TmpArr As Variant
With Sheet1
.Range("A2:D2000").ClearContents
Set Dic1 = CreateObject("Scripting.Dictionary")
TmpArr = Sheet2.Range("A2:D4592").Value
ReDim Arr(1 To UBound(TmpArr, 1), 1 To 4)
For iRow = 1 To UBound(TmpArr, 1)
If Not IsEmpty(TmpArr(iRow, 1)) And Not Dic1.exists(TmpArr(iRow, 1)) Then
i = i + 1
Dic1.Add TmpArr(iRow, 1), i
Arr(i, 1) = i
Arr(i, 2) = TmpArr(iRow, 1)
Arr(i, 3) = TmpArr(iRow, 2)
Arr(i, 4) = Format(TmpArr(iRow, 3), "dd/mm") & ":" & TmpArr(iRow, 4)
Else
Arr(Dic1.Item(TmpArr(iRow, 1)), 4) = Arr(Dic1.Item(TmpArr(iRow, 1)), 4) & ", " & Format(TmpArr(iRow, 3), "dd/mm") & ":" & TmpArr(iRow, 4)
End If
Next iRow
.Range("A2").Resize(i, 4).Value = Arr
End With
End Sub
Em cảm ơn anh chị đã giúp đỡ , file chạy nhanh hơn và dễ nhìn hơn ạKhông hiểu cái số trước dấu ~ nghĩa là gì. Mình tạm thời bỏ qua. Bạn xem code rồi chỉnh nhé
Mã:Sub ChamCong() Dim Dic1 As Object, iRow As Long, i As Long Dim Arr() As Variant, TmpArr As Variant With Sheet1 .Range("A2:D2000").ClearContents Set Dic1 = CreateObject("Scripting.Dictionary") TmpArr = Sheet2.Range("A2:D4592").Value ReDim Arr(1 To UBound(TmpArr, 1), 1 To 4) For iRow = 1 To UBound(TmpArr, 1) If Not IsEmpty(TmpArr(iRow, 1)) And Not Dic1.exists(TmpArr(iRow, 1)) Then i = i + 1 Dic1.Add TmpArr(iRow, 1), i Arr(i, 1) = i Arr(i, 2) = TmpArr(iRow, 1) Arr(i, 3) = TmpArr(iRow, 2) Arr(i, 4) = Format(TmpArr(iRow, 3), "dd/mm") & ":" & TmpArr(iRow, 4) Else Arr(Dic1.Item(TmpArr(iRow, 1)), 4) = Arr(Dic1.Item(TmpArr(iRow, 1)), 4) & ", " & Format(TmpArr(iRow, 3), "dd/mm") & ":" & TmpArr(iRow, 4) End If Next iRow .Range("A2").Resize(i, 4).Value = Arr End With End Sub
Anh chij cho em hỏi với ạ,bây h số dữ liệu của em lên gần đến 9000 dòng , khi em điều chỉnh lại số dòng thì nó báo lỗi ạKhông hiểu cái số trước dấu ~ nghĩa là gì. Mình tạm thời bỏ qua. Bạn xem code rồi chỉnh nhé
Mã:Sub ChamCong() Dim Dic1 As Object, iRow As Long, i As Long Dim Arr() As Variant, TmpArr As Variant With Sheet1 .Range("A2:D2000").ClearContents Set Dic1 = CreateObject("Scripting.Dictionary") TmpArr = Sheet2.Range("A2:D4592").Value ReDim Arr(1 To UBound(TmpArr, 1), 1 To 4) For iRow = 1 To UBound(TmpArr, 1) If Not IsEmpty(TmpArr(iRow, 1)) And Not Dic1.exists(TmpArr(iRow, 1)) Then i = i + 1 Dic1.Add TmpArr(iRow, 1), i Arr(i, 1) = i Arr(i, 2) = TmpArr(iRow, 1) Arr(i, 3) = TmpArr(iRow, 2) Arr(i, 4) = Format(TmpArr(iRow, 3), "dd/mm") & ":" & TmpArr(iRow, 4) Else Arr(Dic1.Item(TmpArr(iRow, 1)), 4) = Arr(Dic1.Item(TmpArr(iRow, 1)), 4) & ", " & Format(TmpArr(iRow, 3), "dd/mm") & ":" & TmpArr(iRow, 4) End If Next iRow .Range("A2").Resize(i, 4).Value = Arr End With End Sub
Mình chưa xem file nhưng thử thay chỗ đỏ đỏ thành khoảng 20000 xem saoAnh chij cho em hỏi với ạ,bây h số dữ liệu của em lên gần đến 9000 dòng , khi em điều chỉnh lại số dòng thì nó báo lỗi ạ
Mong anh chị giúp đỡ ạ, em cảm ơn
View attachment 272819
dạ không được anh ạ, mong anh xem file giúp em ạMình chưa xem file nhưng thử thay chỗ đỏ đỏ thành khoảng 20000 xem sao
.Range("A22000").ClearContents
TmpArr = Sheet2.Range("A2:D4592").Value
Bạn kiểm tra lại nhé.dạ không được anh ạ, mong anh xem file giúp em ạ
Không biết đúng ý chưa.
View attachment 272845
Dạ được rồi ạ, em cảm ơn anh chị đã giúp đỡ file ạKhông biết đúng ý chưa.
View attachment 272845