Tổng hợp dữ liệu từ các sheet để quản lý số lượng vật tư (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

duongtrieu44

Thành viên mới
Tham gia
22/7/08
Bài viết
3
Được thích
1
Chào mọi người.
Hiện tại, mình đang làm quản lý vật tư cho dự án bằng excell.
Ví dụ, mình có 3 sheet để lên list thiết bị cho 3 mục dự án nhỏ.
Nay mình muốn tổng hợp các thiết bị có trong 3 sheet đó trong sheet tổng hợp.
Mình không phải dân chuyên nên không biết làm thế nào.
Mong mọi người giúp đỡ mình, mình cảm ơn rất nhiều.
Mình có gởi kèm file excell để mọi người dễ dàng giúp đỡ.
 

File đính kèm

Có anh chị nào giúp em được không? Em đang rất cần.
 
Bạn xem File
Bấm Ctrl + q để thấy kết quả

Góp ý: Bạn không nên hối thúc các thành viên như bài #2 vì mọi người còn công việc của mình.

Chúc bạn thành công
 

File đính kèm

Cảm ơn các bạn đã giúp mình.
Mình sẽ rút kinh nghiệm lần sau.
 
Hỏi dhn46:
Tên sheet của bạn là số, tôi thay bằng chữ thì được, nhưng nếu chứa dấu cách thì không được.

Đã dùng dáu nháy đơn để bao nhưng không được.

Xin hỏi cách khắc phục
 
Hỏi dhn46:
Tên sheet của bạn là số, tôi thay bằng chữ thì được, nhưng nếu chứa dấu cách thì không được.

Đã dùng dáu nháy đơn để bao nhưng không được.

Xin hỏi cách khắc phục
Chào bạn

Không biết bạn sửa như thế nào? Bạn có thể up file lên không? Tôi kiểm tra trên file bài #3 thì không thấy vấn đề gì.
 
Chào bạn

Không biết bạn sửa như thế nào? Bạn có thể up file lên không? Tôi kiểm tra trên file bài #3 thì không thấy vấn đề gì.

File trên bài #3 là không sai gì. Vấn đề là dùng với tên sheet có dấu cách thì sao.

Tôi có thử một số trường hợp:

Mã của câu lệnh

lsSQL = "Select f1,f2,f3,f4,Sum(f5) as C5,Sum(f6) as C6,Sum(f7) as C7 From " _
& "(Select f1,f2,f3,f4,f5,f6,f7 From [1$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From [2$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From [3$A14:G65536]) a" _
& " Group by a.f1,a.f2,a.f3,a.f4"


Tôi đổi tên sheet có tên là "3" thành "a b" và sửa mã câu lệnh trên thành

lsSQL = "Select f1,f2,f3,f4,Sum(f5) as C5,Sum(f6) as C6,Sum(f7) as C7 From " _
& "(Select f1,f2,f3,f4,f5,f6,f7 From [1$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From [2$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From 'a b'&[$A14:G65536]) a" _
& " Group by a.f1,a.f2,a.f3,a.f4"

hoặc sửa thành

lsSQL = "Select f1,f2,f3,f4,Sum(f5) as C5,Sum(f6) as C6,Sum(f7) as C7 From " _
& "(Select f1,f2,f3,f4,f5,f6,f7 From [1$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From [2$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From ['a b'$A14:G65536]) a" _
& " Group by a.f1,a.f2,a.f3,a.f4"

đều không được (và đại khái là tôi thử với nhiều dạng khác)

Vấn đề là bạn chỉ ra cách viết tên Sheet có dấu cách trong IsSQL.

Xin cảm ơn
 
Lần chỉnh sửa cuối:
File trên bài #3 là không sai gì. Vấn đề là dùng với tên sheet có dấu cách thì sao.

Tôi có thử một số trường hợp:

Mã của câu lệnh

lsSQL = "Select f1,f2,f3,f4,Sum(f5) as C5,Sum(f6) as C6,Sum(f7) as C7 From " _
& "(Select f1,f2,f3,f4,f5,f6,f7 From [1$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From [2$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From [3$A14:G65536]) a" _
& " Group by a.f1,a.f2,a.f3,a.f4"


Tôi đổi tên sheet có tên là "3" thành "a b" và sửa mã câu lệnh trên thành

lsSQL = "Select f1,f2,f3,f4,Sum(f5) as C5,Sum(f6) as C6,Sum(f7) as C7 From " _
& "(Select f1,f2,f3,f4,f5,f6,f7 From [1$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From [2$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From 'a b'&[$A14:G65536]) a" _
& " Group by a.f1,a.f2,a.f3,a.f4"

hoặc sửa thành

lsSQL = "Select f1,f2,f3,f4,Sum(f5) as C5,Sum(f6) as C6,Sum(f7) as C7 From " _
& "(Select f1,f2,f3,f4,f5,f6,f7 From [1$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From [2$A14:G65536] " _
& "Union all Select f1,f2,f3,f4,f5,f6,f7 From ['a b'$A14:G65536]) a" _
& " Group by a.f1,a.f2,a.f3,a.f4"

đều không được (và đại khái là tôi thử với nhiều dạng khác)

Vấn đề là bạn chỉ ra cách viết tên Sheet có dấu cách trong IsSQL.

Xin cảm ơn

Bạn chú ý: vùng dữ liệu luôn là
Mã:
[[COLOR=#ff0000][SIZE=4]3[/SIZE][/COLOR]$A14:G65536]
thì bạn chuyển tên Sheet thì cũng chỉ cần thay cái màu đỏ thôi (không cần nháy đơn)
Mã:
 [[SIZE=4][COLOR=#FF0000]a b[/COLOR][/SIZE]$A14:G65536]
 
Bạn thên mến, bạn có thể giúp mình cách để hiểu được cách làm này không bạn, cảm ơn bạn thật nhiều
 
Bạn xem File
Bấm Ctrl + q để thấy kết quả

Góp ý: Bạn không nên hối thúc các thành viên như bài #2 vì mọi người còn công việc của mình.

Chúc bạn thành công

Thường thì nếu thứ tự cột giống nhau, lấy hết các cột trong bảng dữ lệu thì nên dùng dấu * thay vì liệt kê hết cho nó gọn. Phần đặt lại tên cột trong trường hợp này là chưa cần thiết.

lsSQL = "Select f1,f2,f3,f4,Sum(f5),Sum(f6),Sum(f7) From " _
& "(Select * From [1$A14:G65536] " _
& "Union all Select * From [2$A14:G65536] " _
& "Union all Select * From [3$A14:G65536]) " _
& "Group by f1,f2,f3,f4"
 
Tạo sheet tổng hợp để quản lý vật tư

Chào các bạn cuối cùng mình cúng đã đính kèm được tập tin của mình lên, mình muốn tạo một sheet tổng hợp để khi nhập vào các sheet khác thì trong sheet tổng hợp tự cập nhật số liệu,mong các bạn giúp đỡ.
 

File đính kèm

Chào các bạn cuối cùng mình cúng đã đính kèm được tập tin của mình lên, mình muốn tạo một sheet tổng hợp để khi nhập vào các sheet khác thì trong sheet tổng hợp tự cập nhật số liệu,mong các bạn giúp đỡ.
Thì cũng như code bài 3 thôi bạn.

[GPECODE=sql]Sub Gop_HLMT()
Dim cnn As Object, lsSQL As String, lrs As Object, FileFullName As String
Set cnn = CreateObject("ADODB.Connection")
Set lrs = CreateObject("ADODB.Recordset")
FileFullName = Application.ThisWorkbook.FullName
With cnn
If Val(Application.Version) < 12 Then
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileFullName & ";Extended Properties=""Excel 8.0;HDR=No"";"
Else
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileFullName & ";Extended Properties=""Excel 12.0;HDR=No"";"
End If
.Open
End With
lsSQL = "Select F1,F2,Sum(F3),Sum(F4),Sum(F5) From " _
& "(Select * From [THEU KET$B7:F1000] " _
& "Union all Select * From [LUYEN THEP$B7:F1000] " _
& "Union all Select * From [CO DIEN$B7:F1000] " _
& "Union all Select * From [nang luong$B7:F1000] " _
& "Union all Select * From [LUYEN GANG$B7:F1000]) a " _
& "Group by a.F1,a.F2 " _
& "HAVING a.F1 IS NOT NULL"
lrs.Open lsSQL, cnn
Sheet1.[B7:F6000].ClearContents
Sheet1.[B7].CopyFromRecordset lrs
lrs.Close: Set lrs = Nothing
cnn.Close: Set cnn = Nothing

End Sub

[/GPECODE]
 

File đính kèm

Cảm ơn bạn vì đã trả lời mình, thực ra là mình thấy bài của mình giống bài 3 mà không biết các bạn đã làm thế nào cả, ấn ctrl+q không thấy gì,( hì tại mình cúng chưa có biết nhiều về excel bạn ạ). Mong bạn chỉ dẫn, mình mở GOP của bạn nhưng không mở được là sao vậy,
 
Cảm ơn bạn vì đã trả lời mình, thực ra là mình thấy bài của mình giống bài 3 mà không biết các bạn đã làm thế nào cả, ấn ctrl+q không thấy gì,( hì tại mình cúng chưa có biết nhiều về excel bạn ạ). Mong bạn chỉ dẫn, mình mở GOP của bạn nhưng không mở được là sao vậy,
Bài anh HLMT đã làm cho bạn ở trên, bạn để ý có nút "Tổng hợp" tại sheet TONG HOP. Bạn bấm vào đó để có kết quả. Bạn nhớ Enable Macro, cách Enable Macro bạn tìm hiểu thêm trên diễn đàn nhé
 
Em cảm ơn các bác nhiều lắm ạ, đúng là đi một ngày đàng học một sàng khôn.
 
Bạn à cho mình hỏi thêm bạn một chút với nhé. Mình đang quản lý tình hình nhập quặng về nhà máy. Vì mỗi ngày có nhiều chuyến, nhiều loại quặng khác nhau nên mình để mỗi ngày nhập vào là một sheet và cuối ngày có tổng hợp lại tổng số lượng của các loại quặng và mỗi tháng là có 30-31 sheet như vậy. Mình có tạo 1 sheet tổng hợp để theo dõi lũy kế qua từng ngày tuy nhiên mình vẫn làm thủ công bằng cách nhập số liệu vào, các bạn giúp mình cách đặt công thức trong sheet tổng hợp để khi mình ra được tổng khối lượng các loại quặng của từng ngày thì số liệu tổng đó tự cập nhật vào đúng ngày đó bên sheet tổng hợp của mình được không ạ?
 
Chào mọi người,
Ai có cao kiến xem mình cái code này với ạ, Em chạy SQL, Giờ em muốn lọc Nhập xuất tồn theo Thời gian, với theo Mã kho
Em đã lên nghiên cứu (lên google, youtube...) quá trời nhưng không có cách nào xử lý được ạ, hix hix...!$@!!
Em có đính kèm file ạ
Trân trọng cám ơn! :heart:
1621829783871.png
 

File đính kèm

Chào mọi người,
Ai có cao kiến xem mình cái code này với ạ, Em chạy SQL, Giờ em muốn lọc Nhập xuất tồn theo Thời gian, với theo Mã kho
Em đã lên nghiên cứu (lên google, youtube...) quá trời nhưng không có cách nào xử lý được ạ, hix hix...!$@!!
Em có đính kèm file ạ
Trân trọng cám ơn! :heart:
View attachment 259293
Tôi dở về môn này nên chia thành 3 việc khác nhau:
1/ Tính tổng nhập, xuất từ UNION 2 bảng Nhap va Xuat chép vào NXT
2/ Lấy số lượng tồn kho từ DM chép nối vào NXT
3/ Lấy hết bảng NXT vào recordset để sắp xếp, nhóm lại rồi chép lại ra NXT

Tôi chưa lấy theo điều kiện mà lấy toàn bộ dữ liệu, bạn xem file
 

File đính kèm

Chừ tiến bộ hơn 1 chút làm lại chỉ còn 2 việc thôi:
1/ Tính tổng nhập, xuất từ UNION 2 bảng Nhap va Xuat chép vào NXT
2/ Lấy số lượng tồn kho từ DM ghép với dữ liệu vừa chép ra NXT ở bước 1

Rich (BB code):
Sub NXT2()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("G3:K5000").ClearContents
    
    Ngay1 = "#" & Sheet4.Range("I1") & "#"
    Ngay2 = "#" & Sheet4.Range("I2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Group By F6"), cnn
        Sheet4.Range("G3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("G65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$G3:J" & dong & "] as T2 ON T1.F1 = T2.F1 "), cnn
        Sheet4.Range("G3:K5000").ClearContents
        Sheet4.Range("G3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 
Chừ tiến bộ hơn 1 chút làm lại chỉ còn 2 việc thôi:
1/ Tính tổng nhập, xuất từ UNION 2 bảng Nhap va Xuat chép vào NXT
2/ Lấy số lượng tồn kho từ DM ghép với dữ liệu vừa chép ra NXT ở bước 1

Rich (BB code):
Sub NXT2()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
   
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("G3:K5000").ClearContents
   
    Ngay1 = "#" & Sheet4.Range("I1") & "#"
    Ngay2 = "#" & Sheet4.Range("I2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Group By F6"), cnn
        Sheet4.Range("G3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("G65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$G3:J" & dong & "] as T2 ON T1.F1 = T2.F1 "), cnn
        Sheet4.Range("G3:K5000").ClearContents
        Sheet4.Range("G3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Bạn Maika ơi, có cách nào tính NXT theo điều kiện khoảng thời gian, với kho ko ạ
Vd: em lọc từ ngày 01/01/2019->01/01/2019, với kho A, thì báo cáo tự động cập nhật ạ,
1621838386790.png
Cám ơn bạn :heart:
 
Bạn Maika ơi, có cách nào tính NXT theo điều kiện khoảng thời gian, với kho ko ạ
Vd: em lọc từ ngày 01/01/2019->01/01/2019, với kho A, thì báo cáo tự động cập nhật ạ,
View attachment 259300
Cám ơn bạn :heart:
Tôi đã làm hết chuyện khó rồi còn gì, chừ vụ đó bạn làm thử xem, chỉ cần Where nữa thôi mà. Biến Ngay1, Ngay2 và Kho tôi đã lấy sẵn rồi đó.
 
!$@!! có ai giúp mình với. hic...
Code lấy theo điều kiện:
Rich (BB code):
Sub NXT3()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
    
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$A3:E" & dong & "] as T2 ON T1.F1 = T2.F1 "), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 
Code lấy theo điều kiện:
Rich (BB code):
Sub NXT3()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
  
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
  
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$A3:E" & dong & "] as T2 ON T1.F1 = T2.F1 "), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Cám ơn anh ạ
 
Còn 1 chuyện nữa. Mới lấy tồn kho đầu 2019 và phát sinh 15/2 - 16/2/2019. Còn phải lấy tồn kho đầu 2019 trừ cho PS thời kỳ trước 15/2 mới ra kết quả tồn kho ở cột B được.
Dạ đúng rồi ạ, Có cách nào ko anh?
Khi chọn kho B báo cáo NXT thì nó chạy không đúng kho anh ạ, vd: em chọn kho B có thì có SL 2, nhưng kết quả Tồn đâu code lấy hết là 847, y chang số ban đầu,
Nó ko tách kho ra anh nè.
 
Dạ đúng rồi ạ, Có cách nào ko anh?
Khi chọn kho B báo cáo NXT thì nó chạy không đúng kho anh ạ, vd: em chọn kho B có thì có SL 2, nhưng kết quả Tồn đâu code lấy hết là 847, y chang số ban đầu,
Nó ko tách kho ra anh nè.
Bạn kiểm tra cẩn thận kết quả của code này nhé:
Rich (BB code):
Sub NXT3()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
    
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$A3:E" & dong & "] as T2 ON T1.F1 = T2.F1 Where T1.F7 = " & KHO), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 
Bạn kiểm tra cẩn thận kết quả của code này nhé:
Rich (BB code):
Sub NXT3()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
   
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
   
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$A3:E" & dong & "] as T2 ON T1.F1 = T2.F1 Where T1.F7 = " & KHO), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Em kiểm tra lại thì kết quả vẫn bị lệch anh nè.
vd: Em test mã hàng UL11708RAVSAF37W (Số ngày 1/1: 1, nhập ngày 14/02 là: 6, xuất ngày 14/02 là: 1--> như vậy tồn đầu ngày 15/02 số đúng là: 6, nhưng
Khi em chạy code thì ra số thì tồn đầu là 1 ạ.
(có kèm file test)
Cám ơn anh giúp ạ

1621848365363.png
 

File đính kèm

Em kiểm tra lại thì kết quả vẫn bị lệch anh nè.
vd: Em test mã hàng UL11708RAVSAF37W (Số ngày 1/1: 1, nhập ngày 14/02 là: 6, xuất ngày 14/02 là: 1--> như vậy tồn đầu ngày 15/02 số đúng là: 6, nhưng
Khi em chạy code thì ra số thì tồn đầu là 1 ạ.
(có kèm file test)
Cám ơn anh giúp ạ

View attachment 259325
Tôi đâu đã làm chuyện tính tồn đầu kỳ. Bạn chỉ cần kiểm tra lấy kho có đúng hay chưa thôi.
 
Tôi đâu đã làm chuyện tính tồn đầu kỳ. Bạn chỉ cần kiểm tra lấy kho có đúng hay chưa thôi.
:wacko:dạ, cámơn anhạ, Có ai giúp mình cái này ko? huhu....
Thử kỹ lần cuối nhé!
Rich (BB code):
Sub NXT4()
Dim Ngay01 As String, Ngay02 As String, Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
    
    Ngay01 = "#" & "01/01/" & Year(Sheet4.Range("J1")) & "#"
    Ngay02 = "#" & Sheet4.Range("J1") - 1 & "#"
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,Sum(IIF(F1 LIKE 'PN%', F10,0))-Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay01 & " And " & Ngay02 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A" & dong + 1).CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F1,sum(F4) FROM [DM$A4:G849] Group By F1"), cnn
        Sheet4.Range("A" & dong + 1).CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F1,sum(F2),sum(F3),sum(F4) From [NXT$A3:E" & dong & "] Group By F1"), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 
Thử kỹ lần cuối nhé!
Rich (BB code):
Sub NXT4()
Dim Ngay01 As String, Ngay02 As String, Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
   
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
   
    Ngay01 = "#" & "01/01/" & Year(Sheet4.Range("J1")) & "#"
    Ngay02 = "#" & Sheet4.Range("J1") - 1 & "#"
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,Sum(IIF(F1 LIKE 'PN%', F10,0))-Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay01 & " And " & Ngay02 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A" & dong + 1).CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F1,sum(F4) FROM [DM$A4:G849] Group By F1"), cnn
        Sheet4.Range("A" & dong + 1).CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F1,sum(F2),sum(F3),sum(F4) From [NXT$A3:E" & dong & "] Group By F1"), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Chân thành cám ơn ạ
 

Chào mọi người,
Ai có cao kiến xem mình cái code này với ạ, Em chạy SQL, Giờ em muốn lọc Nhập xuất tồn theo Thời gian, với theo Mã kho
Em đã lên nghiên cứu (lên google, youtube...) quá trời nhưng không có cách nào xử lý được ạ, hix hix...!$@!!
Em có đính kèm file ạ
Trân trọng cám ơn! :heart:
View attachment 259293
Bạn tham khảo đoạn code đảm bảo xử lý theo ngày, kho
Bạn nên phát triển thêm cột giá trị, chắc chắn bạn sẽ yêu cầu thêm cột giá trị về sau.
Bạn ko hiểu code cứ IB tôi nhé.
Chúc may mắn

"select c2,c3,c4,sum(c5),sum(c6),sum(c7),sum(c8),sum(c9),sum(c9)*(sum(c6)+sum(c8))/(sum(c5)+sum(c7)),sum(c11) as c10," & _

"sum(c5)+sum(c7)-sum(c9),sum(c6)+sum(c8)-sum(c9)*(sum(c6)+sum(c8))/(sum(c5)+sum(c7)) from(" & _

"select ma_hang as c2,ten_hang as c3,dvt as c4,so_luong as c5,thanh_tien as c6,0 as c7,0 as c8,0 as c9,0 as c11 from DMHH where ma_hang is not null " & _
"Union all " & _
"select ma_hang as c2,ten_hang as c3,dvt as c4,iif(ngay*1<" & (ngaybd) & ",so_luong,0) as c5" & _
",iif(ngay*1<" & (ngaybd) & ",thanh_tien,0) as c6,iif((ngay*1>=" & (ngaybd) & ")*(ngay*1<=" & (ngaykt) & "),so_luong,0) as c7," & _
"iif((ngay*1>=" & (ngaybd) & ")*(ngay*1<=" & (ngaykt) & "),thanh_tien,0) as c8,0 as c9,0 as c11 from NK_NHAP where ma_hang is not null " & _
"Union all " & _
"select ma_hang as c2,ten_hang as c3,dvt as c4,iif(ngay*1<" & (ngaybd) & ",-so_luong,0) as c5" & _
",iif(ngay*1<" & (ngaybd) & ",-thanh_tien,0) as c6,0 as c7,0 as c8,iif((ngay*1>=" & (ngaybd) & ")*(ngay*1<=" & (ngaykt) & "),so_luong,0) as c9," & _
"iif((ngay*1>=" & (ngaybd) & ")*(ngay*1<=" & (ngaykt) & "),thanh_tien,0) as c11 from NK_XUAT where ma_hang is not null) " & _
"Group by c2,c3,c4"
:v:
 

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

Back
Top Bottom