Theo dõi cấp phát máy móc thiết bị Excel

Liên hệ QC

hoangmai2605

Thành viên chính thức
Tham gia
27/2/09
Bài viết
92
Được thích
11
Chào các bạn trên forum,
- Mai muốn làm 1 file excel đơn giản thôi bạn để theo dõi việc cấp phát máy móc thiết bị (mmtb) cho các công trình.
- Mai gởi đính kèm file excel giải thích rõ dữ liệu đầu vào và yêu cầu tổng hợp tự động như sau :
- Tạo ra 2 sheet gọi là "DMctr" và "DMhang". Khi có công trình mới hay mmtb phát sinh thì nhập vào 2 sheet này. Đặc biệc ở sheet "DMctr" Mai có 2 dòng là "ZZ: Ban QLMMTB .Đây là nơi điều phối việc cấp mmtb đi công trình" và "YY: Phòng vật tư. Nơi mà sẽ mua mới mmtb từ yêu cầu của Ban QLMMTB".(Không cần theo dõi nhà cung ứng bán mmtb đâu)
- Mai có 1 sheet "Nhaplieu" để lưu lại các phiếu yêu cầu, rồi sự xem xét và cập phát từ ban QLMMTB. Mai có chú thích chi tiết trong sheet rồi Các Bạn.
Mai muốn ở những ô màu cam, sẽ sổ xuống list danh mục ctr hay danh mục hàng tương ứng để user chọn. Mai có dùng validation nhưng chỉ cho tao list 1 cột là maso hay ten thôi, trong khi Mai muốn sổ hết các cột trong danh muc tương ứng rồi user chon và ô tương ứng sẽ lưu lại giá trị maso thôi.
- 2 sheet cuối cùng là cái Mai muốn tổng hợp dữ liệu chạy ra tự động. Hiện thời Mai chưa nghĩ ra công thức để tổng hợp vì chưa tạo được list nhiều cột các bạn ạ. Các Bạn có thể chỉ giup Mai hàm nào hay công thức thế nào để tổng hợp như ý Mai muốn không.

Các Bạn giúp Mai giải bài toán này nghe
Cám ơn Các Bạn nhiều lắm và mong sớm nhận được sự chỉ dẫn của các bạn.

hoangmai2605
 

File đính kèm

Mình có cách thô như sau, bạn xem thử. Nếu ưng ý sẽ tiếp tục

Đầu tiên: Bạn sang 'DMHang'; tại [D2] bạn nhập công thức: =A2&"-"&B2. Sau đó chép xuống đến ô D19 (=A19&"-"&B19)
tại [D1] bạn gán tên cho trường này tùy thích, VD [Ma&Hg]

Sau đó ta tô chọn vùng từ 'D2:D19' này. Lúc đó ngăn trái cùng với thanh công thức hiện lên 'D2'; Bạn ấn chuột vô đó & gán tên mới là 'MHang' (Gán tên cho vùng 'D2:D19')
Thứ đến: Bạn qua trang tính "Nhap" ('NhapLieu' là dài). Kích hoạt vùng từ 'B5:B999'
Làm công việc mà bạn đã biết, đó là gán validation cho vùng này với list là 'MHang' nêu trên; Công việc xong, khi ta bấm chuột vô mũi tên đỗ xuống sẽ có các dòng gồm [Ma] & "-" & [TenHang]
Bước cuối: Bạn chép macro sau vô thanh sheetName của trang tính này:

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("B5:B999")) Is Nothing Then _
    Target.Value = Left(Target.Value, 5)
End Sub
Macro này có nhiệm vụ giúp bạn cắt bỏ phần thừa phía sau, không cần thiết đối với bạn. Chỉ để lại 5 ký tự đầu của đúng dòng mà bạn đã chọn.

Mình sẽ hướng dẫn tiếp nếu bạn ưng theo cách này!
 
- Mai rất cảm ơn sự chỉ dẫn của Bạn.
- Mai sẽ làm theo hướng Ban chỉ dẫn. Hiện thời đã làm được hết những gì bước đầu Bạn chỉ cho Mai (trong sheet NHAPLIEU việc nhập mathang đã chọn trong list dmhang và khi ok mathang thì trong ô tương ứng chỉ lưu maso mà thôi). Mai sẽ tạo Name và validation cho những ô màu cam còn lại trong NHAPLIEU. Bạn chỉ dẫn Mai tiếp tục nhé.
- Bạn à. Có 1 chút yêu cầu ngoài lề của bài toán, thuộc về chuyện định dạng. Đó là khi Bạn chọn mathang thì litbox mathang sổ xuống nhưng bề rộng chỉ đúng bằng bề rộng của column "MS MẶT HÀNG" thôi. Mai muốn bề rộng listbox thể hiện hết maso và tên (tất nhiên có thể can thiệp thô bằng cách giãn bề rộng column, nhưng như thế sẽ choáng không gian và Mai không thích như vậy). Yêu cầu ngoài lề này nếu không giải quyết được thì kệ nó Bạn.
- Bạn chỉ giúp tiếp cho Mai phần báo cáo tổng hợp với nhe.
- Mai rất mừng vì thấy Bạn hồi âm liền. Đây là lần đầu tiên Mai làm 1 file excell có tính lập trình như thế này. Mai học hỏi được nhiều lắm. Mai có làm 1 số bài toán kiểu quản lý vật tư, điều động mmtb tương tự nhưng lập trình trong access nên có thể hiểu được việc lập trình trong excell Bạn ạ.
- Một lần nữa rất cám ơn Bạn và mong Bạn chỉ dẫn tiếp để Mai có thể học hỏi thêm vận dụng trong công việc nhe Bạn.
- Chào Bạn
 
Cách thô thiển nhứt để thực hiện iêu cầu ngoài lề của bạn đây, xin mới

Vì bạn đã qua ms access rồi, nên chỉ cần gợi ý thôi; Việc làm cho tinh tế hơn là chuyện của bạn. (Có thể không dùng phương án RightClick này, mà dùng cách khác, hay hơn. . .)

PHP:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Not Intersect(Target, Columns("B:B")) Is Nothing Then
    If Columns("B:B").ColumnWidth = 8 Then
        Columns("B:B").ColumnWidth = 21
    Else
        Columns("B:B").ColumnWidth = 8
 End If:            End If
End Sub

