Tìm số lượng với các tiêu chuẩn liên quan với nhau

Liên hệ QC

Dapconmuoi1993

Thành viên mới
Tham gia
15/9/20
Bài viết
5
Được thích
4
Xin chào các pro, em có bài toán này trên excel mà vẫn chưa có lời giải.
Ví dụ trong các nhà kho có chứa hoa quả gồm cam quýt xoài táo….vv Trong đó có các Thùng + một số túi hoa quả + một ít quả rơi vãi trên sàn.
Trong mỗi Thùng, mỗi loại túi thì chứa các túi hoa quả theo tiêu chuẩn trên file.
Yêu cầu đặt ra là trong các nhà kho hiện tại có bao nhiêu quả? Liệu có phương án nào, công thức, addin hay VBA nào giải quyết nhanh đc không ạ?
Xin cảm ơn anh, chị!
 

File đính kèm

  • Bao nhieu.xlsx
    11.7 KB · Đọc: 15
Xin chào các pro, em có bài toán này trên excel mà vẫn chưa có lời giải.
Ví dụ trong các nhà kho có chứa hoa quả gồm cam quýt xoài táo….vv Trong đó có các Thùng + một số túi hoa quả + một ít quả rơi vãi trên sàn.
Trong mỗi Thùng, mỗi loại túi thì chứa các túi hoa quả theo tiêu chuẩn trên file.
Yêu cầu đặt ra là trong các nhà kho hiện tại có bao nhiêu quả? Liệu có phương án nào, công thức, addin hay VBA nào giải quyết nhanh đc không ạ?
Xin cảm ơn anh, chị!
Xin chào bạn thành viên mới toanh. Lần sau bạn đổi đoạn này "Xin chào các pro" lại thành:
"Xin chào mọi người"
hoặc "Xin chào các anh chị"
nhé!
Bài của bạn mình không biết giải, nhưng bạn có thể cho mình hỏi đây là bài toán gì không? Và ứng dụng của nó vào việc gì vậy bạn?
Kho 1 với Kho 2 là 2 bài toán độc lập hay nó có dính líu gì nhau không? Mình tách ra để giải quyết từng Kho hén!
 
Upvote 0
Xin chào bạn thành viên mới toanh. Lần sau bạn đổi đoạn này "Xin chào các pro" lại thành:
"Xin chào mọi người"
hoặc "Xin chào các anh chị"
nhé!
Bài của bạn mình không biết giải, nhưng bạn có thể cho mình hỏi đây là bài toán gì không? Và ứng dụng của nó vào việc gì vậy bạn?
Kho 1 với Kho 2 là 2 bài toán độc lập hay nó có dính líu gì nhau không? Mình tách ra để giải quyết từng Kho hén!
Xin cảm anh/chị Xuongrongdat đã nhắc nhở, lần sau mình sẽ lưu ý :D
Bài toán này thực chất là tìm ra định mức nhỏ nhất (nguyên vật liệu) của một sản phẩm đc sản xuất theo định mức (BOM) qua nhiều giai đoạn.
Ứng dụng trong quản trị sản xuất hoặc kế toán.
Cụ thể hơn, VD có Thành phẩm A đc sản xuất từ : Bán thành phẩm (hay có nơi gọi là nửa thành phẩm) B, C. Và các nguyên vật liệu A1, A2.
- BTP B thì đc tạo từ các NVL: B1, B2, B3 với định mức cố định.
- BTP C thì đc tạo từ các NVL: C1, C2 với định mức cố định.
Như vậy, thành phẩm A đc tạo ra từ các nguyên vật liệu là: A1, A2, B1, B2, B3, C1, C2 với định mức là bao nhiêu.
Từ đó có thể tính đc là sản xuất 1000 sp A thì cần tốn bao nhiêu NVL: A1, A2, B1, B2, B3, C1, C2
Bác thông cảm nếu em không diễnđạt tốt.
 
