Mong các thầy ,cô giúp đỡ(hàm counif trong vba)

Liên hệ QC

nguyenvanlinhab

Thành viên mới
Tham gia
27/2/22
Bài viết
40
Được thích
0
Em mới học Excel phần vba nên chưa có kinh nghiệm mong các thầy, cô chỉ giúp cách điền công thức counif ứng dụng
cho viêc lọc trùng với số lượng dữ liệu dòng cuối có thay đổi mà công thức vẫn tự đồng điền ạ(Ứng dụng phần mảng càng tốt ạ tại dữ liệu của em nó lớn ạ)
 

File đính kèm

  • hocvba.xlsx
    17.6 KB · Đọc: 6
Em sửa lại cú pháp "J" thành j mà anh nói nhưng khi kiểm tra code thì phát hiện "mít" vần không lọc trùng
được trong khi các quả cam,xoài,táo đã ra kết quả và số lượng đúng
Dữ liệu của bạn không chuẩn. Có cách trước cách sau. nên nó mới vậy
Muốn khắc phục lỗi này thì sửa code như sau
Mã:
Option Explicit

Sub xem()
Dim sh As Worksheet
Dim i As Long, j As Long, k As Long
Dim lr As Long
Dim dic As Object
Dim arr(), kq(), key
    On Error Resume Next
   Set dic = CreateObject("Scripting.Dictionary")
    Set sh = Sheets("sheet1")
    lr = sh.Range("A" & Rows.Count).End(xlUp).Row
    arr = sh.Range("A1:B" & lr).Value
    ReDim kq(1 To UBound(arr, 1), 1 To 3)
     j = 0
     For i = 1 To UBound(arr, 1)
        key = Trim(arr(i, 1))
        If Not dic.Exists(key) Then
            j = j + 1
           dic.Add key, j
            kq(j, 1) = j
            kq(j, 2) = arr(i, 1)
            kq(j, 3) = arr(i, 2)
        Else
            k = dic.Item(key)
            kq(k, 3) = kq(k, 3) + arr(i, 2)

            
        
        End If
        
     Next i
     sh.Range("D2").Resize(10000, j).ClearContents
     sh.Range("D2").Resize(j, 3).Value = kq



End Sub
 
Upvote 0
Dữ liệu của bạn không chuẩn. Có cách trước cách sau. nên nó mới vậy
Muốn khắc phục lỗi này thì sửa code như sau
Mã:
Option Explicit

Sub xem()
Dim sh As Worksheet
Dim i As Long, j As Long, k As Long
Dim lr As Long
Dim dic As Object
Dim arr(), kq(), key
    On Error Resume Next
   Set dic = CreateObject("Scripting.Dictionary")
    Set sh = Sheets("sheet1")
    lr = sh.Range("A" & Rows.Count).End(xlUp).Row
    arr = sh.Range("A1:B" & lr).Value
    ReDim kq(1 To UBound(arr, 1), 1 To 3)
     j = 0
     For i = 1 To UBound(arr, 1)
        key = Trim(arr(i, 1))
        If Not dic.Exists(key) Then
            j = j + 1
           dic.Add key, j
            kq(j, 1) = j
            kq(j, 2) = arr(i, 1)
            kq(j, 3) = arr(i, 2)
        Else
            k = dic.Item(key)
            kq(k, 3) = kq(k, 3) + arr(i, 2)

         
     
        End If
     
     Next i
     sh.Range("D2").Resize(10000, j).ClearContents
     sh.Range("D2").Resize(j, 3).Value = kq



End Sub

Dữ liệu của bạn không chuẩn. Có cách trước cách sau. nên nó mới vậy
Muốn khắc phục lỗi này thì sửa code như sau
Mã:
Option Explicit