Thứ nữa:
- Bạn chỉ giúp tiếp cho Mai phần báo cáo tổng hợp với nhe.
Mình chưa rõ bạn tổng hợp như thế nào, do trang 'NhapLieu' còn lôi thôi;
Chắc sau khi nhập liệu tương đối đủ các records, bạn đưa hai trang tính đó lên lại; để chúng ta cùng chiêm ngưỡng cách làm phải như thế nào vậy.

Mong tin bạn.
 
Có thể kết hợp Data Validation với macro, như sau

Mình muốn ở những ô màu cam, sẽ sổ xuống list danh mục ctr hay danh mục hàng tương ứng để user chọn. Mình có dùng validation nhưng chỉ cho tao list 1 cột là maso hay ten thôi, trong khi Mai muốn sổ hết các cột trong danh muc tương ứng rồi user chon và ô tương ứng sẽ lưu lại giá trị maso thôi.
Qui trình mình đề nghị sẽ như sau:

(*) Tạo các DV tại cột màu cam của bạn với danh sách tên. Việc này làm cho người sử dụng khỏi phân tâm; Và rõ ràng họ không cần quan tâm đến mã mặt hàng hay mã công trình của bạn;

(*) Nhưng khi người ta chọn tên công trình, thì macro sau đây sẽ gán mã công trình vô chổ tên côg trình đã chọn trong danh sách DV

Trong macro, mọi vấn đề mình nêu trên diễn ra từ dòng lệnh đươc đánh số 3 dưới đây


PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("B5:B999")) Is Nothing Then
    Target.Value = Left(Target.Value, 5)
3  ElseIf Not Intersect(Target, Columns("C:C")) Is Nothing Then
    Dim sRng As Range, Rng As Range:                        Dim Sh As Worksheet
    
    Set Sh = Sheets("DMuc")
    Set Rng = Sh.Range(Sh.[k2], Sh.[k2].End(xlDown))
    Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then Target.Value = sRng.Offset(, -1)
 End If
End Sub
Có thêm 1 chú í nhỏ: Mình đã nhập 2 trang tính danh mục lại làm 1 rồi & tên nó là 'DMuc';
Vùng 'J2:Kx' sẽ là vùng chứa mã & tên công trình
 
Chỉnh sửa lần cuối bởi điều hành viên:
Hướng dẫn theo dõi cấp phát mmtb

Qui trình mình đề nghị sẽ như sau:

(*) Tạo các DV tại cột màu cam của bạn với danh sách tên. Việc này làm cho người sử dụng khỏi phân tâm; Và rõ ràng họ không cần quan tâm đến mã mặt hàng hay mã công trình của bạn;

(*) Nhưng khi người ta chọn tên công trình, thì macro sau đây sẽ gán mã công trình vô chổ tên côg trình đã chọn trong danh sách DV

Trong macro, mọi vấn đề mình nêu trên diễn ra từ dòng lệnh đươc đánh số 3 dưới đây


PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("B5:B999")) Is Nothing Then
    Target.Value = Left(Target.Value, 5)
3  ElseIf Not Intersect(Target, Columns("C:C")) Is Nothing Then
    Dim sRng As Range, Rng As Range:                        Dim Sh As Worksheet
 
    Set Sh = Sheets("DMuc")
    Set Rng = Sh.Range(Sh.[k2], Sh.[k2].End(xlDown))
    Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then Target.Value = sRng.Offset(, -1)
 End If
End Sub
Có thêm 1 chú í nhỏ: Mình đã nhập 2 trang tính danh mục lại làm 1 rồi & tên nó là 'DMuc';
Vùng 'J2:Kx' sẽ là vùng chứa mã & tên công trình

-Cám ơn bạn HYEN17 đã hướng dẫn 1 cách khác trong việc cập nhật sheet NHAPLIEU trong bài toán của Mai.
- Bạn ơi Mai chưa thể hiện được theo cách hướng dẫn của Bạn. Theo như Bạn thì 2 sheet DMhang và DMctr được bạn dồn vào 1 tên là DMuc và phần maso, tenctr nằm ở 2 column J và K. Mai đồng ý với Bạn.
- Như vậy bạn có sinh ra 2 column phụ mathang(maso+tenhang) và congtrinh(maso+tenctr) và tạo các name "listhang" và "lỉstct" trên 2 column phụ này không (như 1 bạn đã hướng dẫn Mai bên trên đó). Nếu có tạo column phụ thì cũng giống cách bạn trước đã hướng dẫn. Nhưng trong phần diễn giải của bạn thì Mai hiểu là Bạn không sinh column phụ và bạn tạo các name "listhang" chỉ là tenhang và "lỉstct" là tenctr thôi. Như vậy trong sheet NHAPLIEU, các ô màu cam được cài validation khi click vào thì sổ xuống listhang và listctr nhưng khi chọn xong thì ô tương ứng chỉ thể hiện maso mà thôi. Mai đã thực hiện đúng như Mai hiểu và có đưa macro của Bạn vào thì không ra như mong muốn(Có lẽ do chưa đủ kiến thức để hiểu lệnh Bạn viết, mong bạn thông cảm vì đang tập lập trình trong excell mà). Mong Bạn giải thích lại rõ hơn vì Mai nghĩ cách hướng dẫn này phần nào giải quyết được trường hợp ngoài lề bài toán.
- Khi đã hiểu và thực hiện được cách bạn hướng dẫn thì Mai sẽ chọn cách phù hợp nhất mà 2 Bạn đã chỉ Mai rồi sẽ đưa dữ liệu thực vào, nêu rõ những dữ liệu cần tổng hợp và post lên lại để nhờ các Bạn chỉ giúp tiếp.
- Mong tin Bạn hướng dẫn. Chân thành cám ơn Bạn nhé.
 
Theo dõi cấp phát mmtb

Vì bạn đã qua ms access rồi, nên chỉ cần gợi ý thôi; Việc làm cho tinh tế hơn là chuyện của bạn. (Có thể không dùng phương án RightClick này, mà dùng cách khác, hay hơn. . .)

PHP:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Not Intersect(Target, Columns("B:B")) Is Nothing Then
    If Columns("B:B").ColumnWidth = 8 Then
        Columns("B:B").ColumnWidth = 21
    Else
        Columns("B:B").ColumnWidth = 8
 End If:            End If
End Sub

Thứ nữa: Mình chưa rõ bạn tổng hợp như thế nào, do trang 'NhapLieu' còn lôi thôi;
Chắc sau khi nhập liệu tương đối đủ các records, bạn đưa hai trang tính đó lên lại; để chúng ta cùng chiêm ngưỡng cách làm phải như thế nào vậy.

