Giúp xử lý code chạy chậm khi nhiều dòng

Liên hệ QC

hunglam123

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
31/3/20
Bài viết
180
Được thích
43
Em có nhặt được đoạn code trên diễn đàn. Code để xử lý các tên hàng tồn tại. mà sao 20.000 dòng nó chạy cự kỳ chậm. Giờ làm sao viết sang dạng Mãng cho nhanh

Mã:
Sub GPE()
Dim Dic As Object, cel As Range
Set Dic = CreateObject("scripting.dictionary")
For Each cel In Range("A4:A20000") '
        If Not Dic.exists(cel.Value) Then
            Dic.Add cel.Value, ""
        Else
            cel.Resize(1, 5).ClearContents '
        End If
Next
End Sub


Code dạng mãng ví dụ như bài này chạy nhanh cực kỳ ( tác giả Phước Cam )

Mã:
Sub xoa_dong2()

Dim i As Long, j As Long, lr As Long
Dim a As Variant
lr = Range("A" & Rows.Count).End(xlUp).Row
a = Range("A3:E" & lr).Value
    For i = 1 To UBound(a)
        If a(i, 1) = 0 Then
            For j = 1 To 5
                a(i, j) = ""
            Next
        End If
    Next i
Range("A3:E" & lr).Value = a
MsgBox ("Xong")

End Sub

Em cảm ơn mọi người !
 
Thử
PHP:
Sub Xoa()
Dim Dic As Object, a As Variant, i As Long, j As Long
Set Dic = CreateObject("scripting.dictionary")
a = Range("A4:E20000").Value
For i = 1 To UBound(a)
        If Not Dic.exists(a(i, 1)) Then
            Dic.Add a(i, 1), ""
        Else
            For j = 1 To 5
                a(i, j) = ""
            Next
        End If
Next

Range("A4:E20000").Value = a
End Sub
 
Upvote 0
Code trên chỉ có tác dụng xóa vùng thôi mà, chỉ cần 1 lệnh range("a4:e1000000").clearcontent là xong thôi
 
Upvote 0
Code trên chỉ có tác dụng xóa vùng thôi mà, chỉ cần 1 lệnh range("a4:e1000000").clearcontent là xong thôi
Sao lại xóa "Tút tùn tụt" vậy?
Người ta muốn để lại dữ liệu duy nhất trong cột A, nếu trùng cột A thì xóa dữ liệu 5 cột.
 
Upvote 0
Sao thiên hạ khoái code thế nhỉ.
Mình thì cực chẳng đã mới phải dùng đến code. Mà nếu dùng code thì mình copy ra một sheet khác trước, đề phòng chuyện bút sa gà chết.

Gặp vấn đề này mình làm thủ công.
1. đăt 1 cột phụ, đánh số thứ tự.
2. sort theo name
3. đặt một cột phụ; lần xuất hiện đầu tiên, đặt ""; các lần sau, đặt "X".
4. copy/paste value cột phụ vừa rồi
5. filter theo X
6. xoá
7. gỡ filter
8. sort lại theo số thứ tự
9. delete các cột phụ
 
Upvote 0
Thử
PHP:
Sub Xoa()
Dim Dic As Object, a As Variant, i As Long, j As Long
Set Dic = CreateObject("scripting.dictionary")
a = Range("A4:E20000").Value
For i = 1 To UBound(a)
        If Not Dic.exists(a(i, 1)) Then
            Dic.Add a(i, 1), ""
        Else
            For j = 1 To 5
                a(i, j) = ""
            Next
        End If
Next

Range("A4:E20000").Value = a
End Sub
Ồ hay quá anh ơi. Ngưỡng mộ anh quá. em cảm ơn anh thật nhiều !
Bài đã được tự động gộp:

Sao lại xóa "Tút tùn tụt" vậy?
Người ta muốn để lại dữ liệu duy nhất trong cột A, nếu trùng cột A thì xóa dữ liệu 5 cột.
dạ anh nói đúng rồi đó ạ. em cảm ơn anh nhiều
 
Upvote 0
Sao thiên hạ khoái code thế nhỉ.
Mình thì cực chẳng đã mới phải dùng đến code. Mà nếu dùng code thì mình copy ra một sheet khác trước, đề phòng chuyện bút sa gà chết.

Gặp vấn đề này mình làm thủ công.
1. đăt 1 cột phụ, đánh số thứ tự.
2. sort theo name
3. đặt một cột phụ; lần xuất hiện đầu tiên, đặt ""; các lần sau, đặt "X".
4. copy/paste value cột phụ vừa rồi
5. filter theo X
6. xoá
7. gỡ filter
8. sort lại theo số thứ tự
9. delete các cột phụ
Cháu dốt code lém, nên chả dám sài, nhỡ nhầm nhọt con toán biết khóc cùng ai.
 
Upvote 0
Cháu dốt code lém, nên chả dám sài, nhỡ nhầm nhọt con toán biết khóc cùng ai.
Tôi thì không đốt cốt. Nhưng tôi thích thủ công hơn. Có lẽ tôi quen sử dụng bảng tính hơn quý vị.
Nhiều bài ở đây than "xxx dòng, thủ công chắc đến Tết, chắc em chết quá...". Đối với tôi là dân làm biếng. Tôi vẫn hằng chứng minh là với người biết gõ bàn phím, những công việc ấy chỉ là vài giờ làm việc.
 
Upvote 0
Tôi thì không đốt cốt. Nhưng tôi thích thủ công hơn. Có lẽ tôi quen sử dụng bảng tính hơn quý vị.
Nhiều bài ở đây than "xxx dòng, thủ công chắc đến Tết, chắc em chết quá...". Đối với tôi là dân làm biếng. Tôi vẫn hằng chứng minh là với người biết gõ bàn phím, những công việc ấy chỉ là vài giờ làm việc.
Hôm nay có đứa bạn kêu phím tắt để " paste value" mặc dù đã biết phím alt & h & v& v. Vì nó phải dán nhiều dữ liệu, dân văn phòng khổ thiệt.
 
Upvote 0
Hôm nay có đứa bạn kêu phím tắt để " paste value" mặc dù đã biết phím alt & h & v& v. Vì nó phải dán nhiều dữ liệu, dân văn phòng khổ thiệt.
Thời trẻ của tôi, làm việc trên giấy bút. Được cái bàn phím để gõ mừng húm.
Thời trẻ bây giờ, làm việc trên màn ảnh. Tìm cách để bớt phải gõ bàn phím.
 
Upvote 0
Hôm nay có đứa bạn kêu phím tắt để " paste value" mặc dù đã biết phím alt & h & v& v. Vì nó phải dán nhiều dữ liệu, dân văn phòng khổ thiệt.
Phím tắt là nút menu + V, nút này thường nằm cạnh nút Ctrl phải. Nếu không có nút menu thì Shift-F10 V chắc tiết kiệm chút thời gian.
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom