Giúp viết code vba tổng hợp định mức nguyên vật liệu

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

THU UYEN317

Thành viên mới
Tham gia
23/3/23
Bài viết
10
Được thích
0
Xin chào các anh chị, em cần sự giúp đỡ viết code: em có bảng định mức nguyên vật liệu ở sheet DINH MUC, khi em nhập liệu vào sheet DU LIEU thì tự động số liệu qua sheet TONG HOP, trong sheet TONG HOP sẽ có phần định mức chi tiết và phần định mức tổng hợp. file đính kèm em có lập bảng cụ thể nhờ các anh chị giúp em ạ.
 

File đính kèm

  • Book1.xlsm
    17.4 KB · Đọc: 40
Xin chào các anh chị, em cần sự giúp đỡ viết code: em có bảng định mức nguyên vật liệu ở sheet DINH MUC, khi em nhập liệu vào sheet DU LIEU thì tự động số liệu qua sheet TONG HOP, trong sheet TONG HOP sẽ có phần định mức chi tiết và phần định mức tổng hợp. file đính kèm em có lập bảng cụ thể nhờ các anh chị giúp em ạ.
có ai giúp em phần này không ạ
 
Upvote 0
Xin chào các anh chị, em cần sự giúp đỡ viết code: em có bảng định mức nguyên vật liệu ở sheet DINH MUC, khi em nhập liệu vào sheet DU LIEU thì tự động số liệu qua sheet TONG HOP, trong sheet TONG HOP sẽ có phần định mức chi tiết và phần định mức tổng hợp. file đính kèm em có lập bảng cụ thể nhờ các anh chị giúp em ạ.
Bạn nên chỉnh sửa phần dữ liệu cột phiên bản của sheet [DINH MUC] trùng khớp với sheet [DU LIEU] thì tôi sẽ có cách giúp bạn nhé.
 
Upvote 0
Xin chào các anh chị, em cần sự giúp đỡ viết code: em có bảng định mức nguyên vật liệu ở sheet DINH MUC, khi em nhập liệu vào sheet DU LIEU thì tự động số liệu qua sheet TONG HOP, trong sheet TONG HOP sẽ có phần định mức chi tiết và phần định mức tổng hợp. file đính kèm em có lập bảng cụ thể nhờ các anh chị giúp em ạ.
Tại sao lại có dữ liệu như vậy ở bảng tổng hợp bạn không giải thích cụ thể viết xong 1 code giống y nguyên dữ liệu bạn đưa ra xong nó không đúng quy luật lại sửa code.Mà tại sao phải để dòng trống nó ngăn cách nhau làm gì vậy.
 
Upvote 0
Bạn nên chỉnh sửa phần dữ liệu cột phiên bản của sheet [DINH MUC] trùng khớp với sheet [DU LIEU] thì tôi sẽ có cách giúp bạn nhé.
em đã chỉnh sửa sheet [DINH MUC] trùng với sheet [DU LIEU] rồi, mong anh giúp đỡ
Bài đã được tự động gộp:

Tại sao lại có dữ liệu như vậy ở bảng tổng hợp bạn không giải thích cụ thể viết xong 1 code giống y nguyên dữ liệu bạn đưa ra xong nó không đúng quy luật lại sửa code.Mà tại sao phải để dòng trống nó ngăn cách nhau làm gì vậy.
dạ, trong sheet TONG HOP khi nhập liệu ở sheet DU LIEU sẽ hiện ra tại bảng chi tiết giống dạng chi tiết định mức cho từng sản phẩm và từ bảng định mức chi tiết sẽ gom lại các nguyên vât liệu cần cho bảng tổng hợp nguyên vật liệu
 

File đính kèm

  • Book1.xlsm
    17.4 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
em đã chỉnh sửa sheet [DINH MUC] trùng với sheet [DU LIEU] rồi, mong anh giúp đỡ
Bài đã được tự động gộp:


dạ, trong sheet TONG HOP khi nhập liệu ở sheet DU LIEU sẽ hiện ra tại bảng chi tiết giống dạng chi tiết định mức cho từng sản phẩm và từ bảng định mức chi tiết sẽ gom lại các nguyên vât liệu cần cho bảng tổng hợp nguyên vật liệu
Tách ra 2 sheets để ghi kết quả riêng biệt.
Bạn chạy thử code sau:

Mã:
Sub DinhMuc_HLMT()
    Dim strSQL As String, strCon As String, i As Integer
    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    strSQL = "Select b.F1 as MaSP,b.F2 as TenSP,b.F4 as SoLuong,b.F3 as PhienBan,a.F5 as MaNVL1,a.F6 as MaNVL2,a.F7 as TenNVL1,a.F8 as TenNVL2,a.F9 as ChungLoai,a.F11 as LoaiSat,a.F12 as DoMa,a.F13*b.F4 as DinhMuc From [DINH MUC$B4:N] a Inner Join [Du Lieu$B4:E] b On a.F1=b.F1 and a.F3=b.F3"
    Sheet2.Range("A1:L1000").ClearContents
    Sheet5.Range("A1:T1000").ClearContents
    With CreateObject("ADODB.Recordset")
        .Open (strSQL), strCon
        Sheet2.Range("A2").CopyFromRecordset .DataSource
        For i = 0 To .Fields.Count - 1
            Sheet2.Cells(1, i + 1) = .Fields(i).Name
        Next
        .Close
        .Open ("Transform Sum(DinhMuc)Select MaNVL1,MaNVL2,TenNVL1,TenNVL2,ChungLoai,LoaiSat,DoMa,sum(DinhMuc) as TongDM From (" & strSQL & ") Group By MaNVL1,MaNVL2,TenNVL1,TenNVL2,ChungLoai,LoaiSat,DoMa Pivot PhienBan"), strCon
        Sheet5.Range("A2").CopyFromRecordset .DataSource
        For i = 0 To .Fields.Count - 1
            Sheet5.Cells(1, i + 1) = .Fields(i).Name
        Next
    End With
    Sheet2.Activate
End Sub

Bạn xem thêm file và tự điều chỉnh lại theo nhu cầu nhé.
 

File đính kèm

  • DinhMuc.xlsm
    30.3 KB · Đọc: 60
Upvote 0
Tách ra 2 sheets để ghi kết quả riêng biệt.
Bạn chạy thử code sau:

Mã:
Sub DinhMuc_HLMT()
    Dim strSQL As String, strCon As String, i As Integer
    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    strSQL = "Select b.F1 as MaSP,b.F2 as TenSP,b.F4 as SoLuong,b.F3 as PhienBan,a.F5 as MaNVL1,a.F6 as MaNVL2,a.F7 as TenNVL1,a.F8 as TenNVL2,a.F9 as ChungLoai,a.F11 as LoaiSat,a.F12 as DoMa,a.F13*b.F4 as DinhMuc From [DINH MUC$B4:N] a Inner Join [Du Lieu$B4:E] b On a.F1=b.F1 and a.F3=b.F3"
    Sheet2.Range("A1:L1000").ClearContents
    Sheet5.Range("A1:T1000").ClearContents
    With CreateObject("ADODB.Recordset")
        .Open (strSQL), strCon
        Sheet2.Range("A2").CopyFromRecordset .DataSource
        For i = 0 To .Fields.Count - 1
            Sheet2.Cells(1, i + 1) = .Fields(i).Name
        Next
        .Close
        .Open ("Transform Sum(DinhMuc)Select MaNVL1,MaNVL2,TenNVL1,TenNVL2,ChungLoai,LoaiSat,DoMa,sum(DinhMuc) as TongDM From (" & strSQL & ") Group By MaNVL1,MaNVL2,TenNVL1,TenNVL2,ChungLoai,LoaiSat,DoMa Pivot PhienBan"), strCon
        Sheet5.Range("A2").CopyFromRecordset .DataSource
        For i = 0 To .Fields.Count - 1
            Sheet5.Cells(1, i + 1) = .Fields(i).Name
        Next
    End With
    Sheet2.Activate
End Sub

Bạn xem thêm file và tự điều chỉnh lại theo nhu cầu nhé.
Trong Sheet DU LIEU nhập 1 dòng trùng thì khi sang sheet Chi Tiet không tự động gộp lại mà tách ra vậy ạ, nếu được anh chỉnh lại giúp em
 
Upvote 0
Trong Sheet DU LIEU nhập 1 dòng trùng thì khi sang sheet Chi Tiet không tự động gộp lại mà tách ra vậy ạ, nếu được anh chỉnh lại giúp em
Định mức từng dòng dữ liệu phải là duy nhất chứ bạn. Trong dữ liệu giả lập của bạn không có trùng. Nếu có trùng thì bạn muốn kết quả như thế nào?
 
  • Thích
Reactions: A-T
Upvote 0
Định mức từng dòng dữ liệu phải là duy nhất chứ bạn. Trong dữ liệu giả lập của bạn không có trùng. Nếu có trùng thì bạn muốn kết quả như thế nào?
khi nhập trùng ở sheet DU LIEU thì nó hiểu tự cộng dồn vào sheet CHI TIET chứ không phân tách như hiện tại, hoặc nếu có thể anh giúp em nhận biết được dữ liệu bị trùng khi nhập trong Sheet DU LIEU
1679630190911.png
 