Mong tin bạn.

- Bạn ChanhTQ à,
- Mai đã làm tạm tạm được phần nhập liệu theo như cách bạn hướng dẫn.
- Bây giờ Mai xin post lên file đã làm và nhờ Bạn cũng như diễn đàn xem xét giúp Mai làm phần tổng hợp để ra kết quả tự động ở 2 sheet cuối.
- Mai đã suy nghĩ và thấy nên tổ chức 1 file excell như vầy để quản lý số liệu cho 1 CTR mà thôi.
- Bạn và các bạn khác xem xét và hướng dẫn Mai làm tiếp nhé (vì đang tập sự lập trình trong excell mà).
- Xin chân thành cảm ơn sự giúp đỡ và mong nhận được hồi âm
 

File đính kèm

Như trong phần diễn giải của bạn thì Mai hiểu là Bạn không sinh column phụ và bạn tạo các name "listhang" chỉ là tenhang và "lỉstct" là tenctr thôi. Như vậy trong sheet NHAPLIEU, các ô màu cam được cài validation khi click vào thì sổ xuống listhang và listctr nhưng khi chọn xong thì ô tương ứng chỉ thể hiện maso mà thôi. Mai đã thực hiện đúng như Mai hiểu và có đưa macro của Bạn vào thì không ra như mong muốn(Có lẽ do chưa đủ kiến thức để hiểu lệnh Bạn viết, mong bạn thông cảm vì đang tập lập trình trong excell mà). Mong Bạn giải thích lại rõ hơn vì Mai nghĩ cách hướng dẫn này phần nào giải quyết được trường hợp ngoài lề bài toán.
- Mong tin Bạn hướng dẫn. Chân thành cám ơn Bạn nhé.
PHP:
3  ElseIf Not Intersect(Target, Columns("C:C")) Is Nothing Then
    Dim sRng As Range, Rng As Range:                        Dim Sh As Worksheet
 
5    Set Sh = Sheets("DMuc")
    Set Rng = Sh.Range(Sh.[k2], Sh.[k2].End(xlDown))
7    Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then Target.Value = sRng.Offset(, -1)
Các câu lệnh mình trích trên đây sẽ làm việc khi bạn nhập liệu vô cột 'C' mà thôi; các cột sau nó chưa viết.
Dòng lệnh số 3: Nói rằng, 1 khi bạn đụng vô cột 'C' của tui thì tôi sẽ . . .
Các lệnh của dòng tiếp theo như MS access bạn đã biết, đó là định nghĩa các biến & Sh ở đây là 1 biến đối tượng (Cho nên dòng lệnh 5 phải dùng Set . . . - i chang access mà.)
Dòng lệnh 6: gán vùng 'K2:Ki' vô biến Rng; Ở đây i là ô cuối của cột 'K' có chứa dữ liệu
Dòng lệnh 7: Tìm trong vùng Rng giá trị mà bạn đã nhập vô (tại cột 'C' của trang tính 'Nhap'
Tất nhiên sẽ tìm thấy, vì trên các ô cột này trước đó bạn đã gán CF liên quan đến danh sách tên các công trình;
Dòng lệnh 8: Lấy giá trị ghi ở cột bên trái liền kề ô tìm thấy ghi đè lên ô bạn vừa nhập
(Có nghĩa là bạn cứ chọn theo tên công trình theo CF, bạn sẽ được ghi mã của công trình vô ngay ô đó)

Vì sao tôi không đưa file mẫu lên, chắc bạn cũng phải đoán ra: Khả năng của bạn sẽ dư sức làm theo hướng dẫn.

Chúc bạn thành công. :-=
 
Chỉnh sửa lần cuối bởi điều hành viên:
- Bây giờ Mai xin post lên file đã làm và nhờ Bạn cũng như diễn đàn xem xét giúp Mai làm phần tổng hợp để ra kết quả tự động ở 2 sheet cuối.
- Bạn và các bạn khác xem xét và hướng dẫn Mai làm tiếp nhé (vì đang tập sự lập trình trong excell mà).
- Xin mong nhận được hồi âm
Sau một thời gian không ngắn, nhưng chắc chưa dài lắm lập qua lại giữa hai trang tính 'Nhap' & 'BCTheoDHang' mà vẫn chưa hiểu.
Theo những gì mình mường tượng, như sau:
Trang 'Nhap' là kho chứa toàn bộ dữ liệu liên quan;
Còn 2 trang tính cuối là những báo cáo, rút trích tử 'Nhap' theo tiêu chí nhất định;
(Đến đây thì bí, không biết như thế nào nữa. . .)

Hay là thế này đi:

Bạn giả lập trang tính nhập khoảng 20-30 records bao hàm toàn bộ hoạt động cần được quản lý của bạn;
Sau đó trang 'BCTheoDHang' được rút trích từ 'Nhap'

Có vậy mới viết macro cho bạn được.

Chờ tin bạn.:-=
 
Sau một thời gian không ngắn, nhưng chắc chưa dài lắm lập qua lại giữa hai trang tính 'Nhap' & 'BCTheoDHang' mà vẫn chưa hiểu.
Theo những gì mình mường tượng, như sau:
Trang 'Nhap' là kho chứa toàn bộ dữ liệu liên quan;
Còn 2 trang tính cuối là những báo cáo, rút trích tử 'Nhap' theo tiêu chí nhất định;
(Đến đây thì bí, không biết như thế nào nữa. . .)

Hay là thế này đi:

Bạn giả lập trang tính nhập khoảng 20-30 records bao hàm toàn bộ hoạt động cần được quản lý của bạn;
Sau đó trang 'BCTheoDHang' được rút trích từ 'Nhap'

Có vậy mới viết macro cho bạn được.

Chờ tin bạn.:-=

- Chào bạn ChanhTQ,
- Sheet NHAP lưu toàn bộ dữ liệu liên quan đến việc CTR yêu cầu cấp hàng (ở đây Mai gọi là đơn hàng), hướng xem xét điều động từ CTR khác qua hay từ P. vật tư (mua mới) và chi tiết những lần cấp hàng trong thực tế tương ứng với từng đơn hàng.
- VD như đơn hàng 01 của mặt hàng 01001, có mã hiệu là 0100101 thì CTR yêu cầu là 818, qua phần xem xét từ BQL sẽ do P.Vật tư (mua mới) và chi tiết các ngày cấp hàng theo đơn hàng là 6 dòng ngay bên dưới. Bạn để ý dòng ngày nhập 14/02/2009 của mặt hàng 01001 này . Thực tế chỉ có 1 phiếu nhập với số lượng 177, nhưng khi vào dữ liệu ở đây thì Mai là tẻ thành 2 dòng : Dòng 11: số lượng = 150 (cho tách toán đơn hàng 0100101) và Dòng 13: số lượng = 27.
- Mai đã xoá bớt dữ liệu (tính đưa thêm vào nữa đó để muốn cho Bạn thấy Mai đánh mã trong mặt hàng, đơn hàng là có ý nghĩa hết đó, và cần dùng số ký tự như thế trong mỗi loại mã số. Với lại việc cung cấp hàng trong thực tế có thể sẽ lớn hơn theo yêu cầu vì muốn gởi 1 mặt hàng nào đó tạm ở kho CTR rồi sẽ điều động đi sau). Hiện thời chỉ còn các đơn hàng của 3 măt hàng trong sheet NHAP mà thôi.
- Mong muốn thể hiện việc tổng hợp dữ liệu từ sheet NHAP này sẽ là việc click chọn 2 command button ở phía cuối. Khi click “Tổng hợp theo đơn hàng” thì Mai sẽ có dữ liệu tổng hợp tương ứng trong sheet “Bctheodonhang” còn click “Tổng hợp theo mặt hàng” thì có dữ liệu tổng hợp tương ứng trong “Bctheohang”.
- Mai đã soạn lại dữ liệu và đã giải thích rõ hơn rồi nhé. Bạn giúp Mai giải tiếp bải toán nhé. Chân thành cảm ơn bạn nhiều.
 

File đính kèm

PHP:
Vì sao tôi không đưa file mẫu lên, chắc bạn cũng phải đoán ra: Khả năng của bạn sẽ dư sức làm theo hướng dẫn. 
Chúc bạn thành công. :-=[/quote]
 
- Chào bạn HYen17,
- Mai nói thật đó đây là lần đầu tiên Mai tập lập trình trên excell đó. Mai chưa hiểu được lệnh bạn sử dụng đâu.
- Mai có thể hiểu và làm tiếp tương tự theo cách mà bạn ChanhTQ hướng dẫn. Mai biết việc mình viết code trong excell cũng như tổ chức các sheet nhập liệu có thể sẽ bị các bạn trong forum chê dở và luộm thuộm nhưng Mai vẫn làm theo ý của mình để từ từ rút kinh nghiệm và mong là sẽ khá dần hơn với việc viết macro.
- Mai xin chân thành cảm ơn Bạn, để từ từ Mai nghiên cứu sự hướng dẫn của Bạn sau. Mai đang giải bài toán theo cách hướng dẫn của bạn ChanhTQ và chút kiến thức hiểu biết của mình. Nếu có thể Bạn hướng dẫn thêm Mai trong tiến trình đang giải bài toán này ha. Chúc Bạn gặp được nhiều điều may lành trong cuộc sống.
 
Hiểu rồi bạn à, chờ kết quả nay mai sẽ có thôi nha!

Cho hỏi thêm, tại trang 'Nhap' càng ngày số records càng tích tụ phải không; Vậy báo cáo sẽ lọc ra theo tháng hay theo tiêu chí nào. (Nếu không tích tụ thì dễ rồi)

Góp ý thêm macro của bạn: Bạn nên xài ElseIf sẽ tiện hơn, chắc bạn xem lại có đúng vậy không:

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("A5:A999")) Is Nothing Then
    Target.Value = Left(Target.Value, 7)
 ElseIf Not Intersect(Target, Range("B5:B999")) Is Nothing Then
    Target.Value = Left(Target.Value, 5)
 ElseIf Not Intersect(Target, Range("C5:C999")) Is Nothing Then
    Target.Value = Left(Target.Value, 2)
 ElseIf Not Intersect(Target, Range("E5:C999")) Is Nothing Then
    Target.Value = Right(Target.Value, 17)
 ElseIf Not Intersect(Target, Range("G5:G999")) Is Nothing Then
    Target.Value = Left(Target.Value, 2)
 ElseIf Not Intersect(Target, Range("I5:I999")) Is Nothing Then
    Target.Value = Left(Target.Value, 2)
 ElseIf Not Intersect(Target, Range("L5:L999")) Is Nothing Then
    Target.Value = Left(Target.Value, 2)
