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 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 ạ)
Bạn thử xem file
Nhấn nút chạy Code và xem điều gì diễn ra ở P2.
Thêm bớt dữ liệu và chạy thử.
 

File đính kèm

  • hocvba.xlsm
    26.5 KB · Đọc: 20
Upvote 0
Bạn thử xem file
Nhấn nút chạy Code và xem điều gì diễn ra ở P2.
Thêm bớt dữ liệu v

Bạn thử xem file
Nhấn nút chạy Code và xem điều gì diễn ra ở P2.
Thêm bớt dữ liệu và chạy thử.
Cảm ơn thầy .Đúng ý em rồi thầy có thể viết thêm sự kiện trong sheet khi thay đổi giá trị mã sản phẩm được không ạ
 
Upvote 0
@HUONGHCKT Thầy ơi sau khi học code của thầy em còn thắc mắc. Giả sử data của em có thêm 3 mã sản phẩm mới nữa thì vùng (key )nó có lọc mã không trùng được không ạ
 

File đính kèm

  • hocvba (5).xlsm
    21.6 KB · Đọc: 2
Upvote 0
Cảm ơn thầy .Đúng ý em rồi thầy có thể viết thêm sự kiện trong sheet khi thay đổi giá trị mã sản phẩm được không ạ
Có thể được.
@HUONGHCKT Thầy ơi sau khi học code của thầy em còn thắc mắc. Giả sử data của em có thêm 3 mã sản phẩm mới nữa thì vùng (key )nó có lọc mã không trùng được không ạ
Bạn cứ thêm vào và chạy thử là biết ngay mà.
 
Upvote 0
Em có tìm hiểu qua nhiều bài trên GPE rồi mà không tư duy ra được mong anh chỉ giáo
Chỉ cây giáo thì được gì?
Muốn học thì nhờ người ta "dẫn dắt".

Mà code có sẵn, chỉ tự chế ra dữ liệu và chạy thử cũng không biết làm thì học chi nữa.
Có thể được.

Bạn cứ thêm vào và chạy thử là biết ngay mà.
 
Upvote 0
Em có tìm hiểu qua nhiều bài trên GPE rồi mà không tư duy ra được mong anh chỉ giáo
Bạn chịu khó tìm loạt bài về VBA cơ bản của anh befaint trong diễn đàn rồi đọc, thực hành, thực hành và thực hành, từng bước rồi bạn sẽ hiểu.
 
Upvote 0
Em có sửa lại dữ liệu để ứng dụng code của thầy mà em vẫn chưa hiểu các biến tăng item ,với key nó hoạt động như thế nào mong thầy giúp đỡ
Có nghĩa là bây giờ bạn muốn Đếm số ItemID (cột F) phải không?
Nôm na thế này nhé:
Sử dụng Dictionary là để lọc ra các phần tử (ItemID): Tạm hiểu là Dic giống như 1 giá sách: Mỗi Sách đều có 1 ID (key) trong đó có tập 1 tập 2 đều có chung ID(key) và như thế: mỗi loại sách đều được sắp ở 1 vị trí nhất định (kể cả tập 1, tập 2, ...)
Dòng Key = Arr(i, số cột định chọn làm key) -Trong bài của bạn là cột F (cột 6).
Dòng Not Dic.Exists(key) then : được hiểu là nếu đã tồn tại trong Dic chưa (đã có trên giá chưa) nếu chưa thì
Dòng t=t+1 là xác định vị trí sắp cho loại ID (key) đó theo thứ tự (1,2), dòng Dic.add(key), t: là nhập vào giá sách và ấn định vị trí của ID(key) của loại đó.
Và như trong bài: KQ(t,1) =Key : là xếp vào giá sách (theo mảng)
KQ(t,2) =1 là ghi lại số lượng sách:
Nếu (else) lại gặp sách đã có trến giá(trong Dic.Add) thì tiếp tục xếp sách vào giá tại vị trí mà sách ấy đang giữ chỗ: Dic.Item(key)=số thứ tự của Key trong Dic = k . và lúc này số lượng của loại sách ID( key) trên giá sẽ = Số đã có = thêm 1 sách mới được tìm thấy.
Cũng như anh @Hoàng Tuấn 868 đã nói bạn phải tìm hiểu thêm nhiều nữa. Trên GPE này mình thấy có chùm bài viết Tổng quan về Arr và Dictionary (của Anh @befaint thì phải), bạn nên sarch và tìm hiểu thêm nhé.
Chúc Thành công.
 
Upvote 0
Có nghĩa là bây giờ bạn muốn Đếm số ItemID (cột F) phải không?
Nôm na thế này nhé:
Sử dụng Dictionary là để lọc ra các phần tử (ItemID): Tạm hiểu là Dic giống như 1 giá sách: Mỗi Sách đều có 1 ID (key) trong đó có tập 1 tập 2 đều có chung ID(key) và như thế: mỗi loại sách đều được sắp ở 1 vị trí nhất định (kể cả tập 1, tập 2, ...)
Dòng Key = Arr(i, số cột định chọn làm key) -Trong bài của bạn là cột F (cột 6).
Dòng Not Dic.Exists(key) then : được hiểu là nếu đã tồn tại trong Dic chưa (đã có trên giá chưa) nếu chưa thì
Dòng t=t+1 là xác định vị trí sắp cho loại ID (key) đó theo thứ tự (1,2), dòng Dic.add(key), t: là nhập vào giá sách và ấn định vị trí của ID(key) của loại đó.
Và như trong bài: KQ(t,1) =Key : là xếp vào giá sách (theo mảng)
KQ(t,2) =1 là ghi lại số lượng sách:
Nếu (else) lại gặp sách đã có trến giá(trong Dic.Add) thì tiếp tục xếp sách vào giá tại vị trí mà sách ấy đang giữ chỗ: Dic.Item(key)=số thứ tự của Key trong Dic = k . và lúc này số lượng của loại sách ID( key) trên giá sẽ = Số đã có = thêm 1 sách mới được tìm thấy.
Cũng như anh @Hoàng Tuấn 868 đã nói bạn phải tìm hiểu thêm nhiều nữa. Trên GPE này mình thấy có chùm bài viết Tổng quan về Arr và Dictionary (của Anh @befaint thì phải), bạn nên sarch và tìm hiểu thêm nhé.
Chúc Thành công.
Cảm ơn thầy và anh @Hoàng Tuấn 868 đã giúp đỡ
 
Upvote 0

File đính kèm

  • hocvba (1).xlsm
    22.2 KB · Đọc: 2
Upvote 0
Đó là file em tự học theo file của anh đính kèm của thầy @befaint .Đây là file dữ liệu của em mong anh xem giúp em, em muốn lọc mã sản phẩm theo vi trí và vị trí đó nếu tồn tại thì cộng dồn lại
Chắc là thế này chăng???
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) = Arr(i, 7)
    Else
        k = Dic.Item(Key)
        KQ(k, 3) = KQ(k, 3) + Arr(i, 7)
    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
Chắc là thế này chăng???
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) = Arr(i, 7)
    Else
        k = Dic.Item(Key)
        KQ(k, 3) = KQ(k, 3) + Arr(i, 7)
    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
Sau khi xem chỗ sai và sửa lại em phát hiện các key có cái vẫn không lọc được trùng nhờ anh xem lại giúp em ạ
 

File đính kèm

  • aaa.xlsm
    16.4 KB · Đọc: 2
Upvote 0
Web KT

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

Back
Top Bottom