Upvote 0
@Dapconmuoi1993 : một lần nữa mình nhắc bạn, bạn đừng nên viết tắt hoặc viết tiếng Anh lửng lửng nha (pro, đc,...). Nên tôn trọng những anh chị chú bác là những người sẽ giúp bạn đó.
Cảm ơn bạn đã giải thích cặn kẽ. Bạn chờ các anh chị chú bác khác vào giúp nhé!

@hongtrang26 : bài này khó thiệt sự nè.
 
Upvote 0
Xin cảm anh/chị Xuongrongdat đã nhắc nhở, lần sau mình sẽ lưu ý :D
Bài toán này thực chất là tìm ra định mức nhỏ nhất (nguyên vật liệu) của một sản phẩm đc sản xuất theo định mức (BOM) qua nhiều giai đoạn.
Ứng dụng trong quản trị sản xuất hoặc kế toán.
Cụ thể hơn, VD có Thành phẩm A đc sản xuất từ : Bán thành phẩm (hay có nơi gọi là nửa thành phẩm) B, C. Và các nguyên vật liệu A1, A2.
- BTP B thì đc tạo từ các NVL: B1, B2, B3 với định mức cố định.
- BTP C thì đc tạo từ các NVL: C1, C2 với định mức cố định.
Như vậy, thành phẩm A đc tạo ra từ các nguyên vật liệu là: A1, A2, B1, B2, B3, C1, C2 với định mức là bao nhiêu.
Từ đó có thể tính đc là sản xuất 1000 sp A thì cần tốn bao nhiêu NVL: A1, A2, B1, B2, B3, C1, C2
Bác thông cảm nếu em không diễnđạt tốt.
Gởi file với ví dụ phù hợp với thực tế hơn
 
Upvote 0
Cái quan trọng đọc cái đề bài chẳng hiểu nổi chủ thớt muốn kết quả là thế nào, đưa bài toán thực tế và kết quả mong muốn như nào thì may ra còn hiểu được
 
Upvote 0
Xin chào các pro, em có bài toán này trên excel mà vẫn chưa có lời giải.
Ví dụ trong các nhà kho có chứa hoa quả gồm cam quýt xoài táo….vv Trong đó có các Thùng + một số túi hoa quả + một ít quả rơi vãi trên sàn.
Trong mỗi Thùng, mỗi loại túi thì chứa các túi hoa quả theo tiêu chuẩn trên file.
Yêu cầu đặt ra là trong các nhà kho hiện tại có bao nhiêu quả? Liệu có phương án nào, công thức, addin hay VBA nào giải quyết nhanh đc không ạ?
Xin cảm ơn anh, chị!
Đúng ra thì nên lập bảng tra và làm như vậy
 

File đính kèm

  • Bao nhieu.xlsx
    14.4 KB · Đọc: 9
Upvote 0
Xin chào các pro, em có bài toán này trên excel mà vẫn chưa có lời giải.
Ví dụ trong các nhà kho có chứa hoa quả gồm cam quýt xoài táo….vv Trong đó có các Thùng + một số túi hoa quả + một ít quả rơi vãi trên sàn.
Trong mỗi Thùng, mỗi loại túi thì chứa các túi hoa quả theo tiêu chuẩn trên file.
Yêu cầu đặt ra là trong các nhà kho hiện tại có bao nhiêu quả? Liệu có phương án nào, công thức, addin hay VBA nào giải quyết nhanh đc không ạ?
Xin cảm ơn anh, chị!
Bài này có vẻ là toán tổ hợp rất nhiều trường hợp, viết VBA còn cảm thấy cực, công thức khả năng không làm được!
 
Upvote 0
Bài này có vẻ là toán tổ hợp rất nhiều trường hợp, viết VBA còn cảm thấy cực, công thức khả năng không làm được!
Mấy phần mềm chuyên tính BOM và Fast Track (dự tính Semi-finished product / bán thành phẩm) nó còn phải có chuyên viên sử dụng.
Bảo Excel và VBA làm mà còn đòi hỏi "giải quyết nhanh". Diễu hơi xa.
 