End Sub
 
Lần chỉnh sửa cuối:
Cho hỏi thêm, tại trang 'Nhap' càng ngày số records càng tích tụ phải không; Vậy báo cáo sẽ lọc ra theo tháng hay theo tiêu chí nào. (Nếu không tích tụ thì dễ rồi)

Góp ý thêm macro của bạn: Bạn nên xài ElseIf sẽ tiện hơn, chắc bạn xem lại có đúng vậy không:

- Vâng cám ơn bạn chỉ dẫn thêm về macro Mai đã tạo (cú pháp lệnh trong access và excell khác nhau mà Bạn. Mai xin tiếp thu sự chỉ bảo).
- Vâng, file dữ liệu này sẽ theo suốt ctr cho đến khi nó hoàn thành đó Bạn. Bởi thế Mai mới chỉ để 1 file excell để quản cho 1 ctr thôi là vậy đó.
- Bạn để ý số hiệu các đơn hàng sẽ được đánh theo mặt hàng. Như thế số hiệu càng lớn thì thời gian càng về sau đó bạn. Vì thế Mai nghĩ báo cáo theo đơn hàng thì tất nhiên sẽ lọc theo mặt hàng, rồi tới các đơn hàng của mặt hàng (đơn hàng thì nên theo giảm dần).
- Bạn hồi âm nhanh ghê. Cám ơn bạn nhiều nghe. Hy vọng đầu tuần nhận được sự chỉ dẫn của bạn để làm tiếp. (Vì Mai chưa kể đến việc nếu đưa file này vào thực tế áp dụng, thì ctr đã thi công rồi bạn, số liệu nhiều lắm sao nhập từ đầu được mà Mai tính sẽ fix ở 1 thời điểm rồi chốt tổng số ctr yêu cầu và việc cấp cho nó đối với từng mặt hàng rồi cập nhật những giá trị này vào 1 sheet khác, chỉ cho nhập tiếp vào NHAP ở thời gian sau chốt tồn thôi bạn. Như thế việc tổng hợp sẽ phải kể đến số tồn chốt này, Bạn thấy đúng không. Để chuyên này tính sau. Mai muốn giải bải toán cơ bản trước đã).
 
Muốn cơ bản, có cơ bản

