Vba thay thế hàm Countifs.

Liên hệ QC

kh0jy3n

Thành viên thường trực
Tham gia
21/4/12
Bài viết
345
Được thích
115
Gửi các Bác.
Hiện tại em đang làm một file báo biểu dùng rất nhiều tới hàm Countifs , tới tầm 60.000 dong làm file chạy chậm quá.
về khoản Vba em ngủ quá :(.
bác nào rảnh viết hộ em xin code hàm countifs em có để Vd ở file đính kèm ạ.

Em cảm ơn !
 

File đính kèm

  • VBA HÀM COUNTIFS.xlsm
    10 KB · Đọc: 52
Bạn thử dữ liệu với 60000 dòng ở trang dữ liệu và 1000 dòng ở trang kết quả xem thế nào.Mình không cười ai cả mình thấy thế góp ý cho bạn thôi.Nêu bạn không thích thì thôi mình xin lỗi.
Không cần phải thử gì cả, dữ liệu gì thì máy vẫn phải kiểm tra tới chứ có bỏ qua được đâu, vấn đề là đừng để nó kiểm tra đi kiểm tra lại nhiều lần thôi. Tôi thấy bạn đang cười tôi ở trên đó mà bạn nói không cười
 
Upvote 0
em nhờ các bác trên diễn đàn giúp em
em muốn tổng hợp tồn kho nhập xuất tồn
théo chi nhánh hải hà
theo chi nhanh đầm hà
và tổng công ty
em cảm ơn nhiều
 

File đính kèm

  • nhap xuat ton.xlsm
    538.2 KB · Đọc: 3
Upvote 0
Trời, cả năm rồi mà còn có ngừoi đào mồ lên, hỏi một câu chẳng ăn nhập gì với chủ đề thớt hết.
Mà người này lại là thành viên từ hơn tám năm về trước mới ác. Khả năng là lười đăng ký nít mới cho nên mượn nít hỏi bài.
 
Upvote 0
Trời, cả năm rồi mà còn có ngừoi đào mồ lên, hỏi một câu chẳng ăn nhập gì với chủ đề thớt hết.
Mà người này lại là thành viên từ hơn tám năm về trước mới ác. Khả năng là lười đăng ký nít mới cho nên mượn nít hỏi bài.
nhập xuất tồn mình đang dùng công thức counifs mà bác.
giờ muốn chuyển thành code vba cho tiện, vì công thức chạy chậm quá
 
Upvote 0
Các bác giúp em với ạ. Em gặp tình trạng giống chủ thớt, nhưng file của em có nhiều cột nên không biết làm thế nào. Do nhiều file hơn 200.000 dòng, mà phải 3 hoặc 4 điều kiện lọc nên dùng Countifs thì máy tính đơ luôn ạ.
Em gởi file cắt bớt còn 50 dòng cho nhẹ. Các điều kiện đếm là 4 cột "hoten, ngaysinh, gioitinh, diachi".
Nhờ các bác giúp đỡ.
 

File đính kèm

  • Solieu test rut gon .xls
    2.4 MB · Đọc: 3
Upvote 0
Các bác giúp em với ạ. Em gặp tình trạng giống chủ thớt, nhưng file của em có nhiều cột nên không biết làm thế nào. Do nhiều file hơn 200.000 dòng, mà phải 3 hoặc 4 điều kiện lọc nên dùng Countifs thì máy tính đơ luôn ạ.
Em gởi file cắt bớt còn 50 dòng cho nhẹ. Các điều kiện đếm là 4 cột "hoten, ngaysinh, gioitinh, diachi".
Nhờ các bác giúp đỡ.
Bạn đọc giờ giấc giùm để khỏi mang tiếng là nhà khảo cổ. Với đề của bạn, tôi nghĩ diễn đàn này đã có câu trả lời, bạn chỉ cần dùng chức năng tìm kiếm là thấy. Nếu lười thì bạn đăng thành 1 bài mới, sẽ có người giúp bạn.
 
Upvote 0
Bạn đọc giờ giấc giùm để khỏi mang tiếng là nhà khảo cổ. Với đề của bạn, tôi nghĩ diễn đàn này đã có câu trả lời, bạn chỉ cần dùng chức năng tìm kiếm là thấy. Nếu lười thì bạn đăng thành 1 bài mới, sẽ có người giúp bạn.
Mình nghĩ bài này phù hợp với vấn đề của mình nên mới đăng vào đây chứ không phải lười tạo thread mới. Còn tìm kiếm thì mình không biết phải dùng từ khóa thế nào cho nó phù hợp. Nếu mình phạm quy thì cho mình xin lỗi. Mình sẽ tìm thử.
 
Upvote 0
Mình nghĩ bài này phù hợp với vấn đề của mình nên mới đăng vào đây chứ không phải lười tạo thread mới. Còn tìm kiếm thì mình không biết phải dùng từ khóa thế nào cho nó phù hợp. Nếu mình phạm quy thì cho mình xin lỗi. Mình sẽ tìm thử.
Tôi không trách gì bạn nhưng 1 chủ đề đã bị chê là đào mộ mà mình còn chen vào nhờ thì khó tìm được người giúp.
 
Upvote 0
Trời, cả năm rồi mà còn có ngừoi đào mồ lên, hỏi một câu chẳng ăn nhập gì với chủ đề thớt hết.
Mà người này lại là thành viên từ hơn tám năm về trước mới ác. Khả năng là lười đăng ký nít mới cho nên mượn nít hỏi bài.

Quá đơn giản
Mã:
Public Sub Mazda()
                                                Const C As Long = 200 - 180
Dim sArr(), dArr(), I As Long, K As Long, R As Long, Rws As Long, Col As Long, xCoL As Long, Tmp As Variant
                                                                         sArr = Sheets("DANH SACH").Range("C2", Sheets("DANH SACH").Range("C1000000").End(xlUp)).Resize(, 3).Value
R = UBound(sArr)
                                        ReDim dArr(1 To R, 1 To C)
                                                With CreateObject("Scripting.Dictionary")
    dArr(1, 1) = "STT"
                                                                                                                                   dArr(1, 2) = sArr(1, 1)
                                                    dArr(1, 3) = "NAM"
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                     dArr(1, 4) = "NU"
    K = 1: Col = 4
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    For I = 2 To R
    
    
    
    
    
    
    
    
    
    If sArr(I, 1) <> Empty Then
      
          
                Tmp = sArr(I, 1)
                
                
                
                
                
                
                
        If Not .Exists(Tmp) Then
            K = K + 1
                         .Item(Tmp) = K
            dArr(K, 1) = K - 1
            
            
            
            
            
            
            
            
            
            dArr(K, 2) = Tmp
            
            
            
            
            
            
            
            
            
        End If
              
        Tmp = sArr(I, 3)
                                                                            If Not .Exists(Tmp) Then
                          Col = Col + 1
            .Item(Tmp) = Col
            
            
            
            
            
            
            
            
            
            
            
            
            dArr(1, Col) = Tmp
        End If

   Rws = .Item(sArr(I, 1))
  
  
  
  
  
  
  
  
  
  
                                                          If sArr(I, 2) = "NAM" Then
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                                                          
                          dArr(Rws, 3) = dArr(Rws, 3) + 1
                                                  Else
                                         dArr(Rws, 4) = dArr(Rws, 4) + 1
        End If
        

 
        xCoL = .Item(sArr(I, 3))
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
                                                  dArr(Rws, xCoL) = dArr(Rws, xCoL) + 1
    End If
                                                                                                                                                    Next I
End With
                                                                                                                                                                                                With Sheets("TONG HOP")
    .Range("A3").Resize(1000000, C).ClearContents
                                                                                                                                                    .Range("A3").Resize(K, Col) = dArr
End With
End Sub
 
Upvote 0
Web KT
Back
Top Bottom