Tìm nhóm số với số cột lớn nhất

Liên hệ QC
Anh SA_DQ (>4000 bài viết) mà viết như vậy chắc có lý do.
Mình không biết dễ vậy là như nào. Nếu được, bạn có thể làm cho mọi người tham khảo không?
Nếu viết lại thì tôi sẽ viết thế này.
Dict chỉ tạo 1 lần để giảm bộ nhớ, dùng RemoveAll xóa nội dung trong Dict khi sang cột mới.
Mã:
For J = 1 To Col
Set Dict = CreateObject("Scripting.Dictionary")
=>
Mã:
Set Dict = CreateObject("Scripting.Dictionary")
For J = 1 To Col
Dict.RemoveAll
---
Chắc tết nhất Bác SA_DQ mắc chuyện, viết vội nên cũng chỉ dám nói là "hình như".
 
Nếu viết lại thì:
Dict chỉ tạo 1 lần để giảm bộ nhớ, dùng RemoveAll xóa nội dung trong Dict khi sang cột mới.

Chắc tết nhất Bác SA_DQ mắc chuyện, viết vội nên cũng chỉ dám nói là "hình như".

2uả thật là mình chưa biết rằng: xài lệnh Set .. . như vậy nhiều lần trong vòng lặp là tổn hao bộ nhớ.

Nhưng chắc 1 điều là bạn viết như vậy là chuẩn rồi!

Rất mong những ai quan tâm cũng như hiểu biết viết tiếp về vấn đề này, để mọi người cùng nhau trao đổi.

Chúc xuân vui vẻ!
 
Lần chỉnh sửa cuối:
Mình tìm trên diễn đàn bài xoá dữ liệu trùng trong từng cột nhưng không có. Bạn và GPE có thể giúp làm thế nào xử lí xoá các số trùng trong từng cột được? Xin cảm ơn!
vậy là bạn đọc mà không hiểu các đoạn code rồi, các code loại trùng của các bài trước
Mã:
For j = 1 To C
  Dic.RemoveAll:  k = 0
  For i = 1 To UBound(Sarr)
    If Sarr(i, j) <> "" Then
      If Not Dic.exists(Sarr(i, j)) Then
        Dic.Add Sarr(i, j), ""
        k = k + 1
        Darr(k, j) = Sarr(i, j)
      End If
    Else
      Arr(2, j) = k:       Exit For
    End If
  Next i
Next j
Mã:
For j = 1 To Cot
  For i = 1 To n
    If Darr(i, j) <> "" Then
      tmp = Val(Darr(i, j)) & "z" & j
      If Not Dic.exists(tmp) Then Dic.Add tmp, ""
    End If
  Next i
Next j
 
2uả thật là mình chưa biết rằng: xài lệnh Set .. . như vậy nhiều lần trong vòng lặp là tổn hao bộ nhớ.

Nhưng chắc 1 điều là bạn viết như vậy là chuẩn rồi!

Rất mong những ai quan tâm cũng như hiểu biết viết tiếp về vấn đề này, để mọi người cùng nhau trao đổi.

Chúc xuân vui vẻ!

Không hẳn là hao tổn bộ nhớ đâu. Khi code set nó vào cái khác thì cái cũ bị bỏ rơi/mất chủ. Trên nguyên tắc, VBA tự động biết dọn rác, sẽ thâu hồi lại bộ nhớ.
Tuy nhiên, trên thực tế, có thể cơ quan này làm việc chậm trễ 1 chút, gây nên việc kẹt vùng nhớ.
Vấn đề trong code của bạn là cái đối tượng được tạo lại nhiều lần, hơi hao tổn công sức máy.
 
vậy là bạn đọc mà không hiểu các đoạn code rồi, các code loại trùng của các bài trước
Mã:
For j = 1 To C
  Dic.RemoveAll:  k = 0
  For i = 1 To UBound(Sarr)
    If Sarr(i, j) <> "" Then
      If Not Dic.exists(Sarr(i, j)) Then
        Dic.Add Sarr(i, j), ""
        k = k + 1
        Darr(k, j) = Sarr(i, j)
      End If
    Else
      Arr(2, j) = k:       Exit For
    End If
  Next i
Next j
Mã:
For j = 1 To Cot
  For i = 1 To n
    If Darr(i, j) <> "" Then
      tmp = Val(Darr(i, j)) & "z" & j
      If Not Dic.exists(tmp) Then Dic.Add tmp, ""
    End If
  Next i
Next j
Cảm ơn bạn. Mình hiểu rồi ạ!
 
Web KT

Bài viết mới nhất

Back
Top Bottom