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

langkhachquaduong

Thành viên mới
Tham gia ngày
23 Tháng bảy 2019
Bài viết
37
Được thích
4
Điểm
15
Tuổi
27
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

Phạm Doãn Tuyến

Cuộc sống không công bằng, hãy quen với nó.
Tham gia ngày
5 Tháng hai 2020
Bài viết
49
Được thích
37
Điểm
15
Tuổi
22
Nơi ở
Hòa Bình - Vĩnh Bảo - Hải Phòng

File đính kèm

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
9,245
Được thích
10,945
Điểm
1,560

Maika8008

Thành viên hoạt động
Tham gia ngày
12 Tháng sáu 2020
Bài viết
135
Được thích
101
Điểm
30

File đính kèm

Maika8008

Thành viên hoạt động
Tham gia ngày
12 Tháng sáu 2020
Bài viết
135
Được thích
101
Điểm
30
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 đó
 

Ba Tê

Gội Rồi Mới Cạo
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,566
Được thích
16,517
Điểm
1,860
Tuổi
61
Nơi ở
An Giang
À! 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?
 

Maika8008

Thành viên hoạt động
Tham gia ngày
12 Tháng sáu 2020
Bài viết
135
Được thích
101
Điểm
30
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?
 

Ba Tê

Gội Rồi Mới Cạo
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,566
Được thích
16,517
Điểm
1,860
Tuổi
61
Nơi ở
An Giang

File đính kèm

langkhachquaduong

Thành viên mới
Tham gia ngày
23 Tháng bảy 2019
Bài viết
37
Được thích
4
Điểm
15
Tuổi
27
À! 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
 

Maika8008

Thành viên hoạt động
Tham gia ngày
12 Tháng sáu 2020
Bài viết
135
Được thích
101
Điểm
30
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:

langkhachquaduong

Thành viên mới
Tham gia ngày
23 Tháng bảy 2019
Bài viết
37
Được thích
4
Điểm
15
Tuổi
27
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.
 

Maika8008

Thành viên hoạt động
Tham gia ngày
12 Tháng sáu 2020
Bài viết
135
Được thích
101
Điểm
30
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ỏ.
 
Top Bottom