Đến bạn chẳng biết nó quy luật thế nào thì sao viết công thức đây.Ít ra cũng phải giải thích chứ.Cá bác giúp em vụ này với ạ! em có cái định mức, mà phần công thức tính định lượng ( 2 cột đánh dấu đỏ) cứ phải nhập thủ công rất dễ sai. có cách nào nó tự nhập cho mình công thức tương ứng với từng mã nguyên liệu không?
Ý mình là mỗi lại nguyên liệu sẽ chỉ có 1 công thức tính riêng cho nó. khi mình lặp lại mã nguyên liệu đó nó sẽ tự động điền công thức tương ứng ở 2 cột định lượng.Đến bạn chẳng biết nó quy luật thế nào thì sao viết công thức đây.Ít ra cũng phải giải thích chứ.
Vậy bạn làm cái bảng chia tỷ lệ cho mã đó.Ứng với giá trị nào rồi dùng VLookup sang là được.Ý mình là mỗi lại nguyên liệu sẽ chỉ có 1 công thức tính riêng cho nó. khi mình lặp lại mã nguyên liệu đó nó sẽ tự động điền công thức tương ứng ở 2 cột định lượng.
Dùng VBA cho sự kiệnCá bác giúp em vụ này với ạ! em có cái định mức, mà phần công thức tính định lượng ( 2 cột đánh dấu đỏ) cứ phải nhập thủ công rất dễ sai. có cách nào nó tự nhập cho mình công thức tương ứng với từng mã nguyên liệu không?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, sRow As Long
Dim DonVi As String, TenNVL As String, Rng As Range
On Error Resume Next
Set sRng = Intersect(Range("O5:O600000"), Target)
If Not sRng Is Nothing Then
sRow = sRng.Rows.Count
For i = 1 To sRow
Set Rng = sRng(i, 1)
DonVi = Rng.Value
If UCase(DonVi) Like "CHI?C" Then
Rng.Offset(, 1) = 1
ElseIf UCase(DonVi) Like "KG" Then
TenNVL = Rng.Offset(, -1).Value
TenNVL = Mid(TenNVL, InStr(1, TenNVL, "~") + 1, Len(TenNVL)) & " "
Rng.Offset(, 1).FormulaR1C1 = "=1/" & CLng(Mid(TenNVL, 1, InStr(1, TenNVL, " ") - 1))
ElseIf UCase(DonVi) Like "M" Then
Rng.Offset(, 1).FormulaR1C1 = "=RC[-7]/1000"
ElseIf UCase(DonVi) Like "M2" Then
If Rng.Offset(, -4).Value = 0 Then
Rng.Offset(, 1).FormulaR1C1 = "=(RC[-8]/1000*RC[-7]/1000)"
Else
Rng.Offset(, 1).FormulaR1C1 = "=(RC[-8]/1000*RC[-7]/1000)/RC[-5]"
End If
Else
Rng.Offset(, 1) = Empty
End If
Next i
Else
Set sRng = Intersect(Range("R5:R600000"), Target)
If Not sRng Is Nothing Then
sRow = sRng.Rows.Count
For i = 1 To sRow
Set Rng = sRng(i, 1)
DonVi = Rng.Value
If UCase(DonVi) Like "CHI?C" Then
Rng.Offset(, 1).FormulaR1C1 = "=1*RC[-15]"
ElseIf UCase(DonVi) Like "CU?N" Then
Rng.Offset(, 1).FormulaR1C1 = "=RC[-15]/((INT(RC[1]/RC[-11])*INT(RC[2]/RC[-10])))"
ElseIf UCase(DonVi) Like "KG" Then
TenNVL = Rng.Offset(, -4).Value
TenNVL = Mid(TenNVL, InStr(1, TenNVL, "~") + 1, Len(TenNVL)) & " "
Rng.Offset(, 1).FormulaR1C1 = "=(1/" & CLng(Mid(TenNVL, 1, InStr(1, TenNVL, " ") - 1)) & ")*RC[-15]"
ElseIf UCase(DonVi) Like "M" Then
Rng.Offset(, 1).FormulaR1C1 = "=((RC[-15]/(INT(RC[1]/RC[-11])))*RC[-10]/1000)"
ElseIf UCase(DonVi) Like "T?M" Then
Rng.Offset(, 1).FormulaR1C1 = "=RC[-15]/RC[-8]/((INT(RC[1]/RC[-11])*INT(RC[2]/RC[-10])))"
ElseIf UCase(DonVi) Like "THANH" Then
Rng.Offset(, 1).FormulaR1C1 = "=RC[-15]/INT(RC[2]/RC[-10])"
Else
Rng.Offset(, 1) = Empty
End If
Next i
End If
End If
End Sub
Dùng VBA cho sự kiện
Khi thay đổi giá trị cột O và R code sẽ chạyMã:Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, sRow As Long Dim DonVi As String, TenNVL As String, Rng As Range On Error Resume Next Set sRng = Intersect(Range("O5:O600000"), Target) If Not sRng Is Nothing Then sRow = sRng.Rows.Count For i = 1 To sRow Set Rng = sRng(i, 1) DonVi = Rng.Value If UCase(DonVi) Like "CHI?C" Then Rng.Offset(, 1) = 1 ElseIf UCase(DonVi) Like "KG" Then TenNVL = Rng.Offset(, -1).Value TenNVL = Mid(TenNVL, InStr(1, TenNVL, "~") + 1, Len(TenNVL)) & " " Rng.Offset(, 1).FormulaR1C1 = "=1/" & CLng(Mid(TenNVL, 1, InStr(1, TenNVL, " ") - 1)) ElseIf UCase(DonVi) Like "M" Then Rng.Offset(, 1).FormulaR1C1 = "=RC[-7]/1000" ElseIf UCase(DonVi) Like "M2" Then If Rng.Offset(, -4).Value = 0 Then Rng.Offset(, 1).FormulaR1C1 = "=(RC[-8]/1000*RC[-7]/1000)" Else Rng.Offset(, 1).FormulaR1C1 = "=(RC[-8]/1000*RC[-7]/1000)/RC[-5]" End If Else Rng.Offset(, 1) = Empty End If Next i Else Set sRng = Intersect(Range("R5:R600000"), Target) If Not sRng Is Nothing Then sRow = sRng.Rows.Count For i = 1 To sRow Set Rng = sRng(i, 1) DonVi = Rng.Value If UCase(DonVi) Like "CHI?C" Then Rng.Offset(, 1).FormulaR1C1 = "=1*RC[-15]" ElseIf UCase(DonVi) Like "CU?N" Then Rng.Offset(, 1).FormulaR1C1 = "=RC[-15]/((INT(RC[1]/RC[-11])*INT(RC[2]/RC[-10])))" ElseIf UCase(DonVi) Like "KG" Then TenNVL = Rng.Offset(, -4).Value TenNVL = Mid(TenNVL, InStr(1, TenNVL, "~") + 1, Len(TenNVL)) & " " Rng.Offset(, 1).FormulaR1C1 = "=(1/" & CLng(Mid(TenNVL, 1, InStr(1, TenNVL, " ") - 1)) & ")*RC[-15]" ElseIf UCase(DonVi) Like "M" Then Rng.Offset(, 1).FormulaR1C1 = "=((RC[-15]/(INT(RC[1]/RC[-11])))*RC[-10]/1000)" ElseIf UCase(DonVi) Like "T?M" Then Rng.Offset(, 1).FormulaR1C1 = "=RC[-15]/RC[-8]/((INT(RC[1]/RC[-11])*INT(RC[2]/RC[-10])))" ElseIf UCase(DonVi) Like "THANH" Then Rng.Offset(, 1).FormulaR1C1 = "=RC[-15]/INT(RC[2]/RC[-10])" Else Rng.Offset(, 1) = Empty End If Next i End If End If End Sub
Bạn nhập kết quả mong muốn mới biết cách xử lýBác HieuCD có thể giúp em với mã nguyên liệu mà em đánh dấu đỏ? đơn vị KG chia nhiều trường hợp thì làm thế nào để áp dụng được ạ!
Bạn nhập kết quả mong muốn mới biết cách xử lý
Bác Hieu CD xem giùm em với ạ.hihi!Ơ! em quên mất. bác xem giúp em với! Thank bác!
Tự nhiên quên, để mình xem lại, có thể ngày mai sẽ làm cho bạnBác Hieu CD xem giùm em với ạ.hihi!
Các giá trị không tìm được mối liên hệ nên không viết code đượcBác Hieu CD xem giùm em với ạ.hihi!
Vậy có viết theo kiể thêm ký hiệu để nhận dạng hoặc cái/kg. Kg/m2 không bác?Các giá trị không tìm được mối liên hệ nên không viết code được
Cách tiếp cận theo đơn vị không ổn, cần xây dựng cách tính trong bảng mã NVL và dò theo bảng nầyVậy có viết theo kiể thêm ký hiệu để nhận dạng hoặc cái/kg. Kg/m2 không bác?