VBA tổng hợp các mã hàng và nhân với kênh

Liên hệ QC

tieuthubuongbinh

Học hoài vẫn dốt
Tham gia
3/9/08
Bài viết
498
Được thích
340
Giới tính
Nữ
Nghề nghiệp
Planning
Chào các tiền bối,

Nhờ mọi người giúp em viết VBA cho bài sau ạ:

1. Sheet 1: mỗi file làm việc của em có danh sách mã hàng khác nhau, giờ em cần tìm 1 danh sách sao cho tất cả các mã hàng đều đủ trong file này. Vd Sheet 1 / Cột A: mã DS có 100 mã, cột B có 80 mã (có mã trùng cột A và mã ko trùng), cột C 120 mã (cũng có trùng và ko trùng).... cột n có n mã...
Giờ em cần sheet 4 cột A sẽ list hết các mã và ko trùng

2. Sheet 2: có 5 kênh => em muốn nhân với danh sách mã hàng sheet 4. vd: có 200 mã sau khi làm bước 1. thì ở sheet 3 sẽ liệt kê 200 mã kênh A2, 200 mã kênh A3.... 200 mã cho kênh n...

3. Sheet 3: đánh số thứ tự toàn bộ dòng hiện ra sau khi làm bước 2.
 

File đính kèm

  • VBA sort ma sp.xlsx
    723.1 KB · Đọc: 14
Chào các tiền bối,

Nhờ mọi người giúp em viết VBA cho bài sau ạ:

1. Sheet 1: mỗi file làm việc của em có danh sách mã hàng khác nhau, giờ em cần tìm 1 danh sách sao cho tất cả các mã hàng đều đủ trong file này. Vd Sheet 1 / Cột A: mã DS có 100 mã, cột B có 80 mã (có mã trùng cột A và mã ko trùng), cột C 120 mã (cũng có trùng và ko trùng).... cột n có n mã...
Giờ em cần sheet 4 cột A sẽ list hết các mã và ko trùng

2. Sheet 2: có 5 kênh => em muốn nhân với danh sách mã hàng sheet 4. vd: có 200 mã sau khi làm bước 1. thì ở sheet 3 sẽ liệt kê 200 mã kênh A2, 200 mã kênh A3.... 200 mã cho kênh n...

3. Sheet 3: đánh số thứ tự toàn bộ dòng hiện ra sau khi làm bước 2.
Đọc nội dung thì thấy cụ thể, rõ ràng.
Sau khi tải File xem và chẳng hiểu phần diễn giải ở bài 1 là diễn giải gì?
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các tiền bối,

Nhờ mọi người giúp em viết VBA cho bài sau ạ:

1. Sheet 1: mỗi file làm việc của em có danh sách mã hàng khác nhau, giờ em cần tìm 1 danh sách sao cho tất cả các mã hàng đều đủ trong file này. Vd Sheet 1 / Cột A: mã DS có 100 mã, cột B có 80 mã (có mã trùng cột A và mã ko trùng), cột C 120 mã (cũng có trùng và ko trùng).... cột n có n mã...
Giờ em cần sheet 4 cột A sẽ list hết các mã và ko trùng

2. Sheet 2: có 5 kênh => em muốn nhân với danh sách mã hàng sheet 4. vd: có 200 mã sau khi làm bước 1. thì ở sheet 3 sẽ liệt kê 200 mã kênh A2, 200 mã kênh A3.... 200 mã cho kênh n...

3. Sheet 3: đánh số thứ tự toàn bộ dòng hiện ra sau khi làm bước 2.
Cho cái ví dụ thử chứ ráng đọc 3 lần mà vẫn chưa hiểu ý? haha
 
Upvote 0
Đọc nội dung thì thấy cụ thể, rõ ràng.
Sau khi tải File xem và chẳng hiểu phần diễn giải ở bài 1 là diễn giải gì?
Cho cái ví dụ thử chứ ráng đọc 3 lần mà vẫn chưa hiểu ý? haha
Nếu làm thủ công thì thế này ạ: em copy cột A đến E của sheet 1 vào sheet 4 theo kiểu nối đuôi nhau (để copy trên 1 cột mà thôi) => remove duplicate => ra 1 danh sách ko trùng và bao gồm tất cả các mã của sheet 1.

Sau đó copy vào sheet 3: danh sách của sheet 4, gõ kênh vào cột C cho hết danh sách này. Copy tiếp danh sách theo kiểu nối đuôi và gõ vào kênh kế tiếp. Vd như vầy. Sau đó đánh số thứ tự để đếm tổng dòng.

215724

