Sắp xếp lại giá trị và phân loại theo điều kiện

Liên hệ QC

AnhNQT

Thành viên chính thức
Tham gia
6/11/18
Bài viết
61
Được thích
5
Giới tính
Nam
Nhờ các bác giúp em VBA với ạ! Em cảm ơn!

1. Sắp xếp lại giá trị ở cột F G H theo thứ tự từ lớn tới nhỏ: so sánh giữa 3 giá trị F G và H và sắp xếp lại lần lượt lớn nhất là F > G > H.
2. So sánh giá trị ở cột F G H với điều kiện:
Nếu F <= 55, G <= 50 và H <= 35 thì ra kết quả cột J là "OK"
Còn nếu 1 trong 3 giá trị (F > 55 hoặc G > 50 hoặc H > 35) thì ra kết quả cột J là "NOK".
3. Phân loại theo điều kiện (sheet "condition"):
Nếu L <=40 và W <=40 và H <= 20 và GW <= 6 thì ra kết quả cột K là "USE"
Nếu 40 < L <=50 và W <=35 và 20 < H <= 23 và GW <=8 thì ra kết quả cột K là "OHL"
Nếu 50 < L <=55 và 35 < W <= 50 và 20 < H <= 35 và GW <= 18 thì ra kết quả cột K là "ZOB"
Nếu 50 < L <=55 và 35 < W <= 50 và 20 < H <= 35 và 18 < GW <= 23 thì ra kết quả cột K là "ZOC"
Còn lại các trường hợp mà không thỏa mãn 4 điều kiện trên thì ra giá trị "other"
 

File đính kèm

  • Check PKL.xlsm
    65.6 KB · Đọc: 8
Lần chỉnh sửa cuối:
1. Sắp xếp lại giá trị ở cột F G H theo thứ tự từ lớn tới nhỏ
Mình record macro custom Sort theo 3 cột đó là được.

2. So sánh giá trị ở cột F G H với điều kiện:
Nếu F <= 55, G <= 50 và H <= 35 thì ra kết quả cột J là "OK"
Còn nếu 1 trong 3 giá trị (F > 55 hoặc G > 50 hoặc H > 35) thì ra kết quả cột J là "NOK".
Chép bảng dữ liệu vào 1 mảng.
Function CompareFGH(byval mang as variant, byval irow as long) as String
'mang: mảng dữ liệu ở cột F:H
'irow: chỉ số dòng dữ liệu trong biến mang.
CompareFGH = "NOK"
IF mang(irow, 1) <= 55 Then
If mang(irow,2) <= 50 Then
If mang(irow,3) <= 35 Then
CompareFGH = "OK"
Exit function
End if
End if
End if
End Function
'Ap dụng:
Redim mangSS(1 to ubound(mang,1), 1 to 1)
For i=1 to ubound(mang,1)
mangSS = CompareFGH(mang, i)
Next i
Sheet1.Range("J2").Resize(ubound(mang,1),1).value = mangSS

---
Ảnh a va ta đẹp quá. Bữa nào cháu nhớn đi học, đem in vài chục cái ảnh rải cổng trường khoe chơi chơi hông?
 
Upvote 0
Nhờ các bác giúp em VBA với ạ! Em cảm ơn!

1. Sắp xếp lại giá trị ở cột F G H theo thứ tự từ lớn tới nhỏ
2. So sánh giá trị ở cột F G H với điều kiện:
Nếu F <= 55, G <= 50 và H <= 35 thì ra kết quả cột J là "OK"
Còn nếu 1 trong 3 giá trị (F > 55 hoặc G > 50 hoặc H > 35) thì ra kết quả cột J là "NOK".
3. Phân loại theo điều kiện (sheet "condition"):
Nếu L <=40 và W <=40 và H <= 20 và GW <= 6 thì ra kết quả cột K là "USE"
Nếu 40 < L <=50 và 40 < W <=35 và 20 < H <= 23 và GW <=8 thì ra kết quả cột K là "OHL"
Nếu 50 < L <=55 và 35 < W <= 50 và 20 < H <= 35 và GW <= 18 thì ra kết quả cột K là "ZOB"
Nếu 50 < L <=55 và 35 < W <= 50 và 20 < H <= 35 và 18 < GW <= 23 thì ra kết quả cột K là "ZOC"
Còn lại các trường hợp mà không thỏa mãn 4 điều kiện trên thì ra giá trị "other"
1/ Bạn nên bỏ từ "{Help VBA}" theo qui định trong nội qui của diễn đàn
2/ Sắp xếp lại giá trị ở cột F G H theo thứ tự từ lớn tới nhỏ: Theo ưu tiên cột nào trước
3/ Phân loại theo điều kiện (sheet "condition"): Có vài điều kiện không chuẩn như "40 < W <=35", kiểm tra lại toàn bộ
 
Upvote 0
1/ Bạn nên bỏ từ "{Help VBA}" theo qui định trong nội qui của diễn đàn
2/ Sắp xếp lại giá trị ở cột F G H theo thứ tự từ lớn tới nhỏ: Theo ưu tiên cột nào trước
3/ Phân loại theo điều kiện (sheet "condition"): Có vài điều kiện không chuẩn như "40 < W <=35", kiểm tra lại toàn bộ
Cảm ơn bác đã góp ý!
Sắp xếp lại giá trị từ lớn tới nhỏ là giữa 3 giá trị của cột F G H thì giá trị nào lớn nhất đặt về F, nhỏ hơn đặt về G và nhỏ nhất là cột H ạ.
Em đã sửa lại điều kiện bị vi phạm rồi, mong các bác trợ giúp!
Bài đã được tự động gộp:

Mình record macro custom Sort theo 3 cột đó là được.


Chép bảng dữ liệu vào 1 mảng.
Function CompareFGH(byval mang as variant, byval irow as long) as String
'mang: mảng dữ liệu ở cột F:H
'irow: chỉ số dòng dữ liệu trong biến mang.
CompareFGH = "NOK"
IF mang(irow, 1) <= 55 Then
If mang(irow,2) <= 50 Then
If mang(irow,3) <= 35 Then
CompareFGH = "OK"
Exit function
End if
End if
End if
End Function
'Ap dụng:
Redim mangSS(1 to ubound(mang,1), 1 to 1)
For i=1 to ubound(mang,1)
mangSS = CompareFGH(mang, i)
Next i
Sheet1.Range("J2").Resize(ubound(mang,1),1).value = mangSS

---
Ảnh a va ta đẹp quá. Bữa nào cháu nhớn đi học, đem in vài chục cái ảnh rải cổng trường khoe chơi chơi hông?
Cảm ơn bác đã trợ giúp!
Chắc đề mục 1 em làm chưa rõ. Chỉnh lại là có 3 giá trị ở F G H thì so sánh với nhau và đặt lại theo thứ tự từ lớn tới nhỏ ạ. F > G > H.
Avatar đó thì bạn nhỏ này đã lớn và thay đổi nhiều lắm rồi. :)))
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ các bác giúp em VBA với ạ! Em cảm ơn!

