- Tham gia
- 3/7/07
- Bài viết
- 4,946
- Được thích
- 23,213
- Nghề nghiệp
- Dạy đàn piano
Do yêu cầu công việc, khi nhập xuất gạch, tôi phải làm những công đoạn là tính số thùng và số viên dựa theo số m2 (hoặc số thùng, tùy hãng sản xuất quy định). Nên tôi đã làm ra những công thức sau để tính.
Hàm tính số thùng và số viên dựa theo số lượng (SOLUONG):
+ DVT: đơn vị tính để nhập và xuất: m2 & thùng
+ KT: kích thước gạch: 20x25, 30x30, 40x40, v.v...
+ TV: quy cách đóng gói (số viên trong 1 thùng): 11 viên/ thùng, 20 viên/thùng, v.v...
+ TV: dòng viết tắt (Vd: 5T+7V)
Thiết nghĩ chuyện này không chỉ tôi mà những ai từng kinh doanh gạch men rất cần đến, vì khi người ta mua thì nói là mua mét (m2), nhưng vào kho thì chỉ đếm toàn là thùng và viên lẻ... Giúp tôi cũng là giúp cho cả làng vậy.
Đa tạ.
Hàm tính số thùng và số viên dựa theo số lượng (SOLUONG):
+ DVT: đơn vị tính để nhập và xuất: m2 & thùng
+ KT: kích thước gạch: 20x25, 30x30, 40x40, v.v...
+ TV: quy cách đóng gói (số viên trong 1 thùng): 11 viên/ thùng, 20 viên/thùng, v.v...
Public Function Thungvien(SOLUONG, DVT, KT, TV)
If DVT = "m2" Then
A = SOLUONG / DIENTICH(KT)
ElseIf Left(DVT, 2) = "th" Then 'DVT = thùng
A = SOLUONG * TV
End If
XTHUNG = Int(A \ TV)
XVIEN = A - XTHUNG * TV
If XVIEN - Int(A - XTHUNG * TV) > 0.5 Then 'gạch thì chắc chắn là phải tính nguyên viên
XVIEN = Int(A - XTHUNG * TV) + 1
Else
XVIEN = Int(A - XTHUNG * TV)
End If
If XTHUNG = 0 And XVIEN <> 0 Then
Thungvien = XVIEN & " viên"
ElseIf XTHUNG <> 0 And XVIEN = 0 Then
Thungvien = XTHUNG & " thùng"
ElseIf XTHUNG = 0 And XVIEN = 0 Then
Thungvien = ""
Else
Thungvien = XTHUNG & " thùng + " & XVIEN & " viên"
End If
End Function
Trong đó có hàm tính diện tích (dựa theo kích thước):If DVT = "m2" Then
A = SOLUONG / DIENTICH(KT)
ElseIf Left(DVT, 2) = "th" Then 'DVT = thùng
A = SOLUONG * TV
End If
XTHUNG = Int(A \ TV)
XVIEN = A - XTHUNG * TV
If XVIEN - Int(A - XTHUNG * TV) > 0.5 Then 'gạch thì chắc chắn là phải tính nguyên viên
XVIEN = Int(A - XTHUNG * TV) + 1
Else
XVIEN = Int(A - XTHUNG * TV)
End If
If XTHUNG = 0 And XVIEN <> 0 Then
Thungvien = XVIEN & " viên"
ElseIf XTHUNG <> 0 And XVIEN = 0 Then
Thungvien = XTHUNG & " thùng"
ElseIf XTHUNG = 0 And XVIEN = 0 Then
Thungvien = ""
Else
Thungvien = XTHUNG & " thùng + " & XVIEN & " viên"
End If
End Function
Public Function DIENTICH(A)
Dim B As String
B = Len(A)
If B = 3 Then
DIENTICH = Left(A, 1) * Right(A, 1) * 0.0001
ElseIf B = 4 Then
DIENTICH = Left(A, 1) * Right(A, 2) * 0.0001
ElseIf B = 5 Then
DIENTICH = Left(A, 2) * Right(A, 2) * 0.0001
ElseIf B = 7 Then
DIENTICH = Left(A, 4) * Right(A, 2) * 0.0001
Else
DIENTICH = Left(A, 4) * Right(A, 4) * 0.0001
End If
End Function
Rồi bây giờ phải làm ngược lại, dựa vào số thùng, số viên lẻ (ngoài thùng), số viên trong mỗi thùng và kích thước của gạch mà tính ra số m2:Dim B As String
B = Len(A)
If B = 3 Then
DIENTICH = Left(A, 1) * Right(A, 1) * 0.0001
ElseIf B = 4 Then
DIENTICH = Left(A, 1) * Right(A, 2) * 0.0001
ElseIf B = 5 Then
DIENTICH = Left(A, 2) * Right(A, 2) * 0.0001
ElseIf B = 7 Then
DIENTICH = Left(A, 4) * Right(A, 2) * 0.0001
Else
DIENTICH = Left(A, 4) * Right(A, 4) * 0.0001
End If
End Function
Public Function MET(Sothung, Sovien, Sovientrong1thung, Kichthuoc)
MET = (Sothung * Sovientrong1thung + Sovien) * DIENTICH(Kichthuoc)
End Function
Trong đó, để tính ra số thùng (tham số giống hàm Thungvien ở đầu bài):MET = (Sothung * Sovientrong1thung + Sovien) * DIENTICH(Kichthuoc)
End Function
Public Function Sothung(SOLUONG, DVT, KT, TV)
If DVT = "m2" Then
A = SOLUONG / DIENTICH(KT)
ElseIf Left(DVT, 2) = "th" Then
A = SOLUONG * TV
End If
XTHUNG = Int(A \ TV)
If XTHUNG = 0 Then
Sothung = 0
Else: Sothung = XTHUNG
End If
End Function
tính số viên:If DVT = "m2" Then
A = SOLUONG / DIENTICH(KT)
ElseIf Left(DVT, 2) = "th" Then
A = SOLUONG * TV
End If
XTHUNG = Int(A \ TV)
If XTHUNG = 0 Then
Sothung = 0
Else: Sothung = XTHUNG
End If
End Function
Public Function Sovien(SOLUONG, DVT, KT, TV)
If DVT = "m2" Then
A = SOLUONG / DIENTICH(KT)
ElseIf Left(DVT, 2) = "th" Then
A = SOLUONG * TV
End If
XTHUNG = Int(A \ TV)
XVIEN = A - XTHUNG * TV
If XVIEN - Int(A - XTHUNG * TV) > 0.5 Then
XVIEN = Int(A - XTHUNG * TV) + 1
Else
XVIEN = Int(A - XTHUNG * TV)
End If
If XVIEN <> 0 Then
Sovien = XVIEN
ElseIf XVIEN = 0 Then
Sovien = 0
End If
End Function
Và 2 hàm sau đây để trích ra số thùng và số viên khi viết tắt (Vd: 5 thùng + 7 viên = 5T+7V): If DVT = "m2" Then
A = SOLUONG / DIENTICH(KT)
ElseIf Left(DVT, 2) = "th" Then
A = SOLUONG * TV
End If
XTHUNG = Int(A \ TV)
XVIEN = A - XTHUNG * TV
If XVIEN - Int(A - XTHUNG * TV) > 0.5 Then
XVIEN = Int(A - XTHUNG * TV) + 1
Else
XVIEN = Int(A - XTHUNG * TV)
End If
If XVIEN <> 0 Then
Sovien = XVIEN
ElseIf XVIEN = 0 Then
Sovien = 0
End If
End Function
+ TV: dòng viết tắt (Vd: 5T+7V)
Public Function THUNG(TV)
A = Len(TV)
If Right(UCase(TV), 1) = "T" And A = 2 Then
THUNG = Left(TV, 1)
ElseIf Right(UCase(TV), 1) = "T" And A = 3 Then
THUNG = Left(TV, 2)
ElseIf Right(UCase(TV), 1) = "T" And A = 4 Then
THUNG = Left(TV, 3)
ElseIf Right(UCase(TV), 1) = "T" And A = 5 Then
THUNG = Left(TV, 4)
ElseIf Right(UCase(TV), 1) = "V" And A = 5 And Mid(UCase(TV), 2, 1) = "T" Then
THUNG = Left(TV, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 6 And Mid(UCase(TV), 2, 1) = "T" Then
THUNG = Left(TV, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 6 And Mid(UCase(TV), 3, 1) = "T" Then
THUNG = Left(TV, 2)
ElseIf Right(UCase(TV), 1) = "V" And A = 7 And Mid(UCase(TV), 3, 1) = "T" Then
THUNG = Left(TV, 2)
ElseIf Right(UCase(TV), 1) = "V" And A = 7 And Mid(UCase(TV), 4, 1) = "T" Then
THUNG = Left(TV, 3)
ElseIf Right(UCase(TV), 1) = "V" And A = 8 Then
THUNG = Left(TV, 3)
Else
THUNG = 0
End If
End Function
Public Function VIEN(TV)
A = Len(TV)
If Right(UCase(TV), 1) = "V" And A = 2 Then
VIEN = Left(TV, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 3 Then
VIEN = Left(TV, 2)
ElseIf Right(UCase(TV), 1) = "V" And A = 4 Then
VIEN = Left(TV, 3)
ElseIf Right(UCase(TV), 1) = "V" And A = 5 And Mid(UCase(TV), 2, 1) = "T" Then
VIEN = Mid(TV, 4, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 5 And Mid(UCase(TV), 2, 1) <> "T" Then
VIEN = Left(TV, 4)
ElseIf Right(UCase(TV), 1) = "V" And A = 6 And Mid(UCase(TV), 2, 1) = "T" Then
VIEN = Mid(TV, 4, 2)
ElseIf Right(UCase(TV), 1) = "V" And A = 6 And Mid(UCase(TV), 3, 1) = "T" Then
VIEN = Mid(TV, 5, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 7 And Mid(UCase(TV), 3, 1) = "T" Then
VIEN = Mid(TV, 5, 2)
ElseIf Right(UCase(TV), 1) = "V" And A = 7 And Mid(UCase(TV), 4, 1) = "T" Then
VIEN = Mid(TV, 6, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 8 Then
VIEN = Mid(TV, 6, 2)
Else
VIEN = 0
End If
End Function
Dù là "tác giả" nhưng tôi cảm thấy nó dài dài làm sao đấy. Mang ra diễn đàn, mong các bác mổ xẻ nó và nếu được thì rút gọn dùm. A = Len(TV)
If Right(UCase(TV), 1) = "T" And A = 2 Then
THUNG = Left(TV, 1)
ElseIf Right(UCase(TV), 1) = "T" And A = 3 Then
THUNG = Left(TV, 2)
ElseIf Right(UCase(TV), 1) = "T" And A = 4 Then
THUNG = Left(TV, 3)
ElseIf Right(UCase(TV), 1) = "T" And A = 5 Then
THUNG = Left(TV, 4)
ElseIf Right(UCase(TV), 1) = "V" And A = 5 And Mid(UCase(TV), 2, 1) = "T" Then
THUNG = Left(TV, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 6 And Mid(UCase(TV), 2, 1) = "T" Then
THUNG = Left(TV, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 6 And Mid(UCase(TV), 3, 1) = "T" Then
THUNG = Left(TV, 2)
ElseIf Right(UCase(TV), 1) = "V" And A = 7 And Mid(UCase(TV), 3, 1) = "T" Then
THUNG = Left(TV, 2)
ElseIf Right(UCase(TV), 1) = "V" And A = 7 And Mid(UCase(TV), 4, 1) = "T" Then
THUNG = Left(TV, 3)
ElseIf Right(UCase(TV), 1) = "V" And A = 8 Then
THUNG = Left(TV, 3)
Else
THUNG = 0
End If
End Function
Public Function VIEN(TV)
A = Len(TV)
If Right(UCase(TV), 1) = "V" And A = 2 Then
VIEN = Left(TV, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 3 Then
VIEN = Left(TV, 2)
ElseIf Right(UCase(TV), 1) = "V" And A = 4 Then
VIEN = Left(TV, 3)
ElseIf Right(UCase(TV), 1) = "V" And A = 5 And Mid(UCase(TV), 2, 1) = "T" Then
VIEN = Mid(TV, 4, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 5 And Mid(UCase(TV), 2, 1) <> "T" Then
VIEN = Left(TV, 4)
ElseIf Right(UCase(TV), 1) = "V" And A = 6 And Mid(UCase(TV), 2, 1) = "T" Then
VIEN = Mid(TV, 4, 2)
ElseIf Right(UCase(TV), 1) = "V" And A = 6 And Mid(UCase(TV), 3, 1) = "T" Then
VIEN = Mid(TV, 5, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 7 And Mid(UCase(TV), 3, 1) = "T" Then
VIEN = Mid(TV, 5, 2)
ElseIf Right(UCase(TV), 1) = "V" And A = 7 And Mid(UCase(TV), 4, 1) = "T" Then
VIEN = Mid(TV, 6, 1)
ElseIf Right(UCase(TV), 1) = "V" And A = 8 Then
VIEN = Mid(TV, 6, 2)
Else
VIEN = 0
End If
End Function
Thiết nghĩ chuyện này không chỉ tôi mà những ai từng kinh doanh gạch men rất cần đến, vì khi người ta mua thì nói là mua mét (m2), nhưng vào kho thì chỉ đếm toàn là thùng và viên lẻ... Giúp tôi cũng là giúp cho cả làng vậy.
Đa tạ.