Tính Thành Tiền (1 người xem)

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

NguyenthiH

Thành viên mới đăng ký
Tham gia
11/12/16
Bài viết
965
Được thích
175
Giới tính
Nữ
Chào Mọi Người. Em là thành viên mới. Mong mọi người giúp em tính cột "Thành Tiền"với ah.
Cột "Thành Tiền"(Sheet2!G)= Sheet2!F * giá công đoạn(Sheet1!C
"Giá CÔng Đoạn" = Tìm theo "Mã Hàng" & "Công Đoạn" rồi lấy giá công đoạn.
Ví dụ như: ngay2/10/2016 - Nguyễn thị Lan - VL2335 - Ủi Ly - có giá công đoạn là 12 = 200*12 bằng 2400
Dữ liệu chỉ giả định, thực tế rất nhiều dòng, nếu viết code được, mong mọi người giúp đỡ
 

File đính kèm

Chào Mọi Người. Em là thành viên mới. Mong mọi người giúp em tính cột "Thành Tiền"với ah.
Cột "Thành Tiền"(Sheet2!G)= Sheet2!F * giá công đoạn(Sheet1!C
"Giá CÔng Đoạn" = Tìm theo "Mã Hàng" & "Công Đoạn" rồi lấy giá công đoạn.
Ví dụ như: ngay2/10/2016 - Nguyễn thị Lan - VL2335 - Ủi Ly - có giá công đoạn là 12 = 200*12 bằng 2400
Dữ liệu chỉ giả định, thực tế rất nhiều dòng, nếu viết code được, mong mọi người giúp đỡ
Chào NguyenthiH,

Bạn dùng công thức tại:
PHP:
G4=[@[Số Lượng]]*IFERROR(LOOKUP(2,1/(Table1[Mã Hàng]=[@[Mã Hàng]])/(Table1[[ Công Đoạn]]=[@[Công Đoạn]]),Table1[Giá Công Đoạn]),0)

Chúc bạn ngày vui.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào Mọi Người. Em là thành viên mới. Mong mọi người giúp em tính cột "Thành Tiền"với ah.
Cột "Thành Tiền"(Sheet2!G)= Sheet2!F * giá công đoạn(Sheet1!C
"Giá CÔng Đoạn" = Tìm theo "Mã Hàng" & "Công Đoạn" rồi lấy giá công đoạn.
Ví dụ như: ngay2/10/2016 - Nguyễn thị Lan - VL2335 - Ủi Ly - có giá công đoạn là 12 = 200*12 bằng 2400
Dữ liệu chỉ giả định, thực tế rất nhiều dòng, nếu viết code được, mong mọi người giúp đỡ
góp thêm bằng VBA. bấm ngôi sao chạy code
 

File đính kèm

Upvote 0
cám Ơn bạn quocgiacan, có thể dùng code được không bạn.(mình sợ dữ liệu nhiều sẽ load lâu)
 
Upvote 0
Mới gửi bài thì thấy bạn HieuCD trả lời. Cám ơn bạn HieuCD
 
Upvote 0
Ủa ban HieuCD, sao Sheet2!G5:G7 không có Thành Tiền vậy bạn, cả Sheet2!G26:G28. cũng không có.
 
Upvote 0
Ở Sheet1 mình có "Mã Hàng", "Công Đoạn", "Giá Công Đoạn"
Ở Sheet2 nếu dò đúng "Mã Hàng" và "Công Đoạn" thì lấy cột "Số lượng" của Sheet2 nhân với "Giá Công Đoạn" của công đoạn đó(Theo mã Hàng)
 
Upvote 0
Có mà bạn HieuCD,
1/ More5147-Vắt Lai - 9đ (Sheet1!A31:C31)
2/NKSF16019 - Vắt Sổ - 23đ(Sheet1!A19:C19)
 
Upvote 0
Ở Sheet1 mình có "Mã Hàng", "Công Đoạn", "Giá Công Đoạn"
Ở Sheet2 nếu dò đúng "Mã Hàng" và "Công Đoạn" thì lấy cột "Số lượng" của Sheet2 nhân với "Giá Công Đoạn" của công đoạn đó(Theo mã Hàng)
Bạn ơi!

Cả công thức, và cả VBA của HieuCD đều làm như vậy.
Chỉ có điều: mã trong Sheet2
D5= "VL2336"
D6= "VL2337"
D7= "VL2338"

Các mã này KHÔNG TỒN TẠI CÓ SẲN trong Sheet1, chỉ khi nào bạn điền giá trị của các mã này vào Sheet1 thì Sheet2 mới truy lục ra.

Chúc bạn ngày vui.
 
Upvote 0
Còn Sheet2!G5:G7 không có là do mình fill đơn hàng xuống nên nó chạy VL2336, VL2337, VL2338(không có đơn hàng)
 
Upvote 0
Mình biết chổ đó là do mình Fill Xuống, chỉ chổ Sheet2!G26:G28 là sao không có. Bên Sheet1 có mà.
 
Upvote 0
Không nắm vững được dữ liệu của mình thì đừng nên dùng code. Dùng công thức may ra còn nhận được những chỗ sai.
 
Upvote 0
Mong mọi ngưởi giúp em. Em thấy chổ Sheet2!G26:G28, bên sheet1 có mà sao không tính thành tiền được vậy cà&&&%$R
 
Lần chỉnh sửa cuối:
Upvote 0
Mình biết chổ đó là do mình Fill Xuống, chỉ chổ Sheet2!G26:G28 là sao không có. Bên Sheet1 có mà.
Anh Vetmini khuyến cáo bạn là chính xác. Bạn nên thành thạo công thức hàm trước, rồi sau đó vào VBA.

Tôi ngứa tay và mạo muội chỉnh dùm cho HieuCD (bạn hiền đừng la mình nha! /-*+/),
Bạn tham khảo file đính kèm.

Chúc bạn ngày vui.
 

File đính kèm

Upvote 0
Cám Ơn bạn quocgiacan nhiều nhiều. Chúc Bạn ngày vui.
 
Upvote 0
Anh Vetmini khuyến cáo bạn là chính xác. Bạn nên thành thạo công thức hàm trước, rồi sau đó vào VBA.
Tôi ngứa tay và mạo muội chỉnh dùm cho HieuCD (bạn hiền đừng la mình nha! /-*+/),
Bạn tham khảo file đính kèm.
Chúc bạn ngày vui.
mình quên cộng thêm 3 dòng đầu không có dữ liệu
cám ơn bạn, chúc bạn một ngày vui }}}}} }}}}} }}}}}
Viết code VBA đâu có khó bằng công thức mãng, bạn cứ mạnh dạn viết và gởi lên, đúng sai, hay dở không thành vấn đề, viết nhiều từ từ sẽ quen tay thôi. Mấy tháng trước mình không rành nhưng cứ phang đại, nhờ các bạn trên diễn đàn góp ý, hướng dẫn và rút kinh nghiệm dài dài
 