Chú í khi dùng:
(*) Tên trang tính đã bị đổi thành "BCDonHang"
(*) Các dòng trong báo cáo chưa được định dạng; Hãy cảm ơn & nói rõ cần như thế nào, nếu muốn định dạng, khà khà, . . . . /.

PHP:
Option Explicit
Sub BCDonHang()
 Dim eRw As Long, Jf As Long:                       Dim Sh As Worksheet
 Dim Clls As Range, Rng0 As Range:                  Const DDg As String = "0####"
 Dim MaHg As String, SoDHg As String:               Dim OneR As Byte
  
 Sheets("Nhap").Select:                             eRw = [b65500].End(xlUp).Row
 Set Sh = Sheets("BCDonHang"):                      Sh.Columns(1).NumberFormat = DDg
 Sh.Columns(4).NumberFormat = DDg & "##"
 Sh.Range(Sh.[a4], Sh.Cells(eRw, "H")).ClearContents
 For Jf = 5 To eRw
    With Sh.[D65500].End(xlUp) 'A'
        Set Clls = Cells(Jf, "B")

        If MaHg <> Cells(Jf, 2).Value And SoDHg <> Cells(Jf, 1).Value Then
            
            MaHg = Clls.Value '
            .Offset(1, -3).Value = MaHg

            Set Rng0 = Sheets("DMHang").[a1]
            .Offset(1, -2).Value = Range(Rng0, Rng0.End(xlDown)).Find(MaHg, , _
                xlFormulas, xlWhole).Offset(, 1).Value
            .Offset(1, -1).Value = Range(Rng0, Rng0.End(xlDown)).Find(MaHg, , _
                xlFormulas, xlWhole).Offset(, 2).Value

            SoDHg = Clls.Offset(, -1)
            .Offset(2) = SoDHg
            .Offset(2, 1) = Clls.Offset(, 3)
            .Offset(2, 2) = Clls.Offset(, 2)
            .Offset(2, 3) = Application.WorksheetFunction. _
                Sum(Range(Clls.Offset(1, 9), Clls.Offset(1, 9).End(xlDown)))
        ElseIf MaHg = Cells(Jf, 2).Value And SoDHg <> Cells(Jf, 1).Value Then
            SoDHg = Clls.Offset(, -1)
            .Offset(1) = SoDHg 
            .Offset(1, 1) = Clls.Offset(, 3)
            .Offset(1, 2) = Clls.Offset(, 2)
            .Offset(1, 3) = Application.WorksheetFunction. _
                Sum(Range(Clls.Offset(1, 9), Clls.Offset(1, 9).End(xlDown)))
                
        End If
    End With
 Next Jf
 Sh.Select:                                     Set Sh = Nothing
End Sub
 

File đính kèm

Chú í khi dùng:
(*) Tên trang tính đã bị đổi thành "BCDonHang"
(*) Các dòng trong báo cáo chưa được định dạng; Hãy cảm ơn & nói rõ cần như thế nào, nếu muốn định dạng, khà khà, . . . . /.

-Vì không rành việc sử dụng forum nên Mai chỉ biết cảm ơn bạn khi Mai nhận được hồi âm và Mai hồi âm lại bạn thôi. Lần này Mai click đại vào nút Cảm ơn đó, như vậy đúng không bạn.
- Không ngờ Bạn hướng dẫn Mai nhanh ghê. Cảm ơn bạn nhiều nhé.
- Đựơc nghĩ ngày cuối tuần phải làm mấy việc nội trợ ở nhà nên không giải tiếp bài toán này được bạn ạ. Cám ơn Bạn nghe, để sang tuần Mai sẽ làm tiếp tục.
- Đầu tiên khi tham gia forum Mai post bài lên chỗ excel ứng dụng, vấn đề khác, không thấy ai trả lời hết thiệt là buồn nên phải post lại ở chỗ khác và không ngờ được hướng dẫn nhanh ghê. Mai không biết dùng forum để nhờ trợ giúp, mới được người bạn chỉ webketoan và vô tình biết được giaiphapexcel rồi bạn chỉ cách post bài nên mới biết đó bạn ạ. Chắc Mai sẽ học hỏi thêm nhiều được qua các forum hữu ích.
- Cám ơn bạn lần nữa và chúc bạn có ngày nghĩ cuối tuần vui vẻ
 
Version 1.2 đây, mình nghĩ còn có thể cải tiến được nữa.

PHP:
Option Explicit
Sub BCDHang()
 Dim eRw As Long, Jf As Long:                       Dim Sh As Worksheet
 Dim Clls As Range, Rng0 As Range:                  Const DDg As String = "0####"
 Dim MaHg As String, SoDHg As String:               Dim OneR As Byte
  
 Sheets("Nhap").Select:                             eRw = [b65500].End(xlUp).Row
 Set Sh = Sheets("BCDonHang")
 Sh.Range(Sh.[a4], Sh.Cells(eRw, "H")).Clear:       Sh.Columns(1).NumberFormat = DDg
 Sh.Columns(4).NumberFormat = DDg & "##"
 For Jf = 5 To eRw
    With Sh.[D65500].End(xlUp)
        Set Clls = Cells(Jf, "B")
        If SoDHg <> Cells(Jf, 1).Value Then
            SoDHg = Clls.Offset(, -1)
            If MaHg <> Clls.Value Then
                MaHg = Clls.Value
                .Offset(1, -3).Value = MaHg
                Set Rng0 = Sheets("DMHang").[a1]
                .Offset(1, -2).Value = Range(Rng0, Rng0.End(xlDown)).Find(MaHg, , _
                    xlFormulas, xlWhole).Offset(, 1).Value
                .Offset(1, -1).Value = Range(Rng0, Rng0.End(xlDown)).Find(MaHg, , _
                    xlFormulas, xlWhole).Offset(, 2).Value
                .Offset(1, -3).Resize(, 3).Font.Bold = True
                OneR = 2
            Else
                OneR = 1
            End If
            .Offset(OneR) = SoDHg
            .Offset(OneR, 1) = Clls.Offset(, 3)
            .Offset(OneR, 2) = Clls.Offset(, 2)
            .Offset(OneR, 3) = Application.WorksheetFunction. _
                Sum(Range(Clls.Offset(1, 9), Clls.Offset(1, 9).End(xlDown)))
        End If
    End With
 Next Jf
 Sh.Select:                                     Set Sh = Nothing
End Sub

Macro này có thêm phần định dạng in đâm 1 số dòng có chứa mã hàng.