Upvote 0
Về cơ bản, coi bán thành phẩm là 1 loại thành phẩm, đồng thời nó cũng là nguyên liệu.
Mình tạo bảng như sau:
Cột: Thành phẩm và bán thành phẩm
Dòng: Nguyên vật liệu cơ bản và Bán thành phẩm
Ví dụ kinh doanh cơm tấm. Có 2 loại cơm tấm, Loại 1 và loại 2
Các loại nguyên liệu sử dụng : Gạo, thịt, Tỏi ớt, Nước mắm nguyên chất, Nước, Nước mắm pha (Bán TP 1), Thịt nướng (Bán TP 2)
Bán TP 1 (Nước mắm pha) : Nguyên liệu: Tỏi ớt, Nước mắm nguyên chất, Nước
Bán TP 2: (Thịt nướng): Nguyên liệu: Thịt, Tỏi ớt, Nước mắm nguyên chất, Nước

Công thức tính tiêu hao của NL1 dùng cho TP1:

=SUMIF($D$4:$D$10,$L4,$G$4:$G$10)+
VLOOKUP($L4,$D$4:$J$10,6,0)*VLOOKUP($I$3,$D$4:$H$10,4,0)+
VLOOKUP($L4,$D$4:$J$10,7,0)*VLOOKUP($J$3,$D$4:$H$10,4,0)

Trong đó:
Dòng 1: Tính NVL dùng trực tiếp
Dòng 2: Tính NVL dùng cho BTP 1
Dòng 3: Tính NVL dùng cho BTP 2

Căn cứ vào đây bạn áp dụng vào thực tế của bạn nhé.
 

File đính kèm

  • BOM.xlsx
    19.2 KB · Đọc: 12
Upvote 0
Về cơ bản, coi bán thành phẩm là 1 loại thành phẩm, đồng thời nó cũng là nguyên liệu.
Mình tạo bảng như sau:
Cột: Thành phẩm và bán thành phẩm
Dòng: Nguyên vật liệu cơ bản và Bán thành phẩm
Ví dụ kinh doanh cơm tấm. Có 2 loại cơm tấm, Loại 1 và loại 2
Các loại nguyên liệu sử dụng : Gạo, thịt, Tỏi ớt, Nước mắm nguyên chất, Nước, Nước mắm pha (Bán TP 1), Thịt nướng (Bán TP 2)
Bán TP 1 (Nước mắm pha) : Nguyên liệu: Tỏi ớt, Nước mắm nguyên chất, Nước
Bán TP 2: (Thịt nướng): Nguyên liệu: Thịt, Tỏi ớt, Nước mắm nguyên chất, Nước

Công thức tính tiêu hao của NL1 dùng cho TP1:

=SUMIF($D$4:$D$10,$L4,$G$4:$G$10)+
VLOOKUP($L4,$D$4:$J$10,6,0)*VLOOKUP($I$3,$D$4:$H$10,4,0)+
VLOOKUP($L4,$D$4:$J$10,7,0)*VLOOKUP($J$3,$D$4:$H$10,4,0)

Trong đó:
Dòng 1: Tính NVL dùng trực tiếp
Dòng 2: Tính NVL dùng cho BTP 1
Dòng 3: Tính NVL dùng cho BTP 2

Căn cứ vào đây bạn áp dụng vào thực tế của bạn nhé.
File này bạn chỉ thiết kế bán thành phẩm 1 cấp, trong ví dụ của bạn chủ thread ít nhất 2 cấp (bán thành phẩm trong bán thành phẩm), nếu vậy data bạn sẽ thiết kế như thế nào ít nhất là 2 cấp trở lên
 
Upvote 0
Nếu gọi BTP-C1, BTP-C2, thì TP và BTP liệt kê theo cột
Các loại NVL và BTP-C1, BTP-C2 liệt kê theo dòng
Nơi giao nhau là số lượng sử dụng tương quan giữa 2 loại NVL,BTP và TP,BTP
VD: Nơi giao nhau giữa dòng BTP-C2 và cột BTP-C1 là số lượng sử dụng của BTP-C2 dùng để SX BTP-C1
 
Upvote 0
Cảm ơn bác đã quan tâm bài viết. Em sẽ lấy một ví dụ cụ thể về một sản phẩm được sản xuất theo nhiều giai đoạn ở file dưới đây.
Cái kết quả bạn ghi ra có đúng không sao chia thử tỷ lệ chẳng thấy liên quan gì nhỉ
 