Sub xem()
Dim sh As Worksheet
Dim i As Long, j As Long, k As Long
Dim lr As Long
Dim dic As Object
Dim arr(), kq(), key
    On Error Resume Next
   Set dic = CreateObject("Scripting.Dictionary")
    Set sh = Sheets("sheet1")
    lr = sh.Range("A" & Rows.Count).End(xlUp).Row
    arr = sh.Range("A1:B" & lr).Value
    ReDim kq(1 To UBound(arr, 1), 1 To 3)
     j = 0
     For i = 1 To UBound(arr, 1)
        key = Trim(arr(i, 1))
        If Not dic.Exists(key) Then
            j = j + 1
           dic.Add key, j
            kq(j, 1) = j
            kq(j, 2) = arr(i, 1)
            kq(j, 3) = arr(i, 2)
        Else
            k = dic.Item(key)
            kq(k, 3) = kq(k, 3) + arr(i, 2)

          
      
        End If
      
     Next i
     sh.Range("D2").Resize(10000, j).ClearContents
     sh.Range("D2").Resize(j, 3).Value = kq



End Sub
Em cảm ơn anh , em áp dụng vào file này thì làm như thế nào ạ có phải dùng vòng lặp qua cột để nó đếm số lượng không ạ
 

File đính kèm

  • hocvba (1).xlsm
    22.4 KB · Đọc: 4
Upvote 0
Kết quả em để ờ file định kèm ạ.Em muốn anh xem giúp em muốn lọc trùng mã sản phẩm theo ví trí,nếu vị trí đó tồn tại thì đếm vị trí đó tổng có bao nhiêu
Thử code sau.
Mã:
Sub DEM()
Dim i&, t&, k&, Lr&
Dim Arr(), KQ()
Dim Sh As Worksheet
Dim Dic As Object, Key

Set Sh = Sheets("Sheet1")
Lr = Sh.Cells(Rows.Count, 1).End(3).Row
Arr = Sh.Range("A2:G" & Lr).Value
Set Dic = CreateObject("Scripting.Dictionary")
ReDim KQ(1 To UBound(Arr), 1 To 3)

For i = 1 To UBound(Arr)
    Key = Arr(i, 6)
    If Not Dic.Exists(Key) Then
        t = t + 1: Dic.Add (Key), t
        KQ(t, 1) = Key
        KQ(t, 2) = Arr(i, 4)
        KQ(t, 3) = 1
    Else
        k = Dic.Item(Key)
        KQ(k, 3) = KQ(k, 3) + 1
    End If
Next i

If t Then
    Sh.Range("P2").Resize(10000, 3).ClearContents
    Sh.Range("P2").Resize(t, 3) = KQ
End If
Set Dic = Nothing
MsgBox "OK", vbInformation, "THÔNG BÁO"
End Sub
 
Upvote 0
Hình như bạn ấy đưa em đi 1 vòng rồi lại quay về cái code ban đầu thì phải
Em muốn hỏi là key chính của em là mã sản phẩm,em muốn add thêm key nữa là vị trí .nếu key mã sản phẩm đã tồn tại thì không lấy. key vị trí đã tồn tại thì cộng dồn ra số lượng ạ
 
Upvote 0
Hình như bạn ấy đưa em đi 1 vòng rồi lại quay về cái code ban đầu thì phải
Mình thấy thời gian đưa ra câu hỏi rất nhanh, bình thường thì nên nghiên cứu kỹ, dò từng dòng code xem cách vận hành, từ đó suy ra nhiều thứ, đằng này nhoằng cái hỏi luôn, vụ này còn nhiều vòng đây.
 
Upvote 0
Mình thấy thời gian đưa ra câu hỏi rất nhanh, bình thường thì nên nghiên cứu kỹ, dò từng dòng code xem cách vận hành, từ đó suy ra nhiều thứ, đằng này nhoằng cái hỏi luôn, vụ này còn nhiều vòng đây.
Chắc em trả lại code ban đầu cho bạn ấy. nhờ tác giả code ban đầu vào sửa cho bạn ấy thôi
 
Upvote 0

File đính kèm

  • hocvba (1).xlsm
    20.3 KB · Đọc: 9
Upvote 0
Em có xem rồi ạ nhưng không tìm ra hướng giải quyết . Mong các anh,chị tìm hướng giúp em ạ
Có gì mà hướng với không hướng. Bạn muốn trích lọc theo itemcode và rack no hay cái gì. Thì nói rõ ràng 1 chút. chứ mã sản phẩm nào.? Mã sản phẩm ở đâu?
 
