Em có file dữ liệu khá lớn 150MB, khi e nhập liệu vào lệnh tự động chạy tìm kiếm để kiểm tra tên khá là chậm
Ở đây e có xóa bớt dữ liệu trong sheet và xóa cơ số sheet đi để up lên diễn đàn.
Các bác xem file cho e cao kiến với ạ.
Chứ msvt từ chỗ đó trở xuống không tồn tại trong các sheet kia mà lấy gì dò. File mẫu của bạn cũng thế mà thì hỏi gì chứ.Đến đoạn aaaaaaaaaaaaaaaaaaaaaaa là dừng lại là sao vậy anh ơi
Như file của e cứ nhập 10 thằng 1 rồi chạy lệnh ở cột E,F thôi, ko là treo. Những thằng trên đã đúng tên, thì e xóa bỏ lệnh để cho nhẹ
Dạ vâng chậm vì khi Active nó lại load 1 loạt thì phải ạ, có cách nào những người đã nhập rồi thì lần sau khi mở file hoặc active sheet TT thì nó ko load lại nữa ko ạ, và khi mình nhập nó ra kết quả luôn ấy ạVậy code này vẫn chậm à? Nói chung là không hiểu.
hic đó là cả 1 vấn đề đấy ạTheo mình có thể áp dụng một cách tiếp cận dùng bộ nhớ dạng Cache đối với bài toán này, cách thức như sau:
1. Khi mở file, kích hoạt một lần duy nhất việc nạp vào bộ nhớ danh sách không trùng của msvt vào một biến;
2. Mỗi khi có thay đổi số liệu thì sẽ thực hiện việc tính toán, tìm kiếm đối với ô có dữ liệu nguồn thay đổi so với biến đã xác định trong bước 1.
Nếu làm như vậy thì việc tính toán sẽ chỉ diễn ra với các số liệu thay đổi mà không phải làm lại từ đầu đối với tất cả các ô số liệu.
Vấn đề là cốc có hiểu ý nhau.Dạ vâng chậm vì khi Active nó lại load 1 loạt thì phải ạ, có cách nào những người đã nhập rồi thì lần sau khi mở file hoặc active sheet TT thì nó ko load lại nữa ko ạ, và khi mình nhập nó ra kết quả luôn ấy ạ
Ái da nặng lắm bác ạ, vì mỗi khi mở lại file nhập tiếp nó load lại. Hoặc là khi nhập mới thì nó ko tự động load mà phải nhấn sang sheet bên cạnh rồi nhấn trở về nó mới chạy, như vậy lại mất công load lại những thằng bên trên
Bác làm đúng ý em rồi đấy ạ. Chỉ có điều là nó vẫn chậm thui ạ hi hiVấn đề là cốc có hiểu ý nhau.
Nếu hiểu được những thao tác của bạn thì may ra... thôi hỏng chơi nữa.
Bác làm đúng ý em rồi đấy ạ. Chỉ có điều là nó vẫn chậm thui ạ hi hi
Public Dic As Object
Sub Auto_Open()
Dim data(), sh As Worksheet, i, k
Set Dic = CreateObject("scripting.dictionary")
For Each sh In Worksheets
If sh.Name <> "TT" Then
data = sh.Range("B4", sh.[C65536].End(3)).Value
For i = 1 To UBound(data)
Dic(data(i, 1)) = data(i, 2)
Next
End If
Next
End Sub
Sub Main()
Dim Res(), tam(), i
If Dic.Count = 0 Then Auto_Open
With Sheets("TT")
tam = .Range("B2", .[C65536].End(3)).Value
ReDim Res(1 To UBound(tam), 1 To 2)
For i = 1 To UBound(tam)
If Dic.exists(tam(i, 2)) Then
If Dic.Item(tam(i, 2)) = tam(i, 1) Then
Res(i, 1) = tam(i, 1)
Res(i, 2) = "y"
Else
Res(i, 1) = Dic.Item(tam(i, 2))
Res(i, 2) = Res(i, 1)
End If
End If
Next
.[E2].Resize(i - 1, 2) = Res
End With
MsgBox "Done"
End Sub