Hỗ Trợ Sửa Báo Cáo Bằng VBA

Liên hệ QC

langkhachquaduong

Thành viên chính thức
Tham gia
23/7/19
Bài viết
50
Được thích
8
Mình có file báo cáo đính kèm bên dưới. Trong file mình có ghi đầy đủ kết quả mong muốn cửa mình. Rất mong các bạn giúp đỡ.
 

File đính kèm

  • Book1.xlsm
    67.1 KB · Đọc: 14

File đính kèm

  • Book1 (2).xlsm
    81.8 KB · Đọc: 11
Upvote 0

File đính kèm

  • Book1.xlsm
    67.3 KB · Đọc: 16
Upvote 0
Bạn giải thích giúp mình đoạn code này với:
kq(k, 4) = 1
Else
kq(dic.Item(arr(i, 2)), 4) = kq(dic.Item(arr(i, 2)), 4) + 1
À! Kq(k,4) = 1 là lần đầu tiên add item đếm nó =1 vào cột số 4 của mảng. Else... nghĩa là các lần sau , mỗi lần gặp item đó thì cộng 1 nữa vào cột 4 đó
 
Upvote 0
À! Kq(k,4) = 1 là lần đầu tiên add item đếm nó =1 vào cột số 4 của mảng. Else... nghĩa là các lần sau , mỗi lần gặp item đó thì cộng 1 nữa vào cột 4 đó
Chưa tổng quát. Sao biết chắc là dòng 13, 16 là dòng tính tổng?
Nếu dữ liệu thật có nhiều dòng NVBH cho một NPP thì sao?
 
Upvote 0
Chưa tổng quát. Sao biết chắc là dòng 13, 16 là dòng tính tổng?
Nếu dữ liệu thật có nhiều dòng NVBH cho một NPP thì sao?
Thì bạn đó để sẵn biểu tổng hợp, có sẵn code, chỉ sai việc đếm số lần xuất hiện. Vậy bạn nghĩ tổng quát ở đây là thế nào?
 
Upvote 0
À! Kq(k,4) = 1 là lần đầu tiên add item đếm nó =1 vào cột số 4 của mảng. Else... nghĩa là các lần sau , mỗi lần gặp item đó thì cộng 1 nữa vào cột 4 đó
theo mình hiểu ntn đúng ko:
1. Vế 1
kq(k,4) = 1 nó sẽ gán 1 theo số dòng của k
kq(1,4) =1
kq(2,4) =1
kq(3,4) =1
kq(4,4) =1
2. Vế 2
Else
kq(dic.Item(arr(i, 2)), 4) = kq(dic.Item(arr(i, 2)), 4) + 1
dic.Item(arr(i, 2)) nó cũng chạy từ 1 đến 4
nếu dic.Item(arr(i, 2))= 1
kq(1,4) = kq(1,4) + 1
mà kq(1,4) = 1 ở vế 1 thì
kq(1,4) = 2
 