Upvote 0
mình quên cộng thêm 3 dòng đầu không có dữ liệu
cám ơn bạn, chúc bạn một ngày vui }}}}} }}}}} }}}}}
Viết code VBA đâu có khó bằng công thức mãng, bạn cứ mạnh dạn viết và gởi lên, đúng sai, hay dở không thành vấn đề, viết nhiều từ từ sẽ quen tay thôi. Mấy tháng trước mình không rành nhưng cứ phang đại, nhờ các bạn trên diễn đàn góp ý, hướng dẫn và rút kinh nghiệm dài dài

Khà khà khà! thấy bạn hiền bận rộn chưa trả lời được nên ngứa tay vào chêm để gửi cho "chú cún con". Không mong cũng không hy vọng thẳng tiến vào "cõi" VBA, cởi ngựa xem hoa thì được rồi. Chỉ lo an phận thủ thường vui đùa cùng với anh em bằng hàm và công thức mảng thôi, hè hè hè.

Chúc bạn gặt hái nhiều hơn trong VBA. /-*+//-*+//-*+/
 
Upvote 0
Cám Ơn Anh HieuCD, Anh quocgiacan. Em còn nhờ vả các Anh nữa nhe(Đừng la "Chú Cún Con" tội nghiệp)
EM có ý định là sẽ tạo Form để nhập liệu vào Sheet2. Sẽ có 3 ComboBox(CB_TenCN, CB_MaHang, CB_CongDoan). 3 TextBox(TB_Ngay, TB_To, TB_SL) và 1 ListBox. Em đang thiết kế Form, mong các Anh giúp đỡ nữa.
 
Upvote 0
Anh befaint vui tính ghê. Ai lại nhờ người ta "Vả" mình đâu Anh. Nói đùa, mong các Anh giúp đỡ "Cún Con"
 
Upvote 0
"Cún Con" lại nhờ các Anh giúp đỡ nữa ah.
Khi gỏ tháng vào Sheet3!A2 thì sẽ lọc trong Sheet2, đập vào bảng Sheet3!A5:C các tổ, mã hàng theo tổ và tổng thành tiền theo mã hàng của tổ đó làm trong tháng đó. "Cún Con" có đính kèm File. Mong các Anh giúp đỡ.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
"Cún Con" lại nhờ các Anh giúp đỡ nữa ah.
Khi gỏ tháng vào Sheet3!A2 thì sẽ lọc trong Sheet2, đập vào bảng Sheet3!A5:C các tổ, mã hàng theo tổ và tổng thành tiền theo mã hàng của tổ đó làm trong tháng đó. "Cún Con" có đính kèm File. Mong các Anh giúp đỡ.
bạn nhập tháng vào A2 code sẽ chạy
 