Upvote 0
Có vẻ như tôi hiểu như thế này có đúng không. Nếu đúng thì tối về, tôi sẽ làm cho. Còn tôi hiểu sai thì chịu trận nhé.

Cơ bản là bạn muốn yêu cầu như sau đúng không. Để sản xuất ra 1 hoặc 1 triệu cái sản phẩm cuối tức là giai đoạn 3 (GĐ3), thì cần thống kê ra bao nhiêu nguyên liệu sơ cấp hay gọi là nguyên vật liệu (NVL). Và có thể khi chọn xem 1 bán thành phẩm (BTP) nào đấy nó cũng sẽ thống kê NVL cần có để sản xuất với 1 số lượng BTP theo yêu cầu nào đó.

Còn sản phẩm cuối cùng (GĐ3) thì được sản xuất từ NVL_i+ Bán thành phẩm thứ i (BTP_i)
Bán thành phẩm (BTP) được sản xuất từ các NVL_i.

Mình là dân kĩ thuật nên hiểu sơ sơ như vậy. Mọi người thông cảm giúp Em.
 
Upvote 0
Cảm ơn bác đã quan tâm bài viết. Em sẽ lấy một ví dụ cụ thể về một sản phẩm được sản xuất theo nhiều giai đoạn ở file dưới đây.
Code chỉ dùng cho 1 sản phẩm, chạy 3 giai đoạn, không có trường hợp bán thành phẩm dùng cho nhau
Mã:
Sub XYZ()
  Dim aSP(), aBTP(), aGD1(), Res(), Dic As Object
  Dim sRow&, i&, iKey
  
  aSP = Range("C11:F17").Value 'Thanh Pham
  aBTP = Range("C18:F38").Value 'Ban Thanh Pham
  
  Set Dic = CreateObject("scripting.dictionary")
  Set Dic2 = CreateObject("scripting.dictionary")
  
  For i = 1 To UBound(aSP)
    Dic.Item(aSP(i, 3)) = aSP(i, 4)
  Next i

  For i = 1 To UBound(aBTP)
    If aBTP(i, 1) <> Empty Then iKey = aBTP(i, 1)
    If Dic.exists(iKey) Then
      Dic2.Item(iKey) = ""
      Dic.Item(aBTP(i, 3)) = Dic.Item(aBTP(i, 3)) + Dic.Item(iKey) * aBTP(i, 4)
    End If
  Next i
  If Dic2.Count > 0 Then
    For Each iKey In Dic2.keys
      Dic.Remove iKey
    Next iKey
  End If
  
  ReDim Res(1 To Dic.Count, 1 To 2)
  For Each iKey In Dic.keys
    k = k + 1
    Res(k, 1) = iKey
    Res(k, 2) = Dic.Item(iKey)
  Next iKey
  Range("I12").Resize(UBound(Res), 2) = Res
End Sub
 

File đính kèm

  • BOM.xlsm
    23.1 KB · Đọc: 8
Lần chỉnh sửa cuối:
Upvote 0
Nhờ các bình luận và file của mọi người, em đã phần nào giải quyết được vấn đề; đồng thời cũng học hỏi được thêm nhiều thứ.
Xin cảm ơn tất cả anh/chị đã nhiệt tình hỗ trợ!
 
Upvote 0
Tối qua không thấy bạn phản hồi nên tôi không giám viết code. T phải đợi bạn phản hồi tôi mới làm code cho bạn được =)).

Ưu điểm của code này.
- Cơ bản code này chạy với n giai đoạn. dữ liệu đầu vào là cái bảng định mức tổng hợp. Điều kiện tra là cái mã thành phẩm hoặc bán thành phẩm bạn nhập vào ô "i12".
- Tự động cộng dồn các nguyên liệu đầu vào nếu chúng có trong ở các bán thành phẩm khác nhau.

Nhược điểrm của bảng này:
- Nó sẽ không sắp xếp các nguyên liệu đầu vào theo thứ tự từ 1 đến 29 đâu.