Chúc bạn ngày nghĩ cuối tuần vui vẽ!
 
Version 2.0 đây, mình nghĩ không cần cải tiến thêm nữa.

PHP:
Sub BCDonHang()
 Dim eRw As Long, Jf As Long:                       Dim Dem As Byte
 Dim BDau As Long, Cuoi As Long
 Const DDg As String = "0####":                     Dim Sh As Worksheet
 Dim MaHg As String, SoDHg As String
 Dim Rng0 As Range:                                 Dim OneR As Byte
  
 Sheets("Nhap").Select:                             eRw = [b65500].End(xlUp).Row
1 Set Sh = Sheets("BCDonHang"):                      Sh.Columns(1).NumberFormat = DDg
 Sh.Columns(4).NumberFormat = DDg & "##"
 Sh.Range(Sh.[a4], Sh.Cells(eRw, "H")).ClearContents
 Cuoi = 4
 Do
    BDau = Cuoi + 1
    Cuoi = Cells(Cuoi + 2, "D").End(xlDown).Row - 1
    With Sh.[D65500].End(xlUp)
        If Cells(BDau, "B") <> MaHg Then
            MaHg = Cells(BDau, "B").Value
        
2            .Offset(1, -3) = MaHg '*'
            
            Set Rng0 = Sheets("DMHang").[a1]
            Set Rng0 = Range(Rng0, Rng0.End(xlDown))
            
3            .Offset(1, -2).Value = Rng0.Find(MaHg, , xlFormulas, xlWhole).Offset(, 1).Value
4            .Offset(1, -1).Value = Rng0.Find(MaHg, , xlFormulas, xlWhole).Offset(, 2).Value
5            .Offset(1, -3).Resize(, 7).Font.Bold = True
            OneR = 2
        Else
            OneR = 1
        End If
6        .Offset(OneR) = Cells(BDau, "A")
7        .Offset(OneR, 1) = Cells(BDau, "E")
8        .Offset(OneR, 2) = Cells(BDau, "D")
9        .Offset(OneR, 3) = Application.WorksheetFunction. _
            Sum(Range(Cells(BDau, "K"), Cells(Cuoi, "K")))
10         .Offset(OneR, 4).FormulaR1C1 = "=RC[-2]-RC[-1]"
        
    End With
    If Cuoi > eRw Then Exit Do
 Loop
 Sh.Select:                                     Set Sh = Nothing
End Sub

Góp í cho bạn thêm các vấn đề sau:


(1) Trang tính BCDonHang chỉ cần thêm các thông số của phép cọng lên các dòng in đậm bên trên là được gần giống nội dung trang BCTheoHang rồi còn gì.
Nếu bạn vẫn muốn tách ra làm 2 trang tính như vậy, thì cũng thực hiện cho bạn được thôi. Nhưng cảm giác hơi bị thừa 1 chút.

