Tách số theo điều kiện rồi tính tổng trong chuỗi không cố định

Liên hệ QC

mraleno

Thành viên chính thức
Tham gia
1/12/09
Bài viết
68
Được thích
18
Nhờ các cao thủ chỉ giáo:
Em cũng đã nghiên cứu nhiều bài viết về tách chuỗi trên diễn đàn nhưng chưa có được cách nào giải quyết vấn đề của em
em cần tính tổng các số trong chuỗi theo điều kiện nhưng chưa tính được
Anh em nào xem thử file phía dưới chỉ giùm em với
Em xin cảm ơn
 

File đính kèm

  • TÍNH TỔNG SỐ TRONG CHUỖI VỚI NHIỀU ĐIỀU KIỆN.xlsx
    9.2 KB · Đọc: 19
Nhờ các cao thủ chỉ giáo:
Em cũng đã nghiên cứu nhiều bài viết về tách chuỗi trên diễn đàn nhưng chưa có được cách nào giải quyết vấn đề của em
em cần tính tổng các số trong chuỗi theo điều kiện nhưng chưa tính được
Anh em nào xem thử file phía dưới chỉ giùm em với
Em xin cảm ơn
Cho dữ liệu thực lên bạn.Vì những cái này cần dữ liệu thực tế mới viết đúng được.
 
Nhờ các cao thủ chỉ giáo:
Em cũng đã nghiên cứu nhiều bài viết về tách chuỗi trên diễn đàn nhưng chưa có được cách nào giải quyết vấn đề của em
em cần tính tổng các số trong chuỗi theo điều kiện nhưng chưa tính được
Anh em nào xem thử file phía dưới chỉ giùm em với
Em xin cảm ơn
Chèn thêm sheet2 rồi chạy code
Mã:
Sub Tong()
Dim Nguon, Dong, Cot
Dim Tam
Dim KqNv, TenPp, KqPp
Dim i, j, k, x, t
Nguon = Sheet1.Range("A2:E6")
Dong = UBound(Nguon)
Cot = UBound(Nguon, 2)
ReDim KqNv(1 To 1, 1 To Cot)
With CreateObject("Scripting.Dictionary")
    For j = 2 To Cot
        For i = 2 To Dong
            If Nguon(i, j) <> "" Then
                Tam = Split(Replace(Nguon(i, j), " ", ""), ",")
                For x = 0 To 1
                    t = Left(Tam(x), 1)
                    k = CLng(Replace(Tam(x), t, ""))
                    .Item(t) = .Item(t) + k
                    KqNv(1, j - 1) = KqNv(1, j - 1) + k
                Next x
            End If
        Next i
    Next j
    TenPp = .keys
    KqPp = .items
End With
With Sheets("Sheet2")
    .UsedRange.Clear
    .Range("A2").Resize(Dong, Cot) = Nguon
    .Range("A2").Offset(Dong, 1).Resize(1, Cot) = KqNv
    .Range("A2").Offset(Dong + 3).Resize(UBound(TenPp) + 1, 1) = WorksheetFunction.Transpose(TenPp)
    .Range("A2").Offset(Dong + 3, 1).Resize(UBound(TenPp) + 1, 1) = WorksheetFunction.Transpose(KqPp)
    .UsedRange.Columns.AutoFit
End With
End Sub
 
Bài này không nên viết code. Để tác giả lập lại cấu trúc dữ liệu đúng chuẩn rồi dùng công thức đơn thuần là được.
 
223403
đây là file mình muốn làm để tính năng suất của máy và mỗi nhân viên
cột đầu tiên là mã đơn hàng:
mình giải thích thêm 1 chút:
1 đơn hàng có thể được làm bởi nhiều phương pháp. mỗi phương pháp là 1 máy (mình có khoáng 30 chục phương pháp)
và có 10 bạn nhân viên
Nên mình lập một file excel để các bạn đó điền vô.
Mình đã mã hóa phương pháp bằng 2 kí tự như trên. Bạn nào làm phương pháp nào thì điền code phương pháp đó vô sau đó điền số lượng phía sau.
bình thường nếu mỗi bạn chỉ làm 1 phương pháp thì mình chỉ cần dùng hàm sum + hàm substitute là xong
Nhưng khó ở đây là 1 bạn trong cùng 1 đơn hàng có thể làm nhiều phương pháp
Nên mình không thể tính được. Mong anh em chỉ giáo hoặc có thể tạo 1 file excel kiểu khác cũng được
 

File đính kèm

  • TÍNH TỔNG SỐ TRONG CHUỖI VỚI NHIỀU ĐIỀU KIỆN.xlsx
    10.8 KB · Đọc: 15
View attachment 223403
đây là file mình muốn làm để tính năng suất của máy và mỗi nhân viên
cột đầu tiên là mã đơn hàng:
mình giải thích thêm 1 chút:
1 đơn hàng có thể được làm bởi nhiều phương pháp. mỗi phương pháp là 1 máy (mình có khoáng 30 chục phương pháp)
và có 10 bạn nhân viên
Nên mình lập một file excel để các bạn đó điền vô.
Mình đã mã hóa phương pháp bằng 2 kí tự như trên. Bạn nào làm phương pháp nào thì điền code phương pháp đó vô sau đó điền số lượng phía sau.
bình thường nếu mỗi bạn chỉ làm 1 phương pháp thì mình chỉ cần dùng hàm sum + hàm substitute là xong
Nhưng khó ở đây là 1 bạn trong cùng 1 đơn hàng có thể làm nhiều phương pháp
Nên mình không thể tính được. Mong anh em chỉ giáo hoặc có thể tạo 1 file excel kiểu khác cũng được
Quan trọng là file thực tế của bạn có giống thế này hay không.
Nếu bạn chốt mẫu bảng biểu thì sẽ code theo mẫu của bạn còn không chốt thì tùy do bạn.
 