Sau khi viết code thì gán lệnh vào mũi tên (vì em chưa rành VBA nên ko biết sao cho nó chạy mỗi lần có dữ liệu mới)
 
Upvote 0
Nếu làm thủ công thì thế này ạ: em copy cột A đến E của sheet 1 vào sheet 4 theo kiểu nối đuôi nhau (để copy trên 1 cột mà thôi) => remove duplicate => ra 1 danh sách ko trùng và bao gồm tất cả các mã của sheet 1.

Sau đó copy vào sheet 3: danh sách của sheet 4, gõ kênh vào cột C cho hết danh sách này. Copy tiếp danh sách theo kiểu nối đuôi và gõ vào kênh kế tiếp. Vd như vầy. Sau đó đánh số thứ tự để đếm tổng dòng.

View attachment 215724

Sau khi viết code thì gán lệnh vào mũi tên (vì em chưa rành VBA nên ko biết sao cho nó chạy mỗi lần có dữ liệu mới)
Có nghĩa gộp thành 1 ô sau đó lọc bỏ trùng ví dụ được 1000 mã sau khi lọc thì sẽ gán từng mã tương ứng với TT,Ecom,... ra 5000 mã hay sao?
 
Upvote 0
Mới vd nhiêu đó cột thôi, chứ thực tế mình sẽ có hơn chục cột đấy, mỗi file qua các thời điểm là nó phát sinh khác nhau. :(
Vậy tạm thời lọc trùng thử cái này
Mã:
Sub Loc()
Dim Sarr(), item, Kq(1 To 600000, 1 To 1), k
Dim DongCuoi As Long
DongCuoi = Sheet4.Cells(Rows.Count, 2).End(xlUp).Row
Application.ScreenUpdating = False
Sarr = Sheet1.[A2:e600000].Value
    For Each item In Sarr
        If item <> "" Then
            k = k + 1
            Kq(k, 1) = item
        End If
    Next
    Sheet4.[B2].Resize(k) = Kq
  Sheet4.Range("B" & DongCuoi).RemoveDuplicates Columns:=1
  Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • VBA sort ma sp.xlsb
    553.2 KB · Đọc: 13
Upvote 0
Bác đang để macro hiểu từ A đến H, cho em xin đến O đi ạ (là được 15 cột sheet 1)
Em thử từ I đến J là ko ra dữ liệu của 2 cột này

Với lại bác cho em xin lọc xong cho ra sheet 4 với (em cần danh sách này để copy cho mục đích khác sheet 3). "Giờ em cần sheet 4 cột A sẽ list hết các mã và ko trùng "

215728[/quote]

@LamNA bài của bạn chưa phải ý mình, dù sao cũng cám ơn bạn nhiều
 
Upvote 0
Bác đang để macro hiểu từ A đến H, cho em xin đến O đi ạ (là được 15 cột sheet 1)
Em thử từ I đến J là ko ra dữ liệu của 2 cột này
Dữ liệu ở hình trên khác với các bài trước.
Cứ đủ tiêu đề ở dòng 1 là được, 1 cột hay 16383 cột vẫn chạy bình thường.

Với lại bác cho em xin lọc xong cho ra sheet 4 với (em cần danh sách này để copy cho mục đích khác sheet 3). "Giờ em cần sheet 4 cột A sẽ list hết các mã và ko trùng "
Đây là yêu cầu mới, lập chủ đề mới. Hoặc chịu khó lọc 1 channel rồi copy lấy.

Lỡ không nêu ngay từ đầu rồi thì phải chịu thôi.
 
Upvote 0
Dữ liệu ở hình trên khác với các bài trước.
Cứ đủ tiêu đề ở dòng 1 là được, 1 cột hay 16383 cột vẫn chạy bình thường.
à em hiểu rồi.

Đây là yêu cầu mới, lập chủ đề mới. Hoặc chịu khó lọc 1 channel rồi copy lấy.

Lỡ không nêu ngay từ đầu rồi thì phải chịu thôi.
Em yêu cầu ngay bài #1 mà bác. Mà ko sao, dù sao cũng có sheet 3 để lọc manual rồi :)

Chúc bác ngủ ngon. Cám ơn bác rất nhiều ạ.
 
Upvote 0
Dữ liệu của bạn quá lớn; nên coi chừng có lúc không đủ bộ nhớ cho máy làm việc;
Bài 10 đã đáp ứng iêu cầu của bạn rồi; Chỉ có điều tác giả nhắc bạn rằng, Cột nào có số liệu bên dưới thì có tên tiêu đề cột (từ cột đầu cho tới cột cuối)
 
Upvote 0
Dữ liệu của bạn quá lớn; nên coi chừng có lúc không đủ bộ nhớ cho máy làm việc;
Bài 10 đã đáp ứng iêu cầu của bạn rồi; Chỉ có điều tác giả nhắc bạn rằng, Cột nào có số liệu bên dưới thì có tên tiêu đề cột (từ cột đầu cho tới cột cuối)
Dạ, con thử xem để data vào các cột xa xa có chạy ko nhưng lại ko biết phải để tiêu đề. Bây giờ thì con hiểu rồi ạ.
Dữ liệu con làm việc hằng ngày thì cũng 1/3 số dòng đó rồi đó bác.
Chúc bác ngày chủ nhật an lành ạ.
 
Upvote 0
Bác đang để macro hiểu từ A đến H, cho em xin đến O đi ạ (là được 15 cột sheet 1)
Em thử từ I đến J là ko ra dữ liệu của 2 cột này
Với lại bác cho em xin lọc xong cho ra sheet 4 với (em cần danh sách này để copy cho mục đích khác sheet 3). "Giờ em cần sheet 4 cột A sẽ list hết các mã và ko trùng "
Theo tôi đề xuất bạn nên đi theo hướng khác, thế này:
1/ Sheet1: Nên làm danh mục duy nhất vì mỗi mã code nó có thể đi kèm theo 1 số thông tin khác (chưa hiểu thông tin gì?) có thể là đơn vị tính, đơn giá hay nhà cung cấp.
2/ Muốn nhập liệu cái gì đó thì tra danh mục (Sheet1), sau đó muốn Insert bao nhiêu dòng thì cho nó 1 con số 3, 5, 7 gì đó thì sẽ thực tế hơn là tra danh sách Sheet2 rồi gán mỗi mã code 200 lần (như vậy thì sẽ có rất nhiều dòng không dùng đến) sẽ gây lãng phí tái nguyên, thêm sự phức tạp và làm tăng dung lượng File và sẽ có ngày không sử dụng được File này nữa vì nó quá ì ạch.
 
Upvote 0
Theo tôi đề xuất bạn nên đi theo hướng khác, thế này:
1/ Sheet1: Nên làm danh mục duy nhất vì mỗi mã code nó có thể đi kèm theo 1 số thông tin khác (chưa hiểu thông tin gì?) có thể là đơn vị tính, đơn giá hay nhà cung cấp.
2/ Muốn nhập liệu cái gì đó thì tra danh mục (Sheet1), sau đó muốn Insert bao nhiêu dòng thì cho nó 1 con số 3, 5, 7 gì đó thì sẽ thực tế hơn là tra danh sách Sheet2 rồi gán mỗi mã code 200 lần (như vậy thì sẽ có rất nhiều dòng không dùng đến) sẽ gây lãng phí tái nguyên, thêm sự phức tạp và làm tăng dung lượng File và sẽ có ngày không sử dụng được File này nữa vì nó quá ì ạch.
Dạ, để con giải thích vì sao con cần cách làm này.
1/ Con có vd 10 file báo cáo, mỗi file tại 1 thời điểm tháng/tuần khác nhau mà sẽ có số lượng code khác nhau.
Có 1 file chuẩn chạy từ SAP thì đủ các code, nhưng vì có khi mỗi tuần có code mới thì các file đang làm việc sẽ thiếu code đó, và chưa kể là file dự báo thì ko có code cũ, mà file số thực thì rất nhiều code cũ (bán cho hết hàng), nên khi con cài hàm thì total lại ko bằng nhau (vd File 1 có 10 code thì ra 50 tổng, nhưng file 2 có 8 code thì ra 45 tổng, làm cho con phải đi kiểm tra xem sai ở đâu rất mất thời gian). Nên con tạo ra bài này là để kiểm tra chéo xem các file đang liên kết data tính toán bị thiếu và cần bổ sung các code nào. Dạ đúng là code sẽ đi kèm rất nhiều thông tin khác nữa.
=> bài này sẽ làm ra danh mục sheet 1 mà bác nói ạ là luôn chứa đủ các code (vì con sợ file chuẩn chạy từ SAP có khi họ deactivate 1 code nào đó sẽ ko chạy ra, trong khi vẫn đang cần code này cho dữ liệu quá khứ).

2/ Nhờ bác tư vấn giúp con: nếu con có sheet 2 dài vậy và có những code ra 0 toàn bộ dữ liệu đang tính (vd code đó có doanh số của 2016 mà bây giờ con chỉ tính toán từ 2017 trở đi => con có thể thêm 1 macro để tự xóa các dòng bằng 0 để file ngắn lại hay là đi insert như bác nói (tại con chưa hiểu lắm ý 2 của bác)
 
Upvote 0
Web KT
Back
Top Bottom