Luu ý bạn có thể thay các dữ liệu đầu vào trực tiếp vào code bên dưới những cái tôi bôi đậm để tương thích với từng cách bố trí của từng người. Mình có file đính kèm. bên trong có 1 function phụ.

Sub ExtractDataLucas()
Dim ImportData() As Variant
Dim CriticalValue As String
Dim ActivesheetLucas As String
Dim BTPorTP, BTPorTPDraft As String
Dim ScheduleAll() As String
Dim OutPutLucas() As Variant
Dim i, j, k, t As Double
ActivesheetLucas = Application.ActiveSheet.Name
'Define Input data
ImportData = ThisWorkbook.Worksheets(ActivesheetLucas).Range("C11:F50").Value
CriticalValue = ThisWorkbook.Worksheets(ActivesheetLucas).Range("I12").Value
For i = 1 To UBound(ImportData)
If ImportData(i, 1) = "" And i > 1 Then ImportData(i, 1) = ImportData(i - 1, 1)
Next i
k = 0
BTPorTP = BTPorTP & "*\" & CriticalValue & "*\"
Do
k = 0
ScheduleAll = VBA.Split(BTPorTP, "*\")
For i = 1 To UBound(ScheduleAll)
BTPorTPDraft = ""
If ScheduleAll(i) <> "" And IsNumeric(ScheduleAll(i)) = False Then
If ScheduleAll(i + 1) = "" Then
t = 1
ElseIf IsNumeric(ScheduleAll(i + 1)) = True Then
t = ScheduleAll(i + 1)
End If
For j = 1 To UBound(ImportData)
If ScheduleAll(i) = ImportData(j, 1) Then
BTPorTPDraft = BTPorTPDraft & ImportData(j, 3) & "*\" & VBA.CDbl(ImportData(j, 4)) * t & "*\"
k = 1
End If
Next j
If BTPorTPDraft <> "" Then
BTPorTP = VBA.Replace(BTPorTP, ScheduleAll(i) & "*\" & ScheduleAll(i + 1), BTPorTPDraft)
BTPorTP = VBA.Replace(BTPorTP, "*\*\", "*\")
End If
End If
Next i
Loop While k = 1
'Write data to activesheet
ScheduleAll = VBA.Split(BTPorTP, "*\")
t = Application.WorksheetFunction.RoundDown((UBound(ScheduleAll) + 3) / 2, 0) * 2
ReDim OutPutLucas(2, 4) As Variant
OutPutLucas = ReDimPreserve(OutPutLucas, t / 2, 3)
k = 1
For i = 1 To t - 2 Step 2
If ScheduleAll(i) <> "" Then
For j = i + 2 To t - 2 Step 2
If ScheduleAll(i) = ScheduleAll(j) And IsNumeric(ScheduleAll(j)) = False Then
ScheduleAll(i + 1) = VBA.CDbl(ScheduleAll(i + 1)) + VBA.CDbl(ScheduleAll(j + 1))
OutPutLucas(k, 2) = ScheduleAll(i)
OutPutLucas(k, 3) = ScheduleAll(i + 1)
ScheduleAll(j) = ScheduleAll(j + 1) = ""
Else
OutPutLucas(k, 2) = ScheduleAll(i)
OutPutLucas(k, 3) = ScheduleAll(i + 1)
End If
Next j
k = k + 1
End If
Next i
OutPutLucas(1, 1) = CriticalValue
ThisWorkbook.Worksheets(ActivesheetLucas).Range("I12:K" & 9 + t / 2).Value = OutPutLucas
End Sub
Bài đã được tự động gộp:

Good luck!
 

File đính kèm

  • BOM.xlsm
    38.4 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
Tối qua không thấy bạn phản hồi nên tôi không giám viết code. T phải đợi bạn phản hồi tôi mới làm code cho bạn được =)).

Ưu điểm của code này.
- Cơ bản code này chạy với n giai đoạn. dữ liệu đầu vào là cái bảng định mức tổng hợp. Điều kiện tra là cái mã thành phẩm hoặc bán thành phẩm bạn nhập vào ô "i12".
- Tự động cộng dồn các nguyên liệu đầu vào nếu chúng có trong ở các bán thành phẩm khác nhau.

Nhược điểrm của bảng này:
- Nó sẽ không sắp xếp các nguyên liệu đầu vào theo thứ tự từ 1 đến 29 đâu.

Luu ý bạn có thể thay các dữ liệu đầu vào trực tiếp vào code bên dưới những cái tôi bôi đậm để tương thích với từng cách bố trí của từng người. Mình có file đính kèm. bên trong có 1 function phụ.

Sub ExtractDataLucas()
Dim ImportData() As Variant
Dim CriticalValue As String
Dim ActivesheetLucas As String
Dim BTPorTP, BTPorTPDraft As String
Dim ScheduleAll() As String
Dim OutPutLucas() As Variant
Dim i, j, k, t As Double
ActivesheetLucas = Application.ActiveSheet.Name
'Define Input data
ImportData = ThisWorkbook.Worksheets(ActivesheetLucas).Range("C11:F50").Value
CriticalValue = ThisWorkbook.Worksheets(ActivesheetLucas).Range("I12").Value
For i = 1 To UBound(ImportData)
If ImportData(i, 1) = "" And i > 1 Then ImportData(i, 1) = ImportData(i - 1, 1)
Next i
k = 0
BTPorTP = BTPorTP & "*\" & CriticalValue & "*\"
Do
k = 0
ScheduleAll = VBA.Split(BTPorTP, "*\")
For i = 1 To UBound(ScheduleAll)
BTPorTPDraft = ""
If ScheduleAll(i) <> "" And IsNumeric(ScheduleAll(i)) = False Then
If ScheduleAll(i + 1) = "" Then
t = 1
ElseIf IsNumeric(ScheduleAll(i + 1)) = True Then
t = ScheduleAll(i + 1)
End If
For j = 1 To UBound(ImportData)
If ScheduleAll(i) = ImportData(j, 1) Then
BTPorTPDraft = BTPorTPDraft & ImportData(j, 3) & "*\" & VBA.CDbl(ImportData(j, 4)) * t & "*\"
k = 1
End If
Next j
If BTPorTPDraft <> "" Then
BTPorTP = VBA.Replace(BTPorTP, ScheduleAll(i) & "*\" & ScheduleAll(i + 1), BTPorTPDraft)
BTPorTP = VBA.Replace(BTPorTP, "*\*\", "*\")
End If
End If
Next i
Loop While k = 1
'Write data to activesheet
ScheduleAll = VBA.Split(BTPorTP, "*\")
t = Application.WorksheetFunction.RoundDown((UBound(ScheduleAll) + 3) / 2, 0) * 2
ReDim OutPutLucas(2, 4) As Variant
OutPutLucas = ReDimPreserve(OutPutLucas, t / 2, 3)
k = 1
For i = 1 To t - 2 Step 2
If ScheduleAll(i) <> "" Then
For j = i + 2 To t - 2 Step 2
If ScheduleAll(i) = ScheduleAll(j) And IsNumeric(ScheduleAll(j)) = False Then
ScheduleAll(i + 1) = VBA.CDbl(ScheduleAll(i + 1)) + VBA.CDbl(ScheduleAll(j + 1))
OutPutLucas(k, 2) = ScheduleAll(i)
OutPutLucas(k, 3) = ScheduleAll(i + 1)
ScheduleAll(j) = ScheduleAll(j + 1) = ""
Else
OutPutLucas(k, 2) = ScheduleAll(i)
OutPutLucas(k, 3) = ScheduleAll(i + 1)
End If
Next j
k = k + 1
End If
Next i
OutPutLucas(1, 1) = CriticalValue
ThisWorkbook.Worksheets(ActivesheetLucas).Range("I12:K" & 9 + t / 2).Value = OutPutLucas
End Sub
Bài đã được tự động gộp:

Good luck!
Quá tuyệt, chân thành cảm ơn sự nhiệt tình của bác!
 
Upvote 0
Web KT
Back
Top Bottom