(2) Bạn hiện có 8 hạng mục công trình; Dự định bạn làm >= 8 trang tính nhập cho từng công trình;
Còn mình khuyến cáo bạn chỉ 2 trang tính mà thôi; (Thực ra là 1 trang tính 'Nhap' để lưu toàn bộ số liệu của các công trình; còn 1 cái dùng để chứa dữ liệu tạm thời của 1 công trình cụ thể nào đó rút trích từ 8 cái kia mà ra.

Như vậy, trước khi làm báo cáo nào đó, ta làm động tác rút trích công trình nào đó cần báo cáo vô trang tính tạm này; và mọi việc tiến hành như chúng ta đã & đang làm, để đẻ ra các báo cáo các loại;

(3) Mình khuyên bạn 1 điều rằng, như CSDL bân access, ở đây, trên trang tính nhập ta không nên để trống các ô như vậy;
Điều này gây trở ngại rất nhiều, một khi chúng ta cần xử lý bằng macro CSDL này.
Nếu bạn thực thi mục (2) thì chí ít cột 'C' phải có đầy đủ tên các công trình mới lọc ra thuận tiện; Khi đã điền đầy dữ liệu (không có ô trống) lúc đó ta dùng công cụ mạnh khác của excel là AdvancedFiilter suông sẻ được.

Chúc bạn tuần làm việc thành công!:-=
 
Lần chỉnh sửa cuối:
PHP:
Sub BCDonHang()
 Dim eRw As Long, Jf As Long:                       Dim Dem As Byte
 Dim BDau As Long, Cuoi As Long
 Const DDg As String = "0####":                     Dim Sh As Worksheet
 Dim MaHg As String, SoDHg As String
 Dim Rng0 As Range:                                 Dim OneR As Byte
 
 Sheets("Nhap").Select:                             eRw = [b65500].End(xlUp).Row
 Set Sh = Sheets("BCDonHang"):                      Sh.Columns(1).NumberFormat = DDg
 Sh.Columns(4).NumberFormat = DDg & "##"
 Sh.Range(Sh.[a4], Sh.Cells(eRw, "H")).ClearContents
 Cuoi = 4
 Do
    BDau = Cuoi + 1
    Cuoi = Cells(Cuoi + 2, "D").End(xlDown).Row - 1
    With Sh.[D65500].End(xlUp)
        If Cells(BDau, "B") <> MaHg Then
            MaHg = Cells(BDau, "B").Value
 
      (1)  Sh.[D65500].End(xlUp).Offset(1, -3) = MaHg
 
            Set Rng0 = Sheets("DMHang").[a1]
            Set Rng0 = Range(Rng0, Rng0.End(xlDown))
 
     (2)   .Offset(1, -2).Value = Rng0.Find(MaHg, , xlFormulas, xlWhole).Offset(, 1).Value
     (3)   .Offset(1, -1).Value = Rng0.Find(MaHg, , xlFormulas, xlWhole).Offset(, 2).Value
     (4)   .Offset(1, -3).Resize(, 7).Font.Bold = True
            OneR = 2
        Else
            OneR = 1
        End If
        .Offset(OneR) = Cells(BDau, "A")
 (5)   .Offset(OneR, 1) = Cells(BDau, "E")
 (6)   .Offset(OneR, 2) = Cells(BDau, "D")
 (7)   .Offset(OneR, 3) = Application.WorksheetFunction. _
            Sum(Range(Cells(BDau, "K"), Cells(Cuoi, "K")))
  (8)  .Offset(OneR, 4).FormulaR1C1 = "=RC[-2]-RC[-1]"
 
    End With
    If Cuoi > eRw Then Exit Do
 Loop
 Sh.Select:                                     Set Sh = Nothing
End Sub

-Chào Bạn,
- Mai chỉ nắm tổng quát được đoạn code bạn muốn thực hiện điều gì. Chứ nói thiệt khi làm access Mai không dùng đến những khái niệm range, offset bạn ạ nên từ giờ sẽ học bạn cách dùng lệnh theo kiểu tham chiếu này.
- (1,2,3,4) Bạn muốn in ra trên BCDonHang một mặt hàng phát sinh trong NHAP và in đậm dòng mặt hàng này, phải không bạn.
- (5.6,7) : Bạn thể hiện thông tin về 1 đơn hàng : số hiệu ĐH, ngày yêu cầu cấp và SL đã cấp.
- Mai chưa biết bạn thễ hiện dòng lệnh để cho dữ liệu SL yêu cầu và phần chênh lệnh bạn ạ. Mong bạn chỉ cho.
- Với lại bạn thể hiện giúp lệnh sum theo mặt hàng (SL yêu cầu và SL cung cấp) đi bạn vì Mai đã nói chưa có làm theo kiểu dùng địa chỉ tham chiếu như bạn. Tiện làm ơn giúp mình luôn nhé.
- Bạn hướng dẫn Mai nên để NHAP lưu toàn bộ dữ liệu của tất cả công trình (các yêu cầu của việc cấp phát cho từng công trình). Rổi muốn xem xét thông tin liên quan đến công trình nào thì dùng filter lọc sang 1 sheet khác và chạy 2 nút lệnh phải không bạn. Mai có nghĩ đến đó bạn. Nhưng sợ là NHAP nặng nề dữ liệu lắm và rất rối khi nhập dữ liệu vào NHAP bạn ơi. Số lương CTR Mai đã sử dụng hầu hết các con số (01-99) và đã sang dùng ký tự chữ đó bạn. Còn số lượng đơn hàng dùng cho từng CTR mai dùng đến 2 ký tự để đánh số đó thì bạn sẽ nghĩ việc yêu cầu rồi cấp phát theo từng mặt hàng nhiều như thế nào. Mai chỉ trích 1 phần rất nhỏ dữ liệu để hỏi bạn đó.
- Để Mai xem xét dữ liệu thế nào rồi có thể theo hướng bạn chỉ không? Chứ như vầy thì kg tổng hợp được trong 1 tháng, tất cả ctr yêu cầu từng mặt hàng là bao nhiêu và đã cung cấp được tổng số như thế nào,... Ý muốn tổng hợp tất cả các ctr đó bạn.
- Trao đổi với bạn chút vậy nghe. Có gì học hỏi tiếp ở bạn.
- Chào bạn và chúc bạn tuần mới làm việc tốt đẹp
 
PHP:
Sub BCDonHang()
 Dim eRw As Long, Jf As Long:                       Dim Dem As Byte
 Dim BDau As Long, Cuoi As Long
 Const DDg As String = "0####":                     Dim Sh As Worksheet
 Dim MaHg As String, SoDHg As String
 Dim Rng0 As Range:                                 Dim OneR As Byte
 
 Sheets("Nhap").Select:                             eRw = [b65500].End(xlUp).Row
 Set Sh = Sheets("BCDonHang"):                      Sh.Columns(1).NumberFormat = DDg
 Sh.Columns(4).NumberFormat = DDg & "##"
 Sh.Range(Sh.[a4], Sh.Cells(eRw, "H")).ClearContents
 Cuoi = 4
 Do
    BDau = Cuoi + 1
    Cuoi = Cells(Cuoi + 2, "D").End(xlDown).Row - 1
    With Sh.[D65500].End(xlUp)
        If Cells(BDau, "B") <> MaHg Then
            MaHg = Cells(BDau, "B").Value
 
      (1)  Sh.[D65500].End(xlUp).Offset(1, -3) = MaHg
 
            Set Rng0 = Sheets("DMHang").[a1]
            Set Rng0 = Range(Rng0, Rng0.End(xlDown))
 
      (2)  .Offset(1, -2).Value = Rng0.Find(MaHg, , xlFormulas, xlWhole).Offset(, 1).Value
      (3)  .Offset(1, -1).Value = Rng0.Find(MaHg, , xlFormulas, xlWhole).Offset(, 2).Value
      (4)  .Offset(1, -3).Resize(, 7).Font.Bold = True
            OneR = 2
        Else
            OneR = 1
        End If
        .Offset(OneR) = Cells(BDau, "A")
   (5) .Offset(OneR, 1) = Cells(BDau, "E")
   (6) .Offset(OneR, 2) = Cells(BDau, "D")
   (7) .Offset(OneR, 3) = Application.WorksheetFunction. _
            Sum(Range(Cells(BDau, "K"), Cells(Cuoi, "K")))
         .Offset(OneR, 4).FormulaR1C1 = "=RC[-2]-RC[-1]"
 
    End With
    If Cuoi > eRw Then Exit Do
 Loop
 Sh.Select:                                     Set Sh = Nothing
End Sub
Góp í cho bạn thêm các vấn đề sau:

(1) Trang tính BCDonHang chỉ cần thêm các thông số của phép cọng lên các dòng in đậm bên trên là được gần giống nội dung trang BCTheoHang rồi còn gì.
Nếu bạn vẫn muốn tách ra làm 2 trang tính như vậy, thì cũng thực hiện cho bạn được thôi. Nhưng cảm giác hơi bị thừa 1 chút.

(2) Bạn hiện có 8 hạng mục công trình; Dự định bạn làm >= 8 trang tính nhập cho từng công trình;
Còn mình khuyến cáo bạn chỉ 2 trang tính mà thôi; (Thực ra là 1 trang tính 'Nhap' để lưu toàn bộ số liệu của các công trình; còn 1 cái dùng để chứa dữ liệu tạm thời của 1 công trình cụ thể nào đó rút trích từ 8 cái kia mà ra.

Như vậy, trước khi làm báo cáo nào đó, ta làm động tác rút trích công trình nào đó cần báo cáo vô trang tính tạm này; và mọi việc tiến hành như chúng ta đã & đang làm, để đẻ ra các báo cáo các loại;

(3) Mình khuyên bạn 1 điều rằng, như CSDL bân access, ở đây, trên trang tính nhập ta không nên để trống các ô như vậy;
Điều này gây trở ngại rất nhiều, một khi chúng ta cần xử lý bằng macro CSDL này.
Nếu bạn thực thi mục (2) thì chí ít cột 'C' phải có đầy đủ tên các công trình mới lọc ra thuận tiện; Khi đã điền đầy dữ liệu (không có ô trống) lúc đó ta dùng công cụ mạnh khác của excel là AdvancedFiilter suông sẻ được.

Chúc bạn tuần làm việc thành công!:-=

-Chào Bạn,
- Mai chỉ nắm tổng quát được đoạn code bạn muốn thực hiện điều gì. Chứ nói thiệt khi làm access Mai không dùng đến những khái niệm range, offset bạn ạ nên từ giờ sẽ học bạn cách dùng lệnh theo kiểu tham chiếu này.
- (1,2,3,4) Bạn muốn in ra trên BCDonHang một mặt hàng phát sinh trong NHAP và in đậm dòng mặt hàng này, phải không bạn.
- (5.6,7) : Bạn thể hiện thông tin về 1 đơn hàng : số hiệu ĐH, ngày yêu cầu cấp và SL đã cấp.
- Mai chưa biết bạn thễ hiện dòng lệnh để cho dữ liệu SL yêu cầu và phần chênh lệnh bạn ạ. Mong bạn chỉ cho.
- Với lại bạn thể hiện giúp lệnh sum theo mặt hàng (SL yêu cầu và SL cung cấp) đi bạn vì Mai đã nói chưa có làm theo kiểu dùng địa chỉ tham chiếu như bạn. Tiện làm ơn giúp mình luôn nhé.
- Bạn hướng dẫn Mai nên để NHAP lưu toàn bộ dữ liệu của tất cả công trình (các yêu cầu của việc cấp phát cho từng công trình). Rổi muốn xem xét thông tin liên quan đến công trình nào thì dùng filter lọc sang 1 sheet khác và chạy 2 nút lệnh phải không bạn. Mai có nghĩ đến đó bạn. Nhưng sợ là NHAP nặng nề dữ liệu lắm và rất rối khi nhập dữ liệu vào NHAP bạn ơi. Số lương CTR Mai đã sử dụng hầu hết các con số (01-99) và đã sang dùng ký tự chữ đó bạn. Còn số lượng đơn hàng dùng cho từng CTR mai dùng đến 2 ký tự để đánh số đó thì bạn sẽ nghĩ việc yêu cầu rồi cấp phát theo từng mặt hàng nhiều như thế nào. Mai chỉ trích 1 phần rất nhỏ dữ liệu để hỏi bạn đó.
- Để Mai xem xét dữ liệu thế nào rồi có thể theo hướng bạn chỉ không? Chứ như vầy thì kg tổng hợp được trong 1 tháng, tất cả ctr yêu cầu từng mặt hàng là bao nhiêu và đã cung cấp được tổng số như thế nào,... Ý muốn tổng hợp tất cả các ctr đó bạn.
- Trao đổi với bạn chút vậy nghe. Có gì học hỏi tiếp ở bạn.
- Chào bạn và chúc bạn tuần mới làm việc tốt đẹp
 
PHẦN I
PHP:
' . . . . . Trích từ bài #17 . . . . '
1 Set Sh = Sheets("BCDonHang"):                      Sh.Columns(1).NumberFormat = DDg
' . . . . . . . . '        
2            .Offset(1, -3) = MaHg '*'
            
            Set Rng0 = Sheets("DMHang").[a1]
            Set Rng0 = Range(Rng0, Rng0.End(xlDown))
            
3            .Offset(1, -2).Value = Rng0.Find(MaHg, , xlFormulas, xlWhole).Offset(, 1).Value
4            .Offset(1, -1).Value = Rng0.Find(MaHg, , xlFormulas, xlWhole).Offset(, 2).Value
5            .Offset(1, -3).Resize(, 7).Font.Bold = True
            OneR = 2
        Else
            OneR = 1
        End If
6        .Offset(OneR) = Cells(BDau, "A")
7        .Offset(OneR, 1) = Cells(BDau, "E")
8        .Offset(OneR, 2) = Cells(BDau, "D")
9        .Offset(OneR, 3) = Application.WorksheetFunction. _
            Sum(Range(Cells(BDau, "K"), Cells(Cuoi, "K")))
10         .Offset(OneR, 4).FormulaR1C1 = "=RC[-2]-RC[-1]"      
 '. . . . . . . .' 
 Sh.Select:                                     Set Sh = Nothing
- Mai chưa biết bạn thễ hiện dòng lệnh để cho dữ liệu SL yêu cầu và phần chênh lệnh bạn ạ. Mong bạn chỉ cho.
- Với lại bạn thể hiện giúp lệnh sum theo mặt hàng (SL yêu cầu và SL cung cấp) đi bạn vì Mai đã nói chưa có làm theo kiểu dùng địa chỉ tham chiếu như bạn. Tiện làm ơn giúp mình luôn nhé.
(2) dòng lệnh dùng để gán mã hàng;
(3) Dòng này để gán tên của mã hàng;
(4)Dòng này gán đơn vị tính;
(5) Định dạng 7 ô đầu tiên trong dòng vừa ghi kiểu in đậm;
(6) Gán số hiệu của đơn hàng;
(7) Gán ngày iêu cầu ccầpp vô báo cáo;
(8) Ghi số lượng iêu câu vô báo cáo;
(9) Ghi tổng lượng đã cung cấp;
(10) Ghi số chênh lệch giữa iêu cầu & thực cấp;

PHẦN II
Tiếp theo, bạn thử chạy macro sau để có các tổng & cho biết ý kiến:
(*) Yêu cầu đã đáp ứng chưa?"
(*) Có cần phải chép sang BCTheoHang nữa không?
PHP:
Option Explicit
Sub BCHang()
 Dim BDau As Long, Cuoi As Long
 Dim sRng As Range
  
 BCDonHang
 Cuoi = 3
 Do
    BDau = Cuoi + 2
    Cuoi = Cells(BDau, "F").End(xlDown).Row
    If Cuoi > 65500 Then Exit Sub
    Set sRng = Range("F" & BDau & ":F" & Cuoi)
    With Cells(BDau - 1, "F")
        .Value = Application.WorksheetFunction.Sum(sRng)
        .Offset(, 1) = Application.WorksheetFunction.Sum(sRng.Offset(, 1))
    End With
 Loop
End Sub
Chú ý: Như bạn đã biết, vào đầu tiên, nó sẽ gọi thực thi tạo báo cáo theo đơn hàng; sau đó mới tính các tổng & ghi lên bên trên;
 
Web KT

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

Back
Top Bottom