File đính kèm

Upvote 0
"Cún Con" Cám Ơn Anh HieuCD nhiều nhiều.
 
Upvote 0
"Cún Con" vừa tạo Form xong, mong Các Anh giúp "Cún Con" nhập liệu với.
Trong Form, Cb_CN lấy list là cột G của Sheet1 và khi chọn tên công nhân trong Cb_CN thì tự đập "Tổ" của công nhân đó vào Tb_To.
Cb_MH lấy list là cột A của Sheet1(lọc không trùng) và khi chọn mã hàng trong Cb_MH thì Cb_CD chỉ có những công đoạn của mã hàng đó.
Khi chọn công đoạn rối gỏ số lượng vào Tb_SL nhấn enter thì đập dữ liệu của Cb_CN và Tb_SL vào ListBox1 và lúc đó Cb_CD và Tb_SL bị xóa và lại chọn công đoạn trong Cb_CD và gỏ số lượng vào Tb_SL lại enter để đập vào ListBox1.
Khi nhấn Cmd_NL thì ghi dữ liệu của Form vào Sheet2.
"Cún Con" mong các Anh giúp ah!
 

File đính kèm

Upvote 0
"Cún Con"có tâp làm code như vầy để lấy List cho Cb_CN nhưng không được (Lỗi)
Mã:
Private Sub UserForm_Initialize()
Dim Arr1()
    With Cb_CN
        .ColumnCount = 1
        .ColumnWidths = "180"
        Arr1 = Sheet1.Range(Sheet1.[G1000].End(xlUp), Sheet1.[H4]).Value
    End With
    Cb_CN.List = Arr1
     With Me.ListBox1
        .ColumnCount = 3
        .ColumnWidths = "50;180;70"
     End With
    End With
End Sub
Mong các Anh giúp đỡ.
 
Lần chỉnh sửa cuối:
Upvote 0
Trong Form, Cb_CN lấy list là cột G của Sheet1 và khi chọn tên công nhân trong Cb_CN thì tự đập "Tổ" của công nhân đó vào Tb_To.

Nếu bạn viết/vẽ Form cho ngành may, thì danh sách tên CN nên có mã duy nhất cho từng người
Ví dụ:
PHP:
'Tên Công Nhân         Mã'
Nguyễn thị Lụa        NTL00
Nguyễn thị Lan        NTL01
Hồ thị Đào            HTF00
Đặng hồng Thắm        FHT00
Thái thị Tám          TTT00
Đỗ ngọc Thủy          FNT00
Lưu ngọc Loan         LNL00
Lê thị ngọc Thảo      LNT00
Thái thị thảo Thanh   TTT02
Hồ thị Khanh          HTK00
Đặng thị Huệ          FTH00
Nguyễn lan Hương      NLH00
Thái thị Bảy          TTB00
Trần thị Tú           TTT00
Trần thị cẩm Vân      TCV00
Lê thị Thúy           LTT00
Nguyễn Văn Toàn       NVT00
Nguyễn Văn Thể        NVT01
Đoàn Văn Hậu          FVH00 
Dương Quang           DJQ00
 
Lần chỉnh sửa cuối:
Upvote 0
"Cún Con" Cám Ơn Anh ChanhTQ@, Vì công nhân chổ em chỉ có 150 người, và khi nạp vào Danh Sách, nếu trùng thì em đặt là A, B. Mong Các Anh giúp đỡ.
 
Upvote 0
"Cún Con" Cám Ơn Anh ChanhTQ@, Vì công nhân chổ em chỉ có 150 người, và khi nạp vào Danh Sách, nếu trùng thì em đặt là A, B. Mong Các Anh giúp đỡ.

"Người ta" phải xử lý dữ liệu ngon lành đã rồi mới đi tính làm chuyện khác.
Cứ đặt mã cho 150 người rồi làm gì cũng dễ và rất khoa học.
 
Upvote 0
Vây "Cún Con" nhờ các Anh làm luôn cho vậy.
 
Upvote 0
Sao em nạp List cho Cb_CN cứ bị lỗi hoài. "Cún Con"gà về VBA, mong các Anh giúp đỡ.
Em cũng có tìm trên GPE: 1, 2.
Mong các Anh giúp đỡ.
 
