Tự động điền công thức tương ứng với mã nguyên liệu

Liên hệ QC

namdoi

Thành viên mới
Tham gia
18/10/18
Bài viết
27
Được thích
0
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?
 

File đính kèm

  • ĐỊNH MỨC TÍNH NGUYÊN VẬT LIỆU.xlsx
    37.9 KB · Đọc: 31
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?
Đế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ứ.
 
Đế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ứ.
Ý 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.
 
Theo ý kiến của mình thì bạn phải tự phân loại theo mã hàng và công thức trước, ví dụ có 1000 mã NL nhưng chỉ áp dụng 5 công thức thì được. Chứ 1000 mã NL ứng với 1000 công thức khác nhau hoàn toàn thì cứ mỗi mã mới lại có Công thức mới. Không khả thi cho việc sử dụng excel hay cả VBA đâu bạn.
Trong trường hợp bạn 1000 mã NL và 5 Công thức thì. sẽ tạo thêm cột để phân loại mã NL liệu dạng sử dụng công thức nào. Sau đó mới tính tới việc sử dụng VBA hoặc Công thức IF.
 
Ý 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.
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.
 
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?
Dùng VBA cho sự kiện
Mã:
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
Khi thay đổi giá trị cột O và R code sẽ chạy
 

File đính kèm

  • ĐỊNH MỨC TÍNH NGUYÊN VẬT LIỆU.xlsm
    43.1 KB · Đọc: 25
cách làm của Bác rất hay vậy mà bấy lâu nay mình không biết. đa tạ! đa tạ!!!
 
Dùng VBA cho sự kiện
Mã:
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
Khi thay đổi giá trị cột O và R code sẽ chạy

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 ạ!
 

File đính kèm

  • ĐỊNH MỨC TÍNH NGUYÊN VẬT LIỆU.xlsm
    45.2 KB · Đọc: 4
  • Untitled.png
    Untitled.png
    244.5 KB · Đọc: 7
Web KT
Back
Top Bottom