1. Sắp xếp lại giá trị ở cột F G H theo thứ tự từ lớn tới nhỏ: so sánh giữa 3 giá trị F G và H và sắp xếp lại lần lượt lớn nhất là F > G > H.
2. So sánh giá trị ở cột F G H với điều kiện:
Nếu F <= 55, G <= 50 và H <= 35 thì ra kết quả cột J là "OK"
Còn nếu 1 trong 3 giá trị (F > 55 hoặc G > 50 hoặc H > 35) thì ra kết quả cột J là "NOK".
3. Phân loại theo điều kiện (sheet "condition"):
Nếu L <=40 và W <=40 và H <= 20 và GW <= 6 thì ra kết quả cột K là "USE"
Nếu 40 < L <=50 và W <=35 và 20 < H <= 23 và GW <=8 thì ra kết quả cột K là "OHL"
Nếu 50 < L <=55 và 35 < W <= 50 và 20 < H <= 35 và GW <= 18 thì ra kết quả cột K là "ZOB"
Nếu 50 < L <=55 và 35 < W <= 50 và 20 < H <= 35 và 18 < GW <= 23 thì ra kết quả cột K là "ZOC"
Còn lại các trường hợp mà không thỏa mãn 4 điều kiện trên thì ra giá trị "other"
Chạy code
Mã:
Sub ABC()
  Dim Arr(), Rng As Range
  Dim eRow&, sRow&, i&
 
  Arr = Array(55, 50, 35)
  With Sheets("Detail")
    .Sort.Orientation = xlLeftToRight
    eRow = .Range("H" & Rows.Count).End(xlUp).Row
    For i = 2 To eRow
      Set Rng = .Range("E" & i).Resize(, 7)
      Rng(1, 2).Resize(, 3).Sort Rng(1, 2).Resize(, 3), xlDescending
      For j = 2 To 4
        If Rng(1, j) > Arr(j - 2) Then Exit For
      Next j
      If j = 4 + 1 Then Rng(1, 6) = "OK" Else Rng(1, 6) = "NOK"
      
      If Rng(1, 1) <= 6 And Rng(1, 2) <= 40 _
        And Rng(1, 3) <= 40 And Rng(1, 4) <= 20 Then
            Rng(1, 7) = "USE"
      ElseIf Rng(1, 1) <= 8 _
        And Rng(1, 2) > 40 And Rng(1, 2) <= 50 _
        And Rng(1, 3) <= 35 _
        And Rng(1, 4) > 20 And Rng(1, 4) <= 23 _
            Then Rng(1, 7) = "OHL"
      ElseIf Rng(1, 1) <= 18 _
        And Rng(1, 2) > 50 And Rng(1, 2) <= 55 _
        And Rng(1, 3) > 35 And Rng(1, 3) <= 50 _
        And Rng(1, 4) > 20 And Rng(1, 4) <= 35 _
            Then Rng(1, 7) = "ZOB"
      ElseIf Rng(1, 1) > 18 And Rng(1, 1) <= 23 _
        And Rng(1, 2) > 50 And Rng(1, 2) <= 55 _
        And Rng(1, 3) > 35 And Rng(1, 3) <= 50 _
        And Rng(1, 4) > 20 And Rng(1, 4) <= 35 _
            Then Rng(1, 7) = "ZOC"
      Else
        Rng(1, 7) = "other"
      End If
    Next i
  End With
End Sub
 
Upvote 0
Chạy code
Mã:
Sub ABC()
  Dim Arr(), Rng As Range
  Dim eRow&, sRow&, i&

  Arr = Array(55, 50, 35)
  With Sheets("Detail")
    .Sort.Orientation = xlLeftToRight
    eRow = .Range("H" & Rows.Count).End(xlUp).Row
    For i = 2 To eRow
      Set Rng = .Range("E" & i).Resize(, 7)
      Rng(1, 2).Resize(, 3).Sort Rng(1, 2).Resize(, 3), xlDescending
      For j = 2 To 4
        If Rng(1, j) > Arr(j - 2) Then Exit For
      Next j
      If j = 4 + 1 Then Rng(1, 6) = "OK" Else Rng(1, 6) = "NOK"
     
      If Rng(1, 1) <= 6 And Rng(1, 2) <= 40 _
        And Rng(1, 3) <= 40 And Rng(1, 4) <= 20 Then
            Rng(1, 7) = "USE"
      ElseIf Rng(1, 1) <= 8 _
        And Rng(1, 2) > 40 And Rng(1, 2) <= 50 _
        And Rng(1, 3) <= 35 _
        And Rng(1, 4) > 20 And Rng(1, 4) <= 23 _
            Then Rng(1, 7) = "OHL"
      ElseIf Rng(1, 1) <= 18 _
        And Rng(1, 2) > 50 And Rng(1, 2) <= 55 _
        And Rng(1, 3) > 35 And Rng(1, 3) <= 50 _
        And Rng(1, 4) > 20 And Rng(1, 4) <= 35 _
            Then Rng(1, 7) = "ZOB"
      ElseIf Rng(1, 1) > 18 And Rng(1, 1) <= 23 _
        And Rng(1, 2) > 50 And Rng(1, 2) <= 55 _
        And Rng(1, 3) > 35 And Rng(1, 3) <= 50 _
        And Rng(1, 4) > 20 And Rng(1, 4) <= 35 _
            Then Rng(1, 7) = "ZOC"
      Else
        Rng(1, 7) = "other"
      End If
    Next i
  End With
End Sub
Em cảm ơn bác rất nhiều!
 
Upvote 0
Web KT
Back
Top Bottom