Upvote 0
Sao em nạp list cho ComboBox "Công Nhân", mà bị lỗi vảng ngay chổ màu đỏ vậy các Anh:
Mã:
Private Sub UserForm_Initialize()
     With Cb_CN
           .ColumnWidths = "50"
                Arr = Sheet1.Range(Sheet1[B][COLOR=#ff0000].[G4],[/COLOR][/B] Sheet1.[G65536].End(xlUp)).Value 
                  .List() = Arr   
         End With
    With ListBox1
        .ColumnCount = 3
        .ColumnWidths = "50;280;70"
    End With
End Sub
Mong các Anh giúp đỡ.
 
Upvote 0
Anh HieuCD chỉnh dùm em cột C của Sheet3 ("Tổng Thành Tiền" có dấu phân cách hàng ngàn với.(#,##0.00)
Vì code anh khi chọn tháng là xóa hết.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
    If Target.Value < 1 Or Target.Value > 12 Then Exit Sub
    If Sheets("Sheet2").Range("B65500").End(xlUp).Row <= 3 Then Exit Sub
    Dim Dic As Object, Darr(), Arr(), i As Long, tmp As String
    Set Dic = CreateObject("Scripting.Dictionary")
    Darr = Sheets("Sheet2").Range("A4:G" & Sheets("Sheet2").Range("A65500").End(xlUp).Row).Value
    ReDim Arr(1 To UBound(Darr), 1 To 3)
    For i = 1 To UBound(Darr)
        If Month(Darr(i, 1)) = Target.Value Then
            tmp = Darr(i, 3) & "!@#" & Darr(i, 4)
            If Not Dic.exists(tmp) Then
                k = k + 1:                  Dic.Add tmp, k
                Arr(k, 1) = Darr(i, 3):     Arr(k, 2) = Darr(i, 4)
            End If
            Arr(Dic.Item(tmp), 3) = Arr(Dic.Item(tmp), 3) + Darr(i, 7)
        End If
    Next i
    Set Dic = Nothing
    [B][COLOR=#ff0000]Sheets("Sheet3").Range("A5:C1000").Clear[/COLOR][/B]
    Sheets("Sheet3").Range("A5").Resize(k, 3) = Arr
    Sheets("Sheet3").Range("A4").Resize(k + 1, 3).Borders.LineStyle = 1
End If
End Sub
Mong anh giúp đỡ.
 
Upvote 0
Bạn thử vận hành với Form trong file này; Có gì khó khăn thì fản hồi ngay nha!)*&^)
 
Lần chỉnh sửa cuối:
Upvote 0
"Cún Con" Cám Ơn Anh ChanhTQ@nhiều nhiều.
Ủa file của Anh là File tìm kiếm mà.
Anh có thể làm theo Form em làm được không Anh.
 
Lần chỉnh sửa cuối:
Upvote 0
Ủa file của Anh là File tìm kiếm mà.
Anh có thể làm theo Form em làm được không Anh.

Đó là Form của bạn mà! Chỉ có điều chưa cần tới ListBox (nên bỏ đi rồi) & thêm 2 TextBox để tiện nhập đơn giá công đoạn & mã NV

Bạn thử nhập liệu chưa vậy?

Các trị ta nhập vố các TextBox & ComboBox sẽ được lưu vô trang tính cần thiết.
 
Upvote 0
"Cún Con" có thử code chỉnh cho cột thành tiền của Sheet3 có dấu phân cách hàng ngàn, nhưng không được
Mã:
    Sheets("Sheet3").Range("A5:C1000").Clear
    Sheets("Sheet3").Range("A5").Resize(k, 3) = Arr
    Sheets("Sheet3").Range("A4").Resize(k + 1, 3).Borders.LineStyle = 1
    Sheets("Sheet3").Range("C5").Resize(k + 1).FormatNumber = FormatNumber("#,##0.00")
"Cún Con" gà về VBA.
Mong các Anh giúp đỡ.
 
Upvote 0
Đây nè Anh ChanhTQ hinh em chụp
Hinh1.jpg
Hinh2.jpg
 
Upvote 0
"Cún Con" có thử code chỉnh cho cột thành tiền của Sheet3 có dấu phân cách hàng ngàn, nhưng không được
Mã:
    Sheets("Sheet3").Range("A5:C1000").Clear
    Sheets("Sheet3").Range("A5").Resize(k, 3) = Arr
    Sheets("Sheet3").Range("A4").Resize(k + 1, 3).Borders.LineStyle = 1
    Sheets("Sheet3").Range("C5").Resize(k + 1).FormatNumber = FormatNumber("#,##0.00")
"Cún Con" gà về VBA.
Mong các Anh giúp đỡ.
Mã:
      Sheets("Sheet3").Range("C5").Resize(k + 1).FormatNumber [COLOR=#0000ff]= "#,##0.00"[/COLOR]
 
Upvote 0
vẫn Không được Anh befaint ơi.!!
 
Upvote 0
Cám Ơn Anh ChanhTQ nhiều nhiều. Thế còn nạp vào ListBox(vì một công nhân có thể may nhiều công đoạn).
 
Upvote 0
Cám Ơn Anh; Thế còn nạp vào ListBox(vì một CN có thể may nhiều công đoạn).

May nhiều công đoạn trong 1 ngày?

Nhưng vấn đề ở đây không fải là ListBox, mà sẽ là vấn để bạn nhập như thế nào vô trang dữ liệu, mà mình gọi là 'CTiet'

Nếu thực hiện 2 công đoạn trong 1 ngày thì fải nhập 2 dòng thôi.

Còn nếu rất nhiều trường hợp fải làm nhiều công đoạn trong ngày thì ta lại fải tách trang này ra làm 2 Table liên hệ với nhau 1<-> nhiều (Giống như trong nhập/xuất kho vậy)
 
Upvote 0
với Anh befaint:
Anh và em đều viết lộn "FormatNumber", mà phải là "NumberFormat" mới được.
với Anh ChanhTQ:
Em không rành về VBA và cả 1<>nhiều, thực tế chô em một công nhân có thể may từ 3 ->4 cộng đoạn vả cả nhiều mã hàng. Mong Anh giúp đỡ.
 
Upvote 0
Em không rành về VBA và cả 1<>nhiều, thực tế chô em một công nhân có thể may từ 3 ->4 cộng đoạn vả cả nhiều mã hàng. Mong Anh giúp đỡ.

Vấn đề ở đây không fải là VBA, Vấn đề sẽ fải là cấu trúc lưu giữ dữ liệu thế nào cho tốt nhất.

Còn VBA cũng giống như công cụ hỗ trợ mà thôi.

Đúng là mình mới xem lại trang 'CTiet'; Trong đó 1 người trong 1 ngày có tham gia các công đoạn khác nhau & hiện giờ bạn đang nhập nhiều dòng cho 1 người.

Tuy nhiên cách này sẽ làm cho CSDL của bạn trùng nhiều trong các cột /trường (như: [Ngày], [Mã CN], Tên CN], [Tổ])

(*) Theo cách hiện giờ của bạn cũng được; Nhưng bạn cần biết có cách khác nữa để tránh trùng lặp
là người ta tách fần trùng lặp này ra 1 bảng riêng & các trường không trùng lặp ra 1 bảng riêng; Hai bảng này liên hệ với nhau.

Vậy lựa chọn hướng đi sẽ là bạn: Tiếp tục như hiện tại hay tách làm 2 bảng (Table)
Nếu chọn hướng mới, chúng ta fải hoàn toàn fụ thuộc vô VBA.

. . . . ? ? ?-+*/
 
Upvote 0
Cám Ơn Anh ChanhTQ@ đã quan tâm giúp đỡ em. Nếu không phiền gì Anh, thì Anh có thể giúp em làm theo cách tránh trùng lập được không ah!
ChanhTQ@ đã viết:
Nhưng bạn cần biết có cách khác nữa để tránh trùng lặp
là người ta tách fần trùng lặp này ra 1 bảng riêng & các trường không trùng lặp ra 1 bảng riêng; Hai bảng này liên hệ với nhau.

Mong h
ọc hỏi ở Anh.
 
Upvote 0
Fiền chứ sao lại chả fiền!

Tiêu 1 buổi í chứ lị!;;;;;;;;;;; :.,

Voọc kỹ chút đi nha!
 

File đính kèm

Upvote 0
"Cún Con" làm phiền Anh ChanhTQ@ quá. Không biết chiều nay Anh có đi gặp gỡ Anh Nguyễn Duy Tuân không, nếu có Anh chơi 1 lít vào là quên hết phiền muộn.
Cám Ơn Anh ChanhTQ@ nhiều nhiều.
 
Upvote 0
Cám Ơn mọi người đã giúp em. Bây giờ em muốn thống kê ra trong tháng Lương(tổng thành tiền) của từng người và muốn biết trong tháng từng người của tổ nào và từng mã hàng có tổng thành tiền là bao nhiêu ?
Code của Anh HieuCD là chi tiết của từng tổ làm theo mã hàng(có 3 cột,tổ,Mã Hàng, tỏng thành tiền)
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
    If Target.Value < 1 Or Target.Value > 12 Then Exit Sub
    If Sheets("Sheet2").Range("B65500").End(xlUp).Row <= 3 Then Exit Sub
    Dim dic As Object, Darr(), arr(), i As Long, tmp As String
    Set dic = CreateObject("Scripting.Dictionary")
    Darr = Sheets("Sheet2").Range("A4:G" & Sheets("Sheet2").Range("A65500").End(xlUp).Row).Value
    ReDim arr(1 To UBound(Darr), 1 To 3)
    For i = 1 To UBound(Darr)
        If Month(Darr(i, 1)) = Target.Value Then
            tmp = Darr(i, 3) & "!@#" & Darr(i, 4)
            If Not dic.exists(tmp) Then
                k = k + 1:                  dic.Add tmp, k
                arr(k, 1) = Darr(i, 3):     arr(k, 2) = Darr(i, 4)
            End If
            arr(dic.Item(tmp), 3) = arr(dic.Item(tmp), 3) + Darr(i, 7)  
        End If
    Next i
    Set dic = Nothing
    Sheets("Sheet3").Range("A5:C500").Clear
    Sheets("Sheet3").Range("A5").Resize(k, 3) = arr
    Sheets("Sheet3").Range("A4").Resize(k + 1, 3).Borders.LineStyle = 1
    Sheets("Sheet3").Range("C5").Resize(k + 1).NumberFormat = "#,##0"
End If
End Sub
Bây giờ em muốn là Tên công nhân, tổ, mã hàng, tổng thành tiền và em có chỉnh code lại như vầy mà lỗi vàng ngay dòng đỏ:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
    If Target.Value < 1 Or Target.Value > 12 Then Exit Sub
    If Sheets("Sheet2").Range("B65500").End(xlUp).Row <= 3 Then Exit Sub
    Dim dic As Object, Darr(), arr(), i As Long, tmp As String
    Set dic = CreateObject("Scripting.Dictionary")
    Darr = Sheets("Sheet2").Range("A4:G" & Sheets("Sheet2").Range("A65500").End(xlUp).Row).Value
    ReDim arr(1 To UBound(Darr), 1 To 4)
    For i = 1 To UBound(Darr)
        If Month(Darr(i, 1)) = Target.Value Then
            tmp = Darr(i, 2) & "!@#" & Darr(i, 3) & Darr(i, 4)
            If Not dic.exists(tmp) Then
                k = k + 1:                  dic.Add tmp, k
                arr(k, 1) = Darr(i, 2):     arr(k, 2) = Darr(i, 3)
                arr(k, 3) = Darr(i, 4)
            End If
[B][COLOR=#ff0000]            arr(dic.Item(tmp), 2) = arr(dic.Item(tmp), 2) + Darr(i, 7)[/COLOR][/B]
        End If
    Next i
    Set dic = Nothing
    Sheets("Sheet4").Range("A5:D1000").Clear
    Sheets("Sheet4").Range("A5").Resize(k, 4) = arr
    Sheets("Sheet4").Range("A4").Resize(k + 1, 4).Borders.LineStyle = 1
    Sheets("Sheet4").Range("D5").Resize(k + 1).NumberFormat = "#,##0"
End If
End Sub
Mong mọi người giúp đỡ.
 
Upvote 0
Tổng hợp theo tổ hay theo từng người trong CQ của 1 tháng đây, mại zô!
 

File đính kèm

Upvote 0
Hay quá Anh ChanhTQ@, Cám ơn Anh nhiều nhiều
 
Upvote 0
Ah mà Anh ChanhTQ@ em hỏi tý: nếu phát sinh thêm mã hàng và công nhân thì cứ chèn vào tiếp hả Anh.(Sheet Thop và Sheet Lương)
Trong File Anh có MaQH là viết tắt của từ gì vậy Anh.
 
Upvote 0
Ah mà Anh ChanhTQ@ em hỏi tý: (1)Nếu phát sinh thêm mã hàng và công nhân thì cứ chèn vào tiếp hả Anh.(Sheet Thop và Sheet Lương)

(2) Trong File Anh có MaQH là viết tắt của từ gì vậy Anh.

(1) Với trình độ của bạn thì nên diễn dịch Code ra tiếng Việt để hiểu rõ hơn.

(2) MaQH: đó là từ viết tắt của cụm: [Mã Quan Hệ]

Mã này có chức năng liên hệ giữa fần 'Chung' với các dòng của fần 'Chi tiết'
Fần chung gồm các trường [Ngày], [Mã NV], [Tổ] & [MaQH]
Từ đó ta mới xác định được tổ của mỗi dòng chi tiết.
Fần chi tiết như bạn thấy, gồm các trường:
[TABLE="width: 427"]
[TR]
[TD="class: xl65, width: 83"][MaQH],
[/TD]
[TD="class: xl65, width: 96"][Mã Hàng],
[/TD]
[TD="class: xl66, width: 96"][Công Đoạn],
[/TD]
[TD="class: xl66, width: 70"]Số Lượng
[/TD]
[TD="class: xl66, width: 82"],Thành Tiền
[/TD]
[/TR]
[/TABLE]
Mã được tạo ra bỡi 2 thành tố (TT); TT đầu gồm 3 kí tự biểu thị Năm, tháng & ngày thực hiện SF
TT sau là mã CNV thực hiện công đoạn sản fẩm.
 
Upvote 0
Cám Ơn mọi người đã giúp em. Bây giờ em muốn thống kê ra trong tháng Lương(tổng thành tiền) của từng người và muốn biết trong tháng từng người của tổ nào và từng mã hàng có tổng thành tiền là bao nhiêu ?
Code của Anh HieuCD là chi tiết của từng tổ làm theo mã hàng(có 3 cột,tổ,Mã Hàng, tỏng thành tiền)
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
    If Target.Value < 1 Or Target.Value > 12 Then Exit Sub
    If Sheets("Sheet2").Range("B65500").End(xlUp).Row <= 3 Then Exit Sub
    Dim dic As Object, Darr(), arr(), i As Long, tmp As String
    Set dic = CreateObject("Scripting.Dictionary")
    Darr = Sheets("Sheet2").Range("A4:G" & Sheets("Sheet2").Range("A65500").End(xlUp).Row).Value
    ReDim arr(1 To UBound(Darr), 1 To 3)
    For i = 1 To UBound(Darr)
        If Month(Darr(i, 1)) = Target.Value Then
            tmp = Darr(i, 3) & "!@#" & Darr(i, 4)
            If Not dic.exists(tmp) Then
                k = k + 1:                  dic.Add tmp, k
                arr(k, 1) = Darr(i, 3):     arr(k, 2) = Darr(i, 4)
            End If
            arr(dic.Item(tmp), 3) = arr(dic.Item(tmp), 3) + Darr(i, 7)  
        End If
    Next i
    Set dic = Nothing
    Sheets("Sheet3").Range("A5:C500").Clear
    Sheets("Sheet3").Range("A5").Resize(k, 3) = arr
    Sheets("Sheet3").Range("A4").Resize(k + 1, 3).Borders.LineStyle = 1
    Sheets("Sheet3").Range("C5").Resize(k + 1).NumberFormat = "#,##0"
End If
End Sub
Bây giờ em muốn là Tên công nhân, tổ, mã hàng, tổng thành tiền và em có chỉnh code lại như vầy mà lỗi vàng ngay dòng đỏ:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
    If Target.Value < 1 Or Target.Value > 12 Then Exit Sub
    If Sheets("Sheet2").Range("B65500").End(xlUp).Row <= 3 Then Exit Sub
    Dim dic As Object, Darr(), arr(), i As Long, tmp As String
    Set dic = CreateObject("Scripting.Dictionary")
    Darr = Sheets("Sheet2").Range("A4:G" & Sheets("Sheet2").Range("A65500").End(xlUp).Row).Value
    ReDim arr(1 To UBound(Darr), 1 To [COLOR=#ff0000]4[/COLOR])
    For i = 1 To UBound(Darr)
        If Month(Darr(i, 1)) = Target.Value Then
            tmp = Darr(i, 2) & "!@#" & Darr(i, 3) & Darr(i, 4)
            If Not dic.exists(tmp) Then
                k = k + 1:                  dic.Add tmp, k
                arr(k, 1) = Darr(i, 2):     arr(k, 2) = Darr(i, 3)
                arr(k, 3) = Darr(i, 4)
            End If
[B][COLOR=#ff0000]            arr(dic.Item(tmp), 2) = arr(dic.Item(tmp), 2) + Darr(i, 7)[/COLOR][/B]
        End If
    Next i
    Set dic = Nothing
    Sheets("Sheet4").Range("A5:D1000").Clear
    Sheets("Sheet4").Range("A5").Resize(k, 4) = arr
    Sheets("Sheet4").Range("A4").Resize(k + 1, 4).Borders.LineStyle = 1
    Sheets("Sheet4").Range("D5").Resize(k + 1).NumberFormat = "#,##0"
End If
End Sub
Mong mọi người giúp đỡ.
bạn sửa code lại, với tên công nhân không được trùng trong công ty
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
    If Target.Value < 1 Or Target.Value > 12 Then Exit Sub
    If Sheets("Sheet2").Range("B65500").End(xlUp).Row <= 3 Then Exit Sub
    Dim Dic As Object, Darr(), Arr(), i As Long, tmp As String
    Set Dic = CreateObject("Scripting.Dictionary")
    Darr = Sheets("Sheet2").Range("A4:G" & Sheets("Sheet2").Range("A65500").End(xlUp).Row).Value
    ReDim Arr(1 To UBound(Darr), 1 To [COLOR=#ff0000]4[/COLOR])
    For i = 1 To UBound(Darr)
        If Month(Darr(i, 1)) = Target.Value Then
           [COLOR=#ff0000] tmp = Darr(i, 2)[/COLOR] 'Tên công nhân không duoc trùng
            If Not Dic.exists(tmp) Then
                k = k + 1:                  Dic.Add tmp, k
[COLOR=#ff0000]                Arr(k, 1) = Darr(i, 2): Arr(k, 2) = Darr(i, 3): Arr(k, 3) = Darr(i, 4)[/COLOR]
            End If
            Arr(Dic.Item(tmp), [COLOR=#ff0000]4[/COLOR]) = Arr(Dic.Item(tmp),[COLOR=#ff0000] 4[/COLOR]) + Darr(i, 7)
        End If
    Next i
    Set Dic = Nothing
    Sheets("Sheet3").Range("A5:D1000").Clear
    Sheets("Sheet3").Range("A5").Resize(k, [COLOR=#ff0000]4[/COLOR]) = Arr
    Sheets("Sheet3").Range("A4").Resize(k + 1, 4).Borders.LineStyle = 1
End If
End Sub
 
Upvote 0
Không được Anh HieuCD ơi, vì cấu trúc Sheet2 của em sẽ có tên một người trên một cột. Em thử thấy nó không chạy gì hết.
 
Upvote 0
Không được Anh HieuCD ơi, vì cấu trúc Sheet2 của em sẽ có tên một người trên một cột. Em thử thấy nó không chạy gì hết.
mình sử dụng file cũ, bạn sử dụng file của bài nào? nếu file mới thì gởi lên mới chỉnh được
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
ủa sao file em cũng là file đó mà không chạy code
 
Upvote 0
Xin lỗi Anh HieuCD em biết lỗi do đâu rồi(do nhầm sheet) Thế bây giờ Anh có thể tỗng hợp dùm tổng thành tiền của từng người trong tháng để em nộp thủ quỹ phát tiền được không ah!.
 
Upvote 0
chết, chết không đúng rồi Anh HieuCD ơi, em xin nói rỏ là như công nhân Nguyễn thị Lan trong tháng 10 làm công đoạn của 3 mã hàng: VL2335=15510, Q1M528SO=13890, NKSF16019=16700 và tổng 3 mã hàng là: 46100, còn code lại chạy chỉ 1 mã hàng VL2335=46100, em muốn kê ra tổng tiền từng mã hàng . Mong Anh xen giúp.
 
Upvote 0
Em xin nói rỏ để các Anh giúp em. Em phải tạo 3 sheet chi tiết
1/chi tiết của từng tổ làm từng mã hàng để đối chiếu với tổ, nếu thấy không khớp ở tổ nào thì lại đối chiếu với từng công nhân của tổ đó. Gồm các trường[Tổ], [Mã Hàng], [Tổng Thành Tiền]
2/chi tiết của từng công nhân của từng tổ làm từng mã hàng được bao nhiêu để đối chiếu.Gồm các trường[Tên công nhân], [Tổ], [Mã Hàng], [Tổng Thành Tiền]
3/nếu đối chiếu đã khớp thì ra bảng chi tiết từng công nhân có Lương là bao nhiêu. Gồm các trường:[Tên Công nhân], [Tổng thành tiền]
Mong các Anh giúp đỡ.
 
Upvote 0
Em xin nói rỏ để các Anh giúp em. Em phải tạo 3 sheet chi tiết
1/chi tiết của từng tổ làm từng mã hàng để đối chiếu với tổ, nếu thấy không khớp ở tổ nào thì lại đối chiếu với từng công nhân của tổ đó. Gồm các trường[Tổ], [Mã Hàng], [Tổng Thành Tiền]
2/chi tiết của từng công nhân của từng tổ làm từng mã hàng được bao nhiêu để đối chiếu.Gồm các trường[Tên công nhân], [Tổ], [Mã Hàng], [Tổng Thành Tiền]
3/nếu đối chiếu đã khớp thì ra bảng chi tiết từng công nhân có Lương là bao nhiêu. Gồm các trường:[Tên Công nhân], [Tổng thành tiền]
Mong các Anh giúp đỡ.
mỗi bảng chi tiết sẽ chạy code theo tháng riêng của sheet đó hay chỉ cần thay đổi tháng của sheet 3 là cả 3 bảng chi tiết sẽ chạy theo tháng của sheet 3?
 
Upvote 0
Cám Ơn Anh HieuCD nhiều nhiều.
 
Upvote 0

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

Back
Top Bottom