Upvote 0
khi nhập trùng ở sheet DU LIEU thì nó hiểu tự cộng dồn vào sheet CHI TIET chứ không phân tách như hiện tại, hoặc nếu có thể anh giúp em nhận biết được dữ liệu bị trùng khi nhập trong Sheet DU LIEU
View attachment 287990
Bạn thử với code sau nhé:
Mã:
Sub DinhMuc_HLMT()
    Dim strSQL As String, strCon As String, i As Integer
    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    strSQL = "Select b.F1 as MaSP,b.F2 as TenSP,Sum(b.F4) as SoLuong,b.F3 as PhienBan,a.F5 as MaNVL1,a.F6 as MaNVL2,a.F7 as TenNVL1,a.F8 as TenNVL2,a.F9 as ChungLoai,a.F11 as LoaiSat,a.F12 as DoMa,Sum(a.F13*b.F4) as DinhMuc From [DINH MUC$B4:N] a Inner Join [Du Lieu$B4:E] b On a.F1=b.F1 and a.F3=b.F3 Group By b.F1,b.F2,b.F3,a.F5,a.F6,a.F7,a.F8,a.F9,a.F11,a.F12"
    Sheet2.Range("A1:L1000").ClearContents
    Sheet5.Range("A1:T1000").ClearContents
    With CreateObject("ADODB.Recordset")
        .Open (strSQL), strCon
        Sheet2.Range("A2").CopyFromRecordset .DataSource
        For i = 0 To .Fields.Count - 1
            Sheet2.Cells(1, i + 1) = .Fields(i).Name
        Next
        .Close
        .Open ("Transform Sum(DinhMuc)Select MaNVL1,MaNVL2,TenNVL1,TenNVL2,ChungLoai,LoaiSat,DoMa,sum(DinhMuc) as TongDM From (" & strSQL & ") Group By MaNVL1,MaNVL2,TenNVL1,TenNVL2,ChungLoai,LoaiSat,DoMa Pivot PhienBan"), strCon
        Sheet5.Range("A2").CopyFromRecordset .DataSource
        For i = 0 To .Fields.Count - 1
            Sheet5.Cells(1, i + 1) = .Fields(i).Name
        Next
    End With
    Sheet2.Activate
End Sub
 
  • Thích
Reactions: A-T
Upvote 0
Bạn thử với code sau nhé:
Mã:
Sub DinhMuc_HLMT()
    Dim strSQL As String, strCon As String, i As Integer
    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    strSQL = "Select b.F1 as MaSP,b.F2 as TenSP,Sum(b.F4) as SoLuong,b.F3 as PhienBan,a.F5 as MaNVL1,a.F6 as MaNVL2,a.F7 as TenNVL1,a.F8 as TenNVL2,a.F9 as ChungLoai,a.F11 as LoaiSat,a.F12 as DoMa,Sum(a.F13*b.F4) as DinhMuc From [DINH MUC$B4:N] a Inner Join [Du Lieu$B4:E] b On a.F1=b.F1 and a.F3=b.F3 Group By b.F1,b.F2,b.F3,a.F5,a.F6,a.F7,a.F8,a.F9,a.F11,a.F12"
    Sheet2.Range("A1:L1000").ClearContents
    Sheet5.Range("A1:T1000").ClearContents
    With CreateObject("ADODB.Recordset")
        .Open (strSQL), strCon
        Sheet2.Range("A2").CopyFromRecordset .DataSource
        For i = 0 To .Fields.Count - 1
            Sheet2.Cells(1, i + 1) = .Fields(i).Name
        Next
        .Close
        .Open ("Transform Sum(DinhMuc)Select MaNVL1,MaNVL2,TenNVL1,TenNVL2,ChungLoai,LoaiSat,DoMa,sum(DinhMuc) as TongDM From (" & strSQL & ") Group By MaNVL1,MaNVL2,TenNVL1,TenNVL2,ChungLoai,LoaiSat,DoMa Pivot PhienBan"), strCon
        Sheet5.Range("A2").CopyFromRecordset .DataSource
        For i = 0 To .Fields.Count - 1
            Sheet5.Cells(1, i + 1) = .Fields(i).Name
        Next
    End With
    Sheet2.Activate
End Sub
dạ em cảm ơn anh ạ
 
Upvote 0
Web KT

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

Back
Top Bottom