ngoclinh28061991
Thành viên mới

- Tham gia
- 24/9/13
- Bài viết
- 31
- Được thích
- 1
Em có file dữ liệu như tệp đính kèm (đâylà file dung lượng nhỏ, file này do phần mềm xuất ra). Em muốn sắp xếp dữ liệu ởcột B và C thành các nhóm riêng rẽ ra các cột khác nằm bên phải dữ liệu gốc (cộtA ko quan tâm). sau đó áp dụng công thức: =COUNTIF(G$1:G$"&j;”>=”& G1)/j để tính ra phần trăm (với j là biến, j là số dòng dữ liệu của các sốliệu giống nhau, ví dụ tệp đính kèm có 72 dòng dữ liệu 140.05 thì j = 72 ).
Đoạn code sau được anh quanghai1969 viết, đã chạy đúng yêu cầu:
Khi dữ liệu lớn khoảng 300.000 dòng thì máy tính của em chạy tới khoảng 15 phút mới xong. Do chưa có nhiều kiến thức về scripting.dictionary nên em không thể tự bổ sung code được.Nên em nhờ mọi người giúp em bổ sung code sao cho ở cột tính ra %, khi số phần trăm tính ra nằm trong khoảng 20%-22% thì dừng lại, không cần tính đến dòng cuối cùng. Như vậy, khi dữ liệu lớn code sẽ chạy nhanh hơn.
Đoạn code sau được anh quanghai1969 viết, đã chạy đúng yêu cầu:
PHP:
Sub ReArrange()
Dim Data(), Res(), i, j, k, item, kk, Des As Range
Set Des = [D3]
Data = Range([B3], [C1000000].End(3)).Value
With CreateObject("scripting.dictionary")
For i = 1 To UBound(Data)
If Not .exists(Data(i, 1)) Then
.Add Data(i, 1), ""
End If
Next
ReDim Res(1 To 65536, 1 To 3 * .Count)
For Each item In .keys
For i = 1 To UBound(Data)
If item = Data(i, 1) Then
k = k + 1
Res(k, j + 1) = Data(i, 1)
Res(k, j + 2) = Data(i, 2)
End If
Next
For i = 1 To k
Res(i, j + 3) = "=Countif(R3C[-1]:R" & k + 2 & "C[-1],"">=""&RC[-1])/" & k + 2
Next
Des.Offset(, j + 2).Resize(k).Style = "Percent"
kk = k
k = 0
j = j + 3
Next
End With
Des.Resize(kk, UBound(Res, 2)) = Res
End Sub


