Thay đổi nội dung của ô theo điều kiện

Liên hệ QC

Thuy.Vuong

Thành viên mới
Tham gia
25/12/21
Bài viết
24
Được thích
0
Giới tính
Nữ
Em chào anh chị !
Em có một file nguyên liệu muốn thay đổi nội dung khi điều kiện tính tổng >=75

Bước 1 Tính tổng của cột G theo điều kiện (các nguyên liệu ở cột B có cột D =003 và Cột I = CM)
Bước 2 xét tổng vừa tính mà >=75 thì chuyển chữ CM ở cột I trong vùng điều kiện vừa tính tổng có giá trị lớn nhất ở cột G thành CT
Bước 3 Mỗi lần chuyển từ CM thành CT sẽ tính lại tổng ở cột G theo điều kiện (các nguyên liệu ở cột B có cột D =003 và Cột I = CM) tức là quay lại bước một
Nếu tổng vẫn >= 75 thì tiếp tục chuyển CM thành CT tức là làm tiếp bước 2, chuyển cho đến khi nào tổng < 75 thì dừng.
Ví Dụ
Bước 1 Tính tổng ở cột G có các nguyên liệu ở cột B (theo điều kiện cột D=003, cột I = CM) bằng 267.40
Bước 2 xét tổng vừa tính là 267.40 >=75 thì chuyển chữ CM ở ô I15 sang CT vì G15 có giá trị cao nhất trong vùng vừa tính tổng là 187.43
Bước 3 tính lại tổng ở cột G theo điều kiện (các nguyên liệu ở cột B có cột D =003 và Cột I = CM) lúc này sẽ bằng 79.97
Tổng vừa tính lại vẫn >=75 cho nên tiếp tục chuyển chữ CM ở ô I 19 sang CT vì G19 có giá trị 25.41 là số cao nhất trong vùng vừa tính tổng.
Tiếp tục tính lại tổng ở cột G theo điều kiện (các nguyên liệu ở cột B có cột D =003 và Cột I = CM) lúc này 54.56 <75 nên không cần chuyển chữ CM thành CT nữa.

Trước khi làm các bước trên em dùng công thức để thiết lập các điều kiện cho các nguyên liệu để ra được CM và CT, nhưng đến phần tính tổng như em vừa nói để thay đổi CM thành CT thì em ngồi mãi cũng không thể hình dùng cách nào ghép được vào công thức kia, vì vậy em rất mong anh chị có thể giúp em viết code hay dùng công thức để ra được kết quả không ạ, em cám ơn anh chị rất nhiều.

Mã:
=IF(G13<=0,"",IF(OR(B13="Vitamin A",B13="Vitamin B1",B13="Tixosil 38",B13="Ethoxyquin",B13="Luprosil Salt",B13="Biotin",B13="Inositol",B13="Crom picolinate(Cr)",B13="MgSO4(Mg)"),"CT",IF(AND(G13<=0.8,OR(D13="003",D13="004")),"CT","CM")))
 

File đính kèm

  • nguyen lieu.xlsb
    43.9 KB · Đọc: 11
Em chào anh chị !
Em có một file nguyên liệu muốn thay đổi nội dung khi điều kiện tính tổng >=75

Bước 1 Tính tổng của cột G theo điều kiện (các nguyên liệu ở cột B có cột D =003 và Cột I = CM)
Bước 2 xét tổng vừa tính mà >=75 thì chuyển chữ CM ở cột I trong vùng điều kiện vừa tính tổng có giá trị lớn nhất ở cột G thành CT
Bước 3 Mỗi lần chuyển từ CM thành CT sẽ tính lại tổng ở cột G theo điều kiện (các nguyên liệu ở cột B có cột D =003 và Cột I = CM) tức là quay lại bước một
Nếu tổng vẫn >= 75 thì tiếp tục chuyển CM thành CT tức là làm tiếp bước 2, chuyển cho đến khi nào tổng < 75 thì dừng.
Ví Dụ
Bước 1 Tính tổng ở cột G có các nguyên liệu ở cột B (theo điều kiện cột D=003, cột I = CM) bằng 267.40
Bước 2 xét tổng vừa tính là 267.40 >=75 thì chuyển chữ CM ở ô I15 sang CT vì G15 có giá trị cao nhất trong vùng vừa tính tổng là 187.43
Bước 3 tính lại tổng ở cột G theo điều kiện (các nguyên liệu ở cột B có cột D =003 và Cột I = CM) lúc này sẽ bằng 79.97
Tổng vừa tính lại vẫn >=75 cho nên tiếp tục chuyển chữ CM ở ô I 19 sang CT vì G19 có giá trị 25.41 là số cao nhất trong vùng vừa tính tổng.
Tiếp tục tính lại tổng ở cột G theo điều kiện (các nguyên liệu ở cột B có cột D =003 và Cột I = CM) lúc này 54.56 <75 nên không cần chuyển chữ CM thành CT nữa.

