Tổng hợp dữ liệu

Liên hệ QC

biboylenka1

Thành viên hay hỏi
Tham gia
13/5/21
Bài viết
109
Được thích
97
Giới tính
Nam
Em xin chào anh chị diễn đàn. Em xin nhờ anh chị viết giúp em đoạn code tổng hợp dữ liệu từ sheet "NhapKho" và sheet "XuatKho" sang sheet "SoKho" sau đó lọc lại với thứ tự ngày tháng tăng dần với ạ. Em có mày mò tự record marco để làm nhưng khi chạy thì đơ máy luôn. Em xin cảm ơn!
 

File đính kèm

  • Test.xlsb
    1.3 MB · Đọc: 17
Dựa theo ý tưởng của ban, mình làm code cùi bắp bạn thử xem sao. code cũng là học mót trên diễn đàn thôi.
 

File đính kèm

  • Copy of Test.xlsm
    4.6 MB · Đọc: 25
Upvote 0
Dựa theo ý tưởng của ban, mình làm code cùi bắp bạn thử xem sao. code cũng là học mót trên diễn đàn thôi.
Cảm ơn bạn đã quan tâm. Thực sự thì mình chưa hiểu code của bạn,mình sẽ mày mò tiếp xem có hiểu được không. Mình chỉ biết record macro rồi sửa lại thôi. Công việc của mình cứ lặp đi lặp lại nên mình đang tìm cách làm đỡ mất thời gian hơn.
 
Upvote 0
Sau vài lần xem file của chủ bài đăng, mình xin có vài ý kiến sau, ngõ hầu tác giả tham khảo:

(1) Theo mình hình như lần nào chạy macro (để đưa DL (dữ liệu) từ 2 trang nhập & xuất sang 'SoKho' đều xóa cũ & chạy mới ngay từ đầu kỳ thì phải;
Chi bằng macro chỉ nên chạy từ đầu tháng hiện hành thôi, được không?
Lúc đó vô đầu chương trình macro chỉ xóa đi những DL đã nhập trước đó từ đầu tháng.
& nếu tháng DL sau 1 tháng là quá nhiều thì lại chia nhỏ chu kỳ tích lũy DL thêm nữa tùy thuộc vô tình hình thực tế sở tại.

(2) Các trang danh mục ít thay đổi; Nếu là mình mình sẽ nhốt chung vô 1 trang; Mà hình như bạn còn trang danh mục nữa; Trang này có nhốt chung thêm nữa hay không là tùy bạn!

(3) Các tiêu đề trường bạn làm đẹp thật; nhưng mình cho là không cần thiết & chỉ tổ làm nặng gánh cho chương trình mà thôi
Các trang dữ liệu này ta càng tránh tiếp xúc càng tốt, mọi cái để các macro làm việc & như vậy chuyện hoa hòe hoa sói kia của bạn trỡ nên thừa
Đó là chưa kể có cột bạn đã tương hẵn hàng vạn công thức thì hỏi chi không lếch bánh khi chạy macro.
Nếu là mình thì mình chọn ưu tiên là tốc độ xử lý DL, nếu còn thừa thì mới tiến hành diêm dúa trong 1 chừng mực nào đó.

Vài lời có thể làm bạn zận, mình xin lỗi trước vì điều đó!
 
Upvote 0
Cảm ơn bạn đã quan tâm. Thực sự thì mình chưa hiểu code của bạn,mình sẽ mày mò tiếp xem có hiểu được không. Mình chỉ biết record macro rồi sửa lại thôi. Công việc của mình cứ lặp đi lặp lại nên mình đang tìm cách làm đỡ mất thời gian hơn.
code sử dụng mảng để tổng hợp. mảng arrN là vùng dữ liệu cần tổng hợp của sh nhập kho, arrX ...., KQ là mảng kết quả trả về. vòng lặp for i= 1 to ubound(arrN) là quét từng dòng của mảng để láy kết quả đưa vào mảng KQ, Qúét hết sh Nhập rồi quét sh X, gán mảng KQ lên sh SOKHO, sau đo sort như bạn đã làm.
nếu thêm ĐK thời gian cần tổng hợp (từ... đến..) thì phải thêm dòng lệnhví dụ : if arrN(i, 3) >= TỪ and arrN(i,3)<=ĐẾN then
bên cạnh đó không nên đặt quá nhiều define name, quá nhiều công thức ở các ô sẽ ảnh hưởng đến tốc độ load file, tốc độ chạy code và làm tăng dung lương file.
 
Upvote 0
Sau vài lần xem file của chủ bài đăng, mình xin có vài ý kiến sau, ngõ hầu tác giả tham khảo:

(1)
Theo mình hình như lần nào chạy macro (để đưa DL (dữ liệu) từ 2 trang nhập & xuất sang 'SoKho' đều xóa cũ & chạy mới ngay từ đầu kỳ thì phải;

Chi bằng macro chỉ nên chạy từ đầu tháng hiện hành thôi, được không?

Lúc đó vô đầu chương trình macro chỉ xóa đi những DL đã nhập trước đó từ đầu tháng.

& nếu tháng DL sau 1 tháng là quá nhiều thì lại chia nhỏ chu kỳ tích lũy DL thêm nữa tùy thuộc vô tình hình thực tế sở tại.

(2) Các trang danh mục ít thay đổi; Nếu là mình mình sẽ nhốt chung vô 1 trang; Mà hình như bạn còn trang danh mục nữa; Trang này có nhốt chung thêm nữa hay không là tùy bạn!

(3) Các tiêu đề trường bạn làm đẹp thật; nhưng mình cho là không cần thiết & chỉ tổ làm nặng gánh cho chương trình mà thôi
Các trang dữ liệu này ta càng tránh tiếp xúc càng tốt, mọi cái để các macro làm việc & như vậy chuyện hoa hòe hoa sói kia của bạn trỡ nên thừa
Đó là chưa kể có cột bạn đã tương hẵn hàng vạn công thức thì hỏi chi không lếch bánh khi chạy macro.
Nếu là mình thì mình chọn ưu tiên là tốc độ xử lý DL, nếu còn thừa thì mới tiến hành diêm dúa trong 1 chừng mực nào đó.

Vài lời có thể làm bạn zận, mình xin lỗi trước vì điều đó!
Em cảm ơn anh đã quan tâm!
(1) Đúng rồi anh ạ, em cũng muốn làm như anh bảo chỉ đưa dữ liệu vào khi mới nhập không can thiệp đến dữ liệu cũ nhưng em mới tìm hiểu về VBA nên không biết cách làm. Trước giờ em đang làm việc thủ công và chỉ biết sử dụng công thức. Các công thức em cũng học mót từ diễn đàn sau đó về ngồi xem nó chạy thế nào rồi làm nháp đi nháp lại nhiều lần sau đó sử dụng.
(2) - Vì em toàn làm thủ công nên em chia ra 2 trang, ý tưởng của em là em sẽ làm cái "data validation" mã hàng và số lo/lot đang còn tồn >0 bên trang "XuatKho". Em cũng muốn thực hiện việc này bằng VBA nhưng trình độ hiện tại của em không làm được. :wallbash:
- Các trang danh mục em đang làm thử nên em vẫn đang để từng trang một cho đỡ rối. Khi chạy thử thấy được rồi em sẽ gom nó về một trang.
(3) - Vấn đề diêm dúa thì không phải mỗi anh mà cũng có một em nhân sự bên công ty em nhận xét rồi. "Cái file excel của anh gì mà lòe loẹt thấy gớm." ^^^^^^^^
- Còn tương hàng vạn công thức trước em làm thế để lúc nhập em chọn cho nhanh. :pinch::pinch:
Em cảm ơn anh đã góp ý! Nếu anh có thời gian rảnh anh có thể góp ý thêm cho em hoặc làm giúp em theo cách mà anh thấy hợp lý để em tham khảo được không ạ.
Bài đã được tự động gộp:

code sử dụng mảng để tổng hợp. mảng arrN là vùng dữ liệu cần tổng hợp của sh nhập kho, arrX ...., KQ là mảng kết quả trả về. vòng lặp for i= 1 to ubound(arrN) là quét từng dòng của mảng để láy kết quả đưa vào mảng KQ, Qúét hết sh Nhập rồi quét sh X, gán mảng KQ lên sh SOKHO, sau đo sort như bạn đã làm.
nếu thêm ĐK thời gian cần tổng hợp (từ... đến..) thì phải thêm dòng lệnhví dụ : if arrN(i, 3) >= TỪ and arrN(i,3)<=ĐẾN then
bên cạnh đó không nên đặt quá nhiều define name, quá nhiều công thức ở các ô sẽ ảnh hưởng đến tốc độ load file, tốc độ chạy code và làm tăng dung lương file.
Cháu cảm ơn chú! Hôm qua cháu lên diễn đàn bằng điện thoại lại không thấy tuổi của chú. cái đoạn này: "if arrN(i, 3) >= TỪ and arrN(i,3)<=ĐẾN then" cháu sẽ thử tự làm thêm. Có gì không hiểu cháu lại hỏi chú tiếp,mong chú giúp đỡ! }}}}}
 
Lần chỉnh sửa cuối:
Upvote 0
Em cảm ơn anh đã quan tâm!
(2) Đúng rồi anh ạ, em cũng muốn làm như anh bảo chỉ đưa dữ liệu vào khi mới nhập không can thiệp đến dữ liệu cũ nhưng em mới tìm hiểu về VBA nên không biết cách làm. Trước giờ em đang làm việc thủ công và chỉ biết sử dụng công thức. Các công thức em cũng học mót từ diễn đàn sau đó về ngồi xem nó chạy thế nào rồi làm nháp đi nháp lại nhiều lần sau đó sử dụng.
. . . . . .
(1) - Các trang danh mục em đang làm thử nên em vẫn đang để từng trang một cho đỡ rối. Khi chạy thử thấy được rồi em sẽ gom nó về một trang.
(4) Cháu cảm ơn chú! . . . .
(1) Các trang danh mục ta nên gộp ngay bay giờ; Nếu để sau này gộp sẽ vướng đâu đó trong chương trình
Ví dụ:
STTMã lý doLý doGhi chúMã khoKhoGhi chú
1XKBHXuất bán hàngXuất kho bán hàngKNLKho nguyên liệu
2XKSXXuất cho sản xuấtXuất kho phục vụ mục đích sản xuấtKHCKho hóa chất
3XKTHXuất Trả hàng lạiXuất kho trả hàng cho nhà cung cấpKBBKho bao bì
4XKHUXuất hủy hàng hóaXuất kho hủy hàng hóa không phù hợpKCTKho carton
5XKKKXuất khácCác loại hình xuất kho khácKTPKho thành phẩm
6NKDKNhập tồn đầu kìNhập kho tồn đầu kỳ trước khi sử dụng file
7NKMHNhập mua hàngNhập kho mua hàng
8NKSXNhập từ sản xuấtNhập thành phẩm từ sản xuất
9NKHKNhập hoàn khoNhập kho lại những hàng đã xuất kho nhưng các bộ phận sử dụng không hết yêu cầu hoàn kho
10NKKKNhập khácCác loại hình nhập kho khác

(Cột đầu của mỗi bảng nên cách nhau 26 cột)

(2) Mình sẽ giúp bạn nhập theo chu ký tháng;
Ví dụ bất cứ ngày nào trong tháng 5 mà cho chạy macro thì những dòng nhập hay xuất phát sinh trong tháng nó sẽ xử lý.
Muốn vậy bạn cần nhập thêm cỡ chục dòng gồm nhập & xuất tháng 4 & bằng í dòng tháng 5 & đưa lên lại (Mình nhập cũng được nhưng giả lập của mình sẽ xa thực tế hơn của bạn)

(3) Mình sẽ giúp bạn sau khi có file giả lập mới của bạn

(4) Mình già lắm rồi, nếu chưa muốn nói là nhớn tuổi nhất DĐ, :D
 
Upvote 0
(4) Mình già lắm rồi, nếu chưa muốn nói là nhớn tuổi nhất DĐ, :D
Vì chưa biết tuổi nên xin gọi bằng chú vậy. Cháu khi xưng hô trên mạng khi không biết rõ thường cứ gọi anh xưng em.
Cháu gửi file giả lập theo như chú gợi ý.
Cháu cảm ơn chú đã quan tâm và giúp đỡ nhiệt tình!
 

File đính kèm

  • Test.xlsb
    1.3 MB · Đọc: 10
Upvote 0
Bước đầu tiên là xóa dữ liệu tháng cần cập nhật ở trang 'SoKho'
Bạn thử chạy macro này vớ 1 trong 3 tháng có trong trang tính đó
PHP:
Sub XoaDuLieuThang()
 Dim dRng As Range, Arr()
 Dim Thang As Integer, Rws As Long, Col As Integer, J As Long
 
 Thang = InputBox(Month(Date), "Ban Cân Xoa Du Lieu Tháng:")
 Sheets("SoKho").Select
 Rws = [B9].CurrentRegion.Rows.Count
 Col = [B9].CurrentRegion.Columns.Count
 Application.ScreenUpdating = False
 For J = 10 To Rws + 10
    If Month(Cells(J, "B").Value) = Thang Then
        If dRng Is Nothing Then
            Set dRng = Rows(J & ":" & J)
        Else
            Set dRng = Union(dRng, Rows(J & ":" & J))
        End If
    End If
 Next J
 MsgBox dRng.Address
 Application.ScreenUpdating = True
End Sub
 
Upvote 0
Sau đó ta tiến thêm 1 bước nữa, như sau:
PHP:
Sub TongHopKhoTheoThang()
 Dim Thang As Integer
 
 Thang = InputBox(Month(Date), "Ban Cân Xoa Du Lieu Tháng:")
 XoaDuLieuThang Thang

End Sub
Mã:
Sub XoaDuLieuThang(Thang As Integer)
 Dim dRng As Range, Arr()
 Dim Rws As Long, Col As Integer, J As Long
 
 Sheets("SoKho").Select
 Rws = [B9].CurrentRegion.Rows.Count
 Col = [B9].CurrentRegion.Columns.Count
 Application.ScreenUpdating = False
 For J = 10 To Rws + 10
    If Month(Cells(J, "B").Value) = Thang Then
        If dRng Is Nothing Then
            Set dRng = Rows(J & ":" & J)
        Else
            Set dRng = Union(dRng, Rows(J & ":" & J))
        End If
    End If
 Next J
 dRng.Delete
 Application.ScreenUpdating = True
End Sub
 
Upvote 0
Sau đó ta tiến thêm 1 bước nữa, như sau:
PHP:
[/QUOTE]
Chú ơi cháu chạy code này thì thấy code chỉ xóa dữ liệu tháng mà cháu nhập vào inputbox không thấy cập nhật lại ạ. Và code chạy lại đơ máy cháu tiếp.
 

File đính kèm

  • Untitled.png
    Untitled.png
    189.3 KB · Đọc: 8
Upvote 0
Từ từ rồi cháo sẽ nhừ!
Tiếp theo là những thứ này:

PHP:
Sub TongHopKhoTheoThang()
 Dim Thang As Integer
 
 Thang = InputBox(Month(Date), "Ban Cân Xoa Du Lieu Tháng:")
 XoaDuLieuThang Thang
 SoLieuNhapTrongThang Thang   'Dòng Lênh Mói

