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

Liên hệ QC

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

"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
Web KT

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

Back
Top Bottom