Upvote 0
Em có xem rồi ạ nhưng không tìm ra hướng giải quyết . Mong các anh,chị tìm hướng giúp em ạ .Em không hiểu sao cột vị mã sản phẩm nó không lọc trùng
Bạn mới xem được vài hôm thì chưa ăn thua, cái này nó cần thời gian và lộ trình nhiều hơn bạn nghĩ.
 
Upvote 0
Bạn mới xem được vài hôm thì chưa ăn thua, cái này nó cần thời gian và lộ trình nhiều hơn bạn nghĩ.

Bạn mới xem được vài hôm thì chưa ăn thua, cái này nó cần thời gian và lộ trình nhiều hơn bạn nghĩ.
Em không thấy tài liệu nào nó lọc trùng cả 2 ô ạ .Vậy em có thể sử dụng phương pháp gì để dictionary lọc cả hai cột mã sản phẩm và vị trí ạ.Em cảm ơn
 
Upvote 0
Em có xem rồi ạ nhưng không tìm ra hướng giải quyết . Mong các anh,chị tìm hướng giúp em ạ .Em không hiểu sao cột vị mã sản phẩm nó không lọc trùng
Thêm nữa là nên lưu ý về các chi tiết cho dù to hay nhỏ, ví dụ mình thấy ở tiêu đề bạn ghi là hàm "counif", thực ra đâu có hàm này mà là hàm "countif" (thiếu chữ t), viết code thì sai một ký tự là cũng có thể không chạy được hoặc có chạy được cũng chưa chắc đúng, cho nên cẩn thận không thừa.
Bài đã được tự động gộp:

Em không thấy tài liệu nào nó lọc trùng cả 2 ô ạ
Bạn chưa tìm hiểu hết thôi, nên từ từ tìm, khi thấy thì sẽ nhớ rất lâu.
Bài đã được tự động gộp:

em trả lại code ban đầu cho bạn ấy.
Vụ trả lại code bàn giao xong chưa.
 
Lần chỉnh sửa cuối:
Upvote 0
Thêm nữa là nên lưu ý về các chi tiết cho dù to hay nhỏ, ví dụ mình thấy ở tiêu đề bạn ghi là hàm "counif", thực ra đâu có hàm này mà là hàm "countif" (thiếu chữ t), viết code thì sai một ký tự là cũng có thể không chạy được hoặc có chạy được cũng chưa chắc đúng, cho nên cẩn thận không thừa.
Bài đã được tự động gộp:


Bạn chưa tìm hiểu hết thôi, nên từ từ tìm, khi thấy thì sẽ nhớ rất lâu.
Em chưa học tin học văn phòng .E có lén xem youtube 1 năm giờ đang bị covid19 nên em ở nhà học thôi ạ.Chứ em làm công nhân 1 tháng có 4tr à . Nên cũng không quan trọng lắm. tại công nhân có được dùng máy tính đâu ạ
 
Upvote 0
Vụ trả lại code bàn giao xong chưa.
Hihi. Thôi để anh chị khác vào chỉ bạn ấy. Chứ chắc mình ngắn chữ . Không biết giải thích sao. Thậm chí còn chưa hiểu hết ý bạn ấy hỏi. Có khi lại lợn lành thành lợn què mất
Bài đã được tự động gộp:

Em chưa học tin học văn phòng .E có lén xem youtube 1 năm giờ đang bị covid19 nên em ở nhà học thôi ạ.Chứ em làm công nhân 1 tháng có 4tr à . Nên cũng không quan trọng lắm. tại công nhân có được dùng máy tính đâu ạ
Làm cái gì không quan trọng bạn ạ. Vấn đề là bạn muốn học. thì phải học căn bản trước.
 
Upvote 0
Hihi. Thôi để anh chị khác vào chỉ bạn ấy. Chứ chắc mình ngắn chữ . Không biết giải thích sao. Thậm chí còn chưa hiểu hết ý bạn ấy hỏi. Có khi lại lợn lành thành lợn què mất
Bài đã được tự động gộp:


Làm cái gì không quan trọng bạn ạ. Vấn đề là bạn muốn học. thì phải học căn bản trước.
E muốn thực hành nhiều để biết chứ căn bản e có biết học từ đâu đâu. Qua các diễn đàn học lập trình bổ ích hơn chơi game dù nó không phù hơp công việc
 
Upvote 0
Web KT

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

Back
Top Bottom