Vũ Tuấn Tùng
Thành viên mới
- Tham gia
- 22/6/16
- Bài viết
- 27
- Được thích
- 2
Bài này bạn dùng hàm chạy tốt rồi mà.Em chào toàn thể anh chị em trên diễn đàn GPE!
Em có file cần tính số lần xuất hiện trong mảng và tính tỷ lệ phần trăm xuất hiện trong mảng. Nhờ các anh chị viết giúp em đoạn code VBA ạ.
Em ví dụ 20 dòng ạ, Em xin cảm ơn ạ.
View attachment 273194
vì dữ liệu data gần 1 triệu dòng và khoảng hơn 2 nghìn cột mà sử dụng hàm thì nặng file và chạy lâu lắm ạ, em ví dụ minh họa 20 dòng để mọi người dễ hình dung ạBài này bạn dùng hàm chạy tốt rồi mà.
Nếu dữ liệu như vậy thì nên nêu ngay từ đầu và ngần ấy thì VBA có vẻ cũng không phù hợp lắm.vì dữ liệu data gần 1 triệu dòng và khoảng hơn 2 nghìn cột mà sử dụng hàm thì nặng file và chạy lâu lắm ạ, em ví dụ minh họa 20 dòng để mọi người dễ hình dung ạ
Với dữ liệu như bạn thì VBA nó chạy cũng chết máy bạn à.Tính sơ sơ 1.000.000 * 20.000 thì cũng ra 20 tỷ lần chạy vòng lặp.Đấy là nguyên chạy vòng lặp trong VBA chưa kể đến các bước trong vòng lặp đấy nữa.vì dữ liệu data gần 1 triệu dòng và khoảng hơn 2 nghìn cột mà sử dụng hàm thì nặng file và chạy lâu lắm ạ, em ví dụ minh họa 20 dòng để mọi người dễ hình dung ạ
Bạn ấy nói hơn 2000* 20.000
Chưa làm gì to tát, chạy thử code này với 2 tỷ lần lặp. Tự động tắt file luôn .vì dữ liệu data gần 1 triệu dòng và khoảng hơn 2 nghìn cột mà sử dụng hàm thì nặng file và chạy lâu lắm ạ, em ví dụ minh họa 20 dòng để mọi người dễ hình dung ạ
Option Explicit
Sub abc()
Dim t#, i&, j&, k&, Arr(1 To 2000000000)
t = Timer
For i = 1 To 1000000
For j = 1 To 2000
k = k + 1
Arr(k) = k
Next
Next
MsgBox "Thoi gian la " & Timer - t
End Sub
2 tỷ bạn ạ, có hơn 2000 cột thôiVới dữ liệu như bạn thì VBA nó chạy cũng chết máy bạn à.Tính sơ sơ 1.000.000 * 20.000 thì cũng ra 20 tỷ lần chạy vòng lặp.Đấy là nguyên chạy vòng lặp trong VBA chưa kể đến các bước trong vòng lặp đấy nữa.
Bạn ấy ví dụ 20 dòng và 8 cột để mọi người dễ hình dung ra thực tế gần 1 triệu dòng và hơn 2000 cột. Kể ra thì cũng vui vui.Bạn ấy nói hơn 2000
Chưa làm gì to tát, chạy thử code này với 2 tỷ lần lặp. Tự động tắt file luôn .
Mã:Option Explicit Sub abc() Dim t#, i&, j&, k&, Arr(1 To 2000000000) t = Timer For i = 1 To 1000000 For j = 1 To 2000 k = k + 1 Arr(k) = k Next Next MsgBox "Thoi gian la " & Timer - t End Sub
Nếu vẫn muốn code chắc phải chia để trị, tức chia ra nhiều mảng con. Nghĩ vậy thôi chứ chưa thử bao giờ
cần tính số lần xuất hiện trong mảng và tính tỷ lệ phần trăm xuất hiện trong mảng
Đánh thì đánh chứ đừng chọt, chọt nó nhột...Làm được bạn nhé. Nhưng bạn cần đăng bài trong chuyên mục thành viên tương trợ riêng nhau lúc khó khăn.
Và bạn không nên ví dụ, minh họa mấy cái ký tự ABCDEF làm gì, mà bạn cứ nêu cụ thể, chính xác là các con số từ 00, 01, ... 99 của 20 năm gần đây cho dễ hiểu.
Về bạn chỉnh code này xem nó có chạy được không nhé.Tôi nghĩ nếu dữ liệu lớn quá nạp vào mảng đã là 1 vấn đề thời gian rồi.Em chào toàn thể anh chị em trên diễn đàn GPE!
Em có file cần tính số lần xuất hiện trong mảng và tính tỷ lệ phần trăm xuất hiện trong mảng. Nhờ các anh chị viết giúp em đoạn code VBA ạ.
Em ví dụ 20 dòng ạ, Em xin cảm ơn ạ.
View attachment 273194
Sub abc()
Dim i As Long, lr As Long, arr, kq, dic As Object, a As Long, dk As String, c As Long, b As Long, j As Long
Set dic = CreateObject("scripting.dictionary")
With Sheets("sheet1")
lr = .Range("A" & Rows.Count).End(xlUp).Row
arr = .Range("A3:H" & lr).Value
ReDim kq(1 To UBound(arr) + 100, 1 To 3)
For i = 1 To UBound(arr)
If arr(i, 1) <> Empty Then c = c + 1
For j = 2 To UBound(arr, 2)
dk = arr(i, j)
If Not dic.exists(dk) Then
a = a + 1
dic.Add dk, a
kq(a, 1) = dk
kq(a, 2) = 1
Else
b = dic.Item(dk)
kq(b, 2) = kq(b, 2) + 1
End If
Next j
Next i
For i = 1 To a
kq(i, 3) = kq(i, 2) / c
Next i
.Range("K3:M1000").ClearContents
.Range("K3:M3").Resize(a).Value = kq
End With
Set dic = Nothing
End Sub
Đánh thì đánh chứ đừng chọt, chọt nó nhột...
.
dữ liệu lớn quá nạp vào mảng đã là 1 vấn đề thời gian rồi.
Thế hướng đi là gì đây anhExcel không giải quyết được bài toán này.
Thống kê mờ. R nhanh hơn,Mấy cái này thì Python thôi.
Bạn gửi file dữ liệu 1 triệu dòng & 2 nghìn cột lên xem saovì dữ liệu data gần 1 triệu dòng và khoảng hơn 2 nghìn cột mà sử dụng hàm thì nặng file và chạy lâu lắm ạ, em ví dụ minh họa 20 dòng để mọi người dễ hình dung ạ
Cái này em không biết có thật không chứ em tạo thử chữ cái A-Z cho 2000 cột và khoảng 100.000 dòng là excel báo không cho phép (office 2010)Bạn gửi file dữ liệu 1 triệu dòng & 2 nghìn cột lên xem sao
20 năm chỉ có 7000 ngày. Chả nhẽ mỗi ngày có 150 phát sinh (150 đài?).,mỗi phát sinh hơn 2000 lượt số.Làm được bạn nhé. Nhưng bạn cần đăng bài trong chuyên mục thành viên tương trợ riêng nhau lúc khó khăn.
Và bạn không nên ví dụ, minh họa mấy cái ký tự ABCDEF làm gì, mà bạn cứ nêu cụ thể, chính xác là các con số từ 00, 01, ... 99 của 20 năm gần đây cho dễ hiểu.
Không biết số má kiểu gì mà dày công nghiên cứu thế này. Mà vẫn trượt thì thật là uổng công. Anh nhạy cảm thật ấy. Đọc đến đây em mới nhận ra đúng hình hài của ví dụVà bạn không nên ví dụ, minh họa mấy cái ký tự ABCDEF làm gì, mà bạn cứ nêu cụ thể, chính xác là các con số từ 00, 01, ... 99 của 20 năm gần đây cho dễ hiểu.