



Nếu bạn đánh dấu "x" hay gì đó ở 1 cột phụ thì công thức làm được, còn tô màu thế này thì chờ các sư phụ VBA vậy
Phần chữ màu đỏ của bạn có được do Condition Formatting, do đó có điều kiện gì gì.. đó mới bôi màu, vậy sao bạn không nêu điều kiện đó ra, trích theo điều kiện đó



Phần điều kiện của mình như sau:
1. Ở dòng DR
+ Giá trị giữa 3 ~ 5 thì hiển thị chử màu đỏ.
+ Giá trị lớn hơn 6 thì cho chử màu đỏ và nền màu hồng (nhưng vì giá trị của mình không lớn hơn 100 được nên mình làm giữa 6 ~100 luôn)
2. Ở dòng BT
+ Giá trị giữa 2 ~ 3 thì cho chử màu đỏ
+ Giá trị lớn hơn 4 thì cho chử đỏ và nền hồng. (mình làm giữa 4 ~ 100)
3. Ở dòng A/C
+ Giá trị giữa 2 ~ 3 thì cho chử màu đỏ
+ Giá trị lớn hơn 4 thì cho chử đỏ nền hồng. (mình làm giữa 4 ~ 100)
4. Ở dòng Tổng
+ Giá trị giữa 3 ~ 5 thì cho chử màu đỏ
+ Giá trị lớn hơn 6 thì cho chử đỏ và nền hồng. (mình làm giữa 6 ~ 100)
Điều kiện của em là như thế, mong tiền bối giúp đỡ.
Em cảm ơn!
) bạn xem thử có ổn không ( nếu đc các pác trong GPE sẽ giúp bạn sửa và bổ sung thêm 1 số vấn đề nữa ^^ )Sub Rut_trich_du_lieu()
Dim Arr(), mycell As Range, rng As Range, rng1 As Range
Dim n As Long, ngay As Integer, vtri As Long
On Error Resume Next
ngay = Range("AN24").Value
vtri = WorksheetFunction.Match(ngay, Range("A1:AJ1"), 0)
Set rng1 = Range("A:A").Offset(, vtri - 1)
ReDim Arr(1 To Range("F65536").End(xlUp).Row, 1 To 5)
Set rng = Range("E:E").Resize(Range("E65536").End(xlUp).Row)
For Each mycell In rng
If mycell.Value = "DR" And rng1.Cells(mycell.Row) >= 3 _
And rng1.Cells(mycell.Row) <= 5 Then
n = n + 1
Arr(n, 5) = rng1.Cells(mycell.Row)
Arr(n, 4) = "DR"
Arr(n, 3) = Range("D:D").Cells(mycell.Row)
End If
If mycell.Value = "BT" And rng1.Cells(mycell.Row) >= 2 _
And rng1.Cells(mycell.Row) <= 3 Then
n = n + 1
Arr(n, 5) = rng1.Cells(mycell.Row)
Arr(n, 4) = "BT"
Arr(n, 3) = Range("D:D").Cells(mycell.Row - 1)
End If
If Trim(mycell.Value) = "A/C" And rng1.Cells(mycell.Row) >= 2 _
And rng1.Cells(mycell.Row) <= 3 Then
n = n + 1
Arr(n, 5) = rng1.Cells(mycell.Row)
Arr(n, 3) = Range("D:D").Cells(mycell.Row - 2)
Arr(n, 4) = "A/C"
End If
If Left(mycell.Value, 1) = "T" And rng1.Cells(mycell.Row) >= 3 _
And rng1.Cells(mycell.Row) <= 5 Then
n = n + 1
Arr(n, 5) = rng1.Cells(mycell.Row)
Arr(n, 4) = "Tong"
Arr(n, 3) = Range("D:D").Cells(mycell.Row - 3)
End If
Next
If n Then
Range("AM26").Resize(n, 5).ClearContents
Range("AM26").Resize(n, 5) = Arr
Else
Range("AM26").Resize(1000, 1000).ClearContents
Range("AM26") = "NO DATA "
End If
End Sub
Đọc bài này từ trưa, mà chưa thấy ai trả lời giúp bạn !
Vừa đi liên hoan về, ( ^^ hơi phê volka ) , mình viết đại 1 đoạn code ( hơi rườm rà tẹo) bạn xem thử có ổn không ( nếu đc các pác trong GPE sẽ giúp bạn sửa và bổ sung thêm 1 số vấn đề nữa ^^ )
Bạn xem file đính kèm nhé ( nhập ngày và click vào nút ok )
còn việc "Không biết có cách nào làm để không sử dụng VBA không bạn, chứ VBA mình chẳng biết gì hết. Rồi mất công gỡi báo cáo đi máy khác lại không hiểu thì khổ."
Bạn xem thử file đính kèm có chỗ nào không hiểu và khó sử dụng không ?
Mã:Sub Rut_trich_du_lieu() Dim Arr(), mycell As Range, rng As Range, rng1 As Range Dim n As Long, ngay As Integer, vtri As Long On Error Resume Next ngay = Range("AN24").Value vtri = WorksheetFunction.Match(ngay, Range("A1:AJ1"), 0) Set rng1 = Range("A:A").Offset(, vtri - 1) ReDim Arr(1 To Range("F65536").End(xlUp).Row, 1 To 5) Set rng = Range("E:E").Resize(Range("E65536").End(xlUp).Row) For Each mycell In rng If mycell.Value = "DR" And rng1.Cells(mycell.Row) >= 3 _ And rng1.Cells(mycell.Row) <= 5 Then n = n + 1 Arr(n, 5) = rng1.Cells(mycell.Row) Arr(n, 4) = "DR" Arr(n, 3) = Range("D:D").Cells(mycell.Row) End If If mycell.Value = "BT" And rng1.Cells(mycell.Row) >= 2 _ And rng1.Cells(mycell.Row) <= 3 Then n = n + 1 Arr(n, 5) = rng1.Cells(mycell.Row) Arr(n, 4) = "BT" Arr(n, 3) = Range("D:D").Cells(mycell.Row - 1) End If If Trim(mycell.Value) = "A/C" And rng1.Cells(mycell.Row) >= 2 _ And rng1.Cells(mycell.Row) <= 3 Then n = n + 1 Arr(n, 5) = rng1.Cells(mycell.Row) Arr(n, 3) = Range("D:D").Cells(mycell.Row - 2) Arr(n, 4) = "A/C" End If If Left(mycell.Value, 1) = "T" And rng1.Cells(mycell.Row) >= 3 _ And rng1.Cells(mycell.Row) <= 5 Then n = n + 1 Arr(n, 5) = rng1.Cells(mycell.Row) Arr(n, 4) = "Tong" Arr(n, 3) = Range("D:D").Cells(mycell.Row - 3) End If Next If n Then Range("AM26").Resize(n, 5).ClearContents Range("AM26").Resize(n, 5) = Arr Else Range("AM26").Resize(1000, 1000).ClearContents Range("AM26") = "NO DATA " End If End Sub
Say rồi về nhà thôi ^^ Thanks GPE