Trước khi làm các bước trên em dùng công thức để thiết lập các điều kiện cho các nguyên liệu để ra được CM và CT, nhưng đến phần tính tổng như em vừa nói để thay đổi CM thành CT thì em ngồi mãi cũng không thể hình dùng cách nào ghép được vào công thức kia, vì vậy em rất mong anh chị có thể giúp em viết code hay dùng công thức để ra được kết quả không ạ, em cám ơn anh chị rất nhiều.

Mã:
=IF(G13<=0,"",IF(OR(B13="Vitamin A",B13="Vitamin B1",B13="Tixosil 38",B13="Ethoxyquin",B13="Luprosil Salt",B13="Biotin",B13="Inositol",B13="Crom picolinate(Cr)",B13="MgSO4(Mg)"),"CT",IF(AND(G13<=0.8,OR(D13="003",D13="004")),"CT","CM")))
Chạy sub
Mã:
Sub ABC()
  Dim rng As Range, res As Range, sRow&, i&, ik&, tong#, iMax#
 
  With Sheets("LENH_SAN_XUAT")
    Set rng = .Range("D13:G42")
    sRow = rng.Rows.Count
    Set res = .Range("I13").Resize(sRow)
  End With
  Do
    tong = 0: iMax = 0
    For i = 1 To sRow
      If CStr(rng(i, 1).Value) = "003" Then
        If res(i, 1).Value = "CM" Then
          tong = tong + rng(i, 4)
          If iMax < rng(i, 4) Then
            iMax = rng(i, 4)
            ik = i
          End If
        End If
      End If
    Next i
    If tong >= 75 Then res(ik, 1) = "CT"
  Loop Until tong < 75
End Sub
 
Upvote 0
Chạy sub
Mã:
Sub ABC()
  Dim rng As Range, res As Range, sRow&, i&, ik&, tong#, iMax#
 
  With Sheets("LENH_SAN_XUAT")
    Set rng = .Range("D13:G42")
    sRow = rng.Rows.Count
    Set res = .Range("I13").Resize(sRow)
  End With
  Do
    tong = 0: iMax = 0
    For i = 1 To sRow
      If CStr(rng(i, 1).Value) = "003" Then
        If res(i, 1).Value = "CM" Then
          tong = tong + rng(i, 4)
          If iMax < rng(i, 4) Then
            iMax = rng(i, 4)
            ik = i
          End If
        End If
      End If
    Next i
    If tong >= 75 Then res(ik, 1) = "CT"
  Loop Until tong < 75
End Sub
Em cám ơn a HieuCD nhé, code này chạy được rồi, nhưng lại gặp vấn đề sẽ mất công thức ở cột I, A có thể chạy code làm sao vẫn giữ được công thức hoặc chuyển công thức em viết ở cột I thành code được không ạ vì khi giá trị của cột G thay đổi thì giá trị CM và CT ở cột I cũng sẽ được thiết lập lại sau đó mới tính tổng của cột G theo điều kiện cột D= 003 và cột I = CM và và xét điều kiện >=75.
 
Lần chỉnh sửa cuối:
Upvote 0
Em cám ơn a HieuCD nhé, code này chạy được rồi, nhưng lại gặp vấn đề sẽ mất công thức ở cột I, A có thể chạy code làm sao vẫn giữ được công thức hoặc chuyển công thức em viết ở cột I thành code được không ạ vì khi giá trị của cột G thay đổi thì giá trị CM và CT ở cột I cũng sẽ được thiết lập lại sau đó mới tính tổng của cột G theo điều kiện cột D= 003 và cột I = CM và và xét điều kiện >=75.
Gán công thức vào cột I
Mã:
Sub ABC()
  Dim rng As Range, res As Range, sRow&, i&, ik&, tong#, iMax#
 
  With Sheets("LENH_SAN_XUAT")
    Set rng = .Range("D13:G42")
    sRow = rng.Rows.Count
    Set res = .Range("I13").Resize(sRow)
    res.FormulaR1C1 = _
        "=IF(RC[-2]<=0,"""",IF(OR(RC[-7]=""Vitamin A"",RC[-7]=""Vitamin B1"",RC[-7]=""Tixosil 38"",RC[-7]=""Ethoxyquin"",RC[-7]=""Luprosil Salt"",RC[-7]=""Biotin"",RC[-7]=""Inositol"",RC[-7]=""Crom picolinate(Cr)"",RC[-7]=""MgSO4(Mg)""),""CT"",IF(AND(RC[-2]<=0.8,OR(RC[-5]=""003"",RC[-5]=""004"")),""CT"",""CM"")))"
  End With
  Do
    tong = 0: iMax = 0
    For i = 1 To sRow
      If CStr(rng(i, 1).Value) = "003" Then
        If res(i, 1).Value = "CM" Then
          tong = tong + rng(i, 4)
          If iMax < rng(i, 4) Then
            iMax = rng(i, 4)
            ik = i
          End If
        End If
      End If
    Next i
    If tong >= 75 Then res(ik, 1) = "CT"
  Loop Until tong < 75
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom