[Funland] Hỏi các cụ về lệnh VBA trong Excel

Thỏ và Gấu

Xe hơi
Biển số
OF-707913
Ngày cấp bằng
18/11/19
Số km
181
Động cơ
91,810 Mã lực
Tuổi
37
Em có dư liệu hơn 757895 dong chứa số Chứng mình thư em muốn đếm để lấy ra những số bị trung. Em đã dùng hàm COUNTIF để đếm nhưng chạy rất chậm. em muốn đăng đàn hỏi các cụ xem có lệnh VBA nào để đếm ko cho em xin vơi ạ
 

poiuy

Xe cút kít
Biển số
OF-198769
Ngày cấp bằng
17/6/13
Số km
19,210
Động cơ
594,474 Mã lực
Em nghĩ cụ nên phân loại dữ liệu ra rồi countif theo từng nhóm dữ liệu có lẽ sẽ cải thiện được tốc độ.
Hoặc là chạy lệnh sort dữ liệu rồi so sánh 2 cái cạnh nhau thì ra trùng số nhanh hơn.
 

Of.NguyenLinh

Xe ngựa
Người OF
Biển số
OF-291212
Ngày cấp bằng
6/6/06
Số km
29,235
Động cơ
1,476,822 Mã lực
Nơi ở
Sản phẩm chăm sóc xe nextzett
Website
1z-vietnam.com

Thỏ và Gấu

Xe hơi
Biển số
OF-707913
Ngày cấp bằng
18/11/19
Số km
181
Động cơ
91,810 Mã lực
Tuổi
37

Of.NguyenLinh

Xe ngựa
Người OF
Biển số
OF-291212
Ngày cấp bằng
6/6/06
Số km
29,235
Động cơ
1,476,822 Mã lực
Nơi ở
Sản phẩm chăm sóc xe nextzett
Website
1z-vietnam.com
Em cam ơn cụ em cũng đã dung hàm này rồi nhưng chạy rất lấu em muốn chuyển qua thử VBA xem có nhanh hơn ko
VBA em không học, nhưng ví dụ python:
Hàm remove duplicate
Mã:
def remove_duplicate_in_list(this_list): #Hàm xử lý bỏ duplicate.
    not_duplicate_list = [] #list mới
    # remove duplicate
    #
    for i in this_list:
        if i not in not_duplicate_list: #Nếu không có trong có trong list mới để đong
            not_duplicate_list.append(i)
    return res
Nếu làm ngược lại để lấy số bị trùng.
Mã:
def get_dupliccate_in_this_list(this_list): #this_list là danh sách các số chứng minh thư, ví dụ [12332525, 14312512665, 4634452352354]
    not_duplicate_list = [] #Khai báo list rỗng để đựng các số không bị trùng lặp
    duplicate_list = [] #Khai báo list rỗng để đựng các số trùng lặp.
    # remove duplicate
    for chung_minh_thu in this_list:
        if chung_minh_thu not in not_duplicate_list:
            not_duplicate_list.append(chung_minh_thu) #Nếu số ngày không có trong not_duplicate_list thì thêm vào.
        else:
            duplicate_list.append(chung_minh_thu) #Nếu số này đã có trong list không bị trùng, thì thêm vào list bị trùng
    return not_duplicate_list, duplicate_list
Về cơ bản hàm này chạy khá nhanh, em không rõ với con số nhiều thế chạy trong bao lâu, vì chỉ lâu là dòng lệnh for, còn if và else thì chỉ là tín hiệu 0/1 nên nhanh lắm.
 
Chỉnh sửa cuối:

Thỏ và Gấu

Xe hơi
Biển số
OF-707913
Ngày cấp bằng
18/11/19
Số km
181
Động cơ
91,810 Mã lực
Tuổi
37
VBA em không học, nhưng ví dụ python:
Hàm remove duplicate
Mã:
def remove_duplicate_in_list(this_list): #Hàm xử lý bỏ duplicate.
    not_duplicate_list = [] #list mới
    # remove duplicate
    #
    for i in this_list:
        if i not in not_duplicate_list: #Nếu không có trong có trong list mới để đong
            not_duplicate_list.append(i)
    return res
Nếu làm ngược lại để lấy số bị trùng.
Mã:
def get_dupliccate_in_this_list(this_list): #this_list là danh sách các số chứng minh thư, ví dụ [12332525, 14312512665, 4634452352354]
    not_duplicate_list = [] #Khai báo list rỗng để đựng các số không bị trùng lặp
    duplicate_list = [] #Khai báo list rỗng để đựng các số trùng lặp.
    # remove duplicate
    for chung_minh_thu in this_list:
        if chung_minh_thu not in not_duplicate_list:
            not_duplicate_list.append(chung_minh_thu) #Nếu số ngày không có trong not_duplicate_list thì thêm vào.
        else:
            duplicate_list.append(chung_minh_thu) #Nếu số này đã có trong list không bị trùng, thì thêm vào list bị trùng
    return not_duplicate_list, duplicate_list
Về cơ bản hàm này chạy khá nhanh, em không rõ với con số nhiều thế chạy trong bao lâu, vì chỉ lâu là dòng lệnh for, còn if và else thì chỉ là tín hiệu 0/1 nên nhanh lắm.
em cam ơn cụ ạ
 

Dahhost

Xe máy
Biển số
OF-713102
Ngày cấp bằng
13/1/20
Số km
71
Động cơ
85,110 Mã lực
Em có dư liệu hơn 757895 dong chứa số Chứng mình thư em muốn đếm để lấy ra những số bị trung. Em đã dùng hàm COUNTIF để đếm nhưng chạy rất chậm. em muốn đăng đàn hỏi các cụ xem có lệnh VBA nào để đếm ko cho em xin vơi ạ
Em làm thế này, cụ xem có ổn không

4023BE04-3B1E-4714-98A9-E7B331E3CE86.jpeg


Cột A là số liệu CMT của cụ

Cột B em copy từ cột A sang và dùng hàm Remove Duplicates để chỉ giữ lại những sô không trùng nhau

Cột C em dùng hàm = COUNTIFS(A:A;B2) và kéo công thức cho các dòng bên dưới, hàm này sẽ đếm số lần xuất hiện của B2, B3... trong cột A

Cột D là ghi chú, dùng hàm = IF(C2 <> 0; "Duplicate"; "") và kéo, có thể dùng Format có điều kiện để tô màu cho dễ nhìn

VBA em nghĩ trường hợp này không cần thiết đâu
 

Thỏ và Gấu

Xe hơi
Biển số
OF-707913
Ngày cấp bằng
18/11/19
Số km
181
Động cơ
91,810 Mã lực
Tuổi
37
Em làm thế này, cụ xem có ổn không

4023BE04-3B1E-4714-98A9-E7B331E3CE86.jpeg


Cột A là số liệu CMT của cụ

Cột B em copy từ cột A sang và dùng hàm Remove Duplicates để chỉ giữ lại những sô không trùng nhau

Cột C em dùng hàm = COUNTIFS(A:A;B2) và kéo công thức cho các dòng bên dưới, hàm này sẽ đếm số lần xuất hiện của B2, B3... trong cột A

Cột D là ghi chú, dùng hàm = IF(C2 <> 0; "Duplicate"; "") và kéo, có thể dùng Format có điều kiện để tô màu cho dễ nhìn

VBA em nghĩ trường hợp này không cần thiết đâu
em cam ơn cụ. cách nay nhẹ hơn dùng trực tiếp cou
 
Thông tin thớt
Đang tải

Bài viết mới

Top