Đúng luôn bạn vì mình đang tạo file này mà.
thực tế thì sẽ có nhiều dòng hơn. khoảng 400 dòng và 30 code phương pháp nhưng format thì giống
 
Đúng luôn bạn vì mình đang tạo file này mà.
thực tế thì sẽ có nhiều dòng hơn. khoảng 400 dòng và 30 code phương pháp nhưng format thì giống
Chạy thử code này, kết quả điền vào vùng màu vàng sheet1
Nếu điền kết quả vào vùng khác sẽ xử lý sau
Mã:
Sub Tong_()
Dim Nguon, Dong, Cot
Dim Tam
Dim TenNv, KqNv
Dim TenPp, KqPp
Dim Reg As Object
Dim i, j, k, x, t
Nguon = Sheet1.Range("A2").CurrentRegion
Dong = UBound(Nguon)
Cot = UBound(Nguon, 2)
ReDim TenNv(1 To 1, 1 To Cot)
ReDim KqNv(1 To 1, 1 To Cot)
Set Reg = CreateObject("VbScript.RegExp")
Reg.Global = True
Reg.Pattern = "[A-Z]+|\d+"
With CreateObject("Scripting.Dictionary")
    For j = 2 To Cot
        For i = 3 To Dong
            If Nguon(i, j) <> "" Then
                Set Tam = Reg.Execute(Nguon(i, j))
                For x = 0 To Tam.Count - 1 Step 2
                    t = Tam(x)
                    k = CLng(Tam(x + 1))
                    .Item(t) = .Item(t) + k
                    KqNv(1, j - 1) = KqNv(1, j - 1) + k
                Next x
            End If
        Next i
        TenNv(1, j - 1) = Nguon(2, j)
    Next j
    TenPp = .keys
    KqPp = .items
End With
With Sheet1
    .Range("I2").Resize(UBound(TenPp) + 1, 1).ClearContents
    .Range("I2").Resize(UBound(TenPp) + 1, 1) = WorksheetFunction.Transpose(TenPp)
    .Range("J2").Resize(UBound(KqPp) + 1, 1).ClearContents
    .Range("J2").Resize(UBound(KqPp) + 1, 1) = WorksheetFunction.Transpose(KqPp)
    .Range("H10").Resize(UBound(TenNv, 2), 1).ClearContents
    .Range("H10").Resize(UBound(TenNv, 2), 1) = WorksheetFunction.Transpose(TenNv)
    .Range("I10").Resize(UBound(KqNv, 2), 1).ClearContents
    .Range("I10").Resize(UBound(KqNv, 2), 1) = WorksheetFunction.Transpose(KqNv)
    .UsedRange.Columns.AutoFit
End With
End Sub
 
Lần chỉnh sửa cuối:
Cảm ơn báo CHAOQUAY rất nhiều!
Tối qua mình cố gắng ngồi đọc hiểu đoạn code của bạn nhưng vẫn chưa hiểu được
thôi thì bạn giúp mình thêm một chút nữa được không.
Mình đã chuẩn bị một file template hoàn chỉnh để làm.
Bạn giúp mình chỉnh lại code cho phù hợp giùm nha, Thanks

Giải thích template file:
Mình có 2 sheet: Non Gap, GAP : nhập liệu và tính toán giống y hệt
nhau chỉ là mình chia ra vì là 2 loại đơn hàng khác nhau
và 1 sheet Productivity: giúp tổng hợp productivity như trên. và mình có để trống để có thể thêm code vào nếu cần thiết
Bạn xem giùm mình nha
 

File đính kèm

  • TEMPLATE.xlsx
    20.1 KB · Đọc: 5
Giải thích template file:
Mình có 2 sheet: Non Gap, GAP : nhập liệu và tính toán giống y hệt
nhau chỉ là mình chia ra vì là 2 loại đơn hàng khác nhau
và 1 sheet Productivity: giúp tổng hợp productivity như trên. và mình có để trống để có thể thêm code vào nếu cần thiết
Viết "thí thí" Hàm bằng VBA, không dùng được thì thôi vậy.
 

File đính kèm

  • TEMPLATE.xlsm
    30.5 KB · Đọc: 14
Lần chỉnh sửa cuối:
CẢM ƠN BẠN BA TÊ RẤT NHIỀU.
ĐỂ MÌNH NGHIÊN CỨU THỬ CÓ GÌ KHÓ KHĂN SẼ HỎI LẠI BẠN NHA
 
Cảm ơn bạn vanthinh3101
Các bạn có thể giải thích hộ mình cách làm như thế nào không
 
Cảm ơn bạn vanthinh3101
Các bạn có thể giải thích hộ mình cách làm như thế nào không
Đây là hàm tự tạo, sử dụng VBA.
Nếu bạn chưa có kiến thức về VBA thì tôi không thể giải thích nổi.
Trước hết, bạn học cách sử dụng:
- Công thức tính tổng với điều kiện theo tên Method
PHP:
=SUM_Quantity_Method(Vùng chứa toàn bộ dữ liệu kết quả bán hàng;Tên Method)
- Công thức tính tổng với điều kiện theo tên Staff
PHP:
=SUM_Quantity_Staff(Vùng chứa toàn bộ dữ liệu kết quả bán hàng;Tên Staff)
Vùng chứa toàn bộ dữ liệu kết quả bán hàng phải có hàng đầu tiên chứa danh sách Tên Staff
Bạn xem lại file, tôi có đặt công thức sẵn rồi.
 
Web KT
Back
Top Bottom