Upvote 0
theo mình hiểu ntn đúng ko:
1. Vế 1
kq(k,4) = 1 nó sẽ gán 1 theo số dòng của k
kq(1,4) =1
kq(2,4) =1
kq(3,4) =1
kq(4,4) =1
2. Vế 2
Else
kq(dic.Item(arr(i, 2)), 4) = kq(dic.Item(arr(i, 2)), 4) + 1
dic.Item(arr(i, 2)) nó cũng chạy từ 1 đến 4
nếu dic.Item(arr(i, 2))= 1
kq(1,4) = kq(1,4) + 1
mà kq(1,4) = 1 ở vế 1 thì
kq(1,4) = 2
Bạn nhớ cho là mảng data nguồn là arr có 5 cột: 1-Ngày hóa đơn; 2- NV bán hàng; 3- Tên NPP; 4- Nhãn hàng; 4- Nhóm SP
Tôi giải thích từ đây nhé:
If Not dic.Exists(arr(i, 2)) Then 'arr(i, 2) là tên NVBH Lê Thị Huyền hay gì đó. Nếu chưa có thì
k = k + 1 ' Phần tử thứ nhất của dic
dic.Add arr(i, 2), k ' Thêm 1 Item vào dic, đầu tiên là chị Lê Thị Huyền (nếu thỏa mãn điều kiện)
kq(k, 1) = arr(i, 2) ' Bắt đầu ghi vào mảng kết quả: chị Lê Thị Huyền được ghi vào mảng: kq (dòng k (k=1 vì là đầu tiên mà), cột 1)
kq(k, 2) = arr(i, 3) ' Tên NPP được ghi vào cột 2 dòng k
kq(k, 3) = arr(i, 4) ' Nhãn hàng ghi vào cột 3 dòng k
kq(k, 4) = 1 ' Rồi đây: thay vì ghi Alavie vào cột 4 thì ghi con số 1 vì đếm Alavie xuất hiện lần thứ 1
Else ' Trường hợp chị Lê Thị Huyền đã có thì
kq(dic.Item(arr(i, 2)), 4) = kq(dic.Item(arr(i, 2)), 4) + 1 'Cột 4 của item Lê Thị Huyền = Cột 4 của item Lê Thị Huyền + 1 (cộng 1 chứ không phải nối chữ Alavie vào chuỗi như code bạn làm)
CÁC CỘT TRƯỚC ĐÃ CÓ RỒI NÊN KHÔNG CẦN PHẢI GHI, THÊM GÌ CẢ
End If
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn nhớ cho là mảng data nguồn là arr có 5 cột: 1-Ngày hóa đơn; 2- NV bán hàng; 3- Tên NPP; 4- Nhãn hàng; 4- Nhóm SP
Tôi giải thích từ đây nhé:
If Not dic.Exists(arr(i, 2)) Then 'arr(i, 2) là tên NVBH Lê Thị Huyền hay gì đó. Nếu chưa có thì
k = k + 1 ' Phần tử thứ nhất của dic
dic.Add arr(i, 2), k ' Thêm 1 Item vào dic, đầu tiên là chị Lê Thị Huyền (nếu thỏa mãn điều kiện)
kq(k, 1) = arr(i, 2) ' Bắt đầu ghi vào mảng kết quả: chị Lê Thị Huyền được ghi vào mảng: kq (dòng k (k=1 vì là đầu tiên mà), cột 1)
kq(k, 2) = arr(i, 3) ' Tên NPP được ghi vào cột 2 dòng k
kq(k, 3) = arr(i, 4) ' Nhãn hàng ghi vào cột 3 dòng k
kq(k, 4) = 1 ' Rồi đây: thay vì ghi Alavie vào cột 4 thì ghi con số 1 vì đếm Alavie xuất hiện lần thứ 1
Else ' Trường hợp chị Lê Thị Huyền đã có thì
kq(dic.Item(arr(i, 2)), 4) = kq(dic.Item(arr(i, 2)), 4) + 1 'Cột 4 của item Lê Thị Huyền = Cột 4 của item Lê Thị Huyền + 1 (cộng 1 chứ không phải nối chữ Alavie vào chuỗi như code bạn làm)
CÁC CỘT TRƯỚC ĐÃ CÓ RỒI NÊN KHÔNG CẦN PHẢI GHI, THÊM GÌ CẢ
End If
Cám ơn bạn. Bạn học ở đâu mà giỏi thế. Có thể giới thiệu cho mình đk ko.
 
Upvote 0
Cám ơn bạn. Bạn học ở đâu mà giỏi thế. Có thể giới thiệu cho mình đk ko.
Tôi đọc 1 bài viết giới thiệu dictionary của GPE rồi banh cái code ra tìm hiểu, viết lại, chạy thử, debug... đủ kiểu. Tất cả kiến thức VBA của tôi từ tự học cả, nên nhiều lúc cũng hơi lôm côm bởi thói quen khó bỏ.
 
Upvote 0
Web KT
Back
Top Bottom