End Sub
Mã:
Sub SoLieuNhapTrongThang(Thg As Integer)   'Maxcro Mói   '
 Dim Rws As Long, W As Integer, J As Long, Col As Integer
 Dim Arr()
 
 With Sheets("NhapKho")
    Rws = .[b2].CurrentRegion.Rows.Count
    Arr() = .[A3].Resize(Rws, 20).Value
    ReDim ArrN(1 To UBound(Arr()), 1 To 20)
    For J = 1 To UBound(Arr())
        If Month(Arr(J, 1)) = Thg Then
            W = W + 1
            For Col = 1 To 20
                ArrN(W, Col) = Arr(J, Col)
            Next Col
        End If
    Next J
 End With
 MsgBox W     'Ban Kiêm Xem Sô Dòng Du Liêu Tháng Da Dúng Chua? Nêu Dúng Sẽ Tiêp   '
End Sub
 
Upvote 0
Chụp cái hình như vậy thì mình chịu, chả thấy mô tê mần răng!
Chí ít phải lôi cái hộp thoại thông báo lỗi qua 1 bên.
 
Upvote 0
Chuyện còn lại của macro đó là:
(*) Tìm dòng cuối của cột 'B (trang 'SoKho')'; Cộng thêm 1
(*) Chép dữ liệu trong mảng vừa tìm ra lên trang đó

Hai dòng lệnh này nhường cho bạn thử sức trong 6 tiếng!
& chúc bạn sớm thành công!
 
Upvote 0
Chuyện còn lại của macro đó là:
(*) Tìm dòng cuối của cột 'B (trang 'SoKho')'; Cộng thêm 1
(*) Chép dữ liệu trong mảng vừa tìm ra lên trang đó

Hai dòng lệnh này nhường cho bạn thử sức trong 6 tiếng!
& chúc bạn sớm thành công!
Cháu thử làm nhưng không thấy phần ghi chú được chép sang, chú sửa cho cháu với.
 

File đính kèm

  • Test.xlsb
    1.3 MB · Đọc: 16
Upvote 0
(1) Câu lệnh của bạn:
Mã:
wssokho.Range("B" & LrS).Resize(W, 18).Value = ArrN
có nghĩa là bạn chép dữ liệu vô các cột 'B' (2) mở rọng đến 18 cột (có nghĩa là cột 19 thôi mà)
Bạn thử tăng lên 19 hay 20 xem sao!
(2) Chúc mừng bạn
& mình nghĩ thời gian còn lại trong ngày hôm nay bạn sẽ viết được macro để lấy dữ liệu từ trang 'XuatKho' sang nữa.
& Xin chúc mừng trước.

(3) Còn sáng mai thử tìm cách gộp 2 macro lấy dữ liệu tháng này làm 1 xem sao;
Ví dụ
PHP:
Sub SoLieuNXTrongThang(Thg As Integer, Optional TenKho As SDtring = "N")
  Dim Sh As Worksheet
 If TenKho ="N" Then
    Set Sh = Sheets("NhapKho")
 ElseIf TenKho ="X" Then  'Mói Thêm  '
        Set Sh = Sheets("Xuat-Kho")
 Else
     MsgBox "Xéo Ngay!", ,"GPE.COM"
End if
'. . . . .     '
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
(1) Câu lệnh của bạn:
Mã:
wssokho.Range("B" & LrS).Resize(W, 18).Value = ArrN
có nghĩa là bạn chép dữ liệu vô các cột 'B' (2) mở rọng đến 18 cột (có nghĩa là cột 19 thôi mà)
Bạn thử tăng lên 19 hay 20 xem sao!
Cháu thử rồi nhưng sau khi chạy macro thì nó lại điền trường quy cách ở nhập kho sang ghi chú ở sổ kho.
(2) (3) Cháu sẽ thử sức.
 
Upvote 0
Web KT

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

Back
Top Bottom