Thông báo trong trang Dulieu có một ô hay nhiều ô được tô màu đỏ

Liên hệ QC

hoanglocphat

Thành viên thường trực
Tham gia
27/1/13
Bài viết
258
Được thích
30
Các bạn giúp mình code như sau:
Mình có trang DuLieu, trong trang có rất nhiều dữ liệu (dữ liệu từ A4: D10.000).
Nếu trong A4: D10.000 có 1 hay nhiều ô, tô màu nền đỏ thì code thông báo "có ô màu đỏ" (không cần thông báo ô nào). Xin cảm ơn
 

File đính kèm

  • ThongBao.xlsm
    9.2 KB · Đọc: 6
Các bạn giúp mình code như sau:
Mình có trang DuLieu, trong trang có rất nhiều dữ liệu (dữ liệu từ A4: D10.000).
Nếu trong A4: D10.000 có 1 hay nhiều ô, tô màu nền đỏ thì code thông báo "có ô màu đỏ" (không cần thông báo ô nào). Xin cảm ơn
Dùng 1 hàm tự tạo (*) đếm xem vùng muốn đếm có bao nhiêu ô có màu. Rồi tự triển khai phần còn lại.
(*) hàm tự tạo này thấy trên diễn đàn cũng có nhiều á. Bạn tự tìm kiếm lấy
 
Upvote 0
PHP:
Option Explicit
Sub timkiem()
Dim i&, j&
    For i = 1 To 10000
        For j = 1 To 4
            If Range("A1:D10000").Cells(i, j).Interior.ColorIndex = 3 Then
                MsgBox "Co o mau do"
                Exit Sub
            End If
        Next
    Next
MsgBox "Khong co o mau do"
End Sub
 
Upvote 0
Các bạn giúp mình code như sau:
Mình có trang DuLieu, trong trang có rất nhiều dữ liệu (dữ liệu từ A4: D10.000).
Nếu trong A4: D10.000 có 1 hay nhiều ô, tô màu nền đỏ thì code thông báo "có ô màu đỏ" (không cần thông báo ô nào). Xin cảm ơn
Đỏ có rất nhiều loại đỏ. Nếu đỏ kiểu vbRed thì dễ rồi, chứ tô đại màu đỏ nào đó thì code tìm cả ngày không ra.
 
Upvote 0
For i = 1 To 10000
For j = 1 To 4
If Range("A1:D10000").Cells(i, j).Interior.ColorIndex = 3 Then
MsgBox "Co o mau do"
Exit Sub
End If
Next
Next
Nếu không có ô đỏ nào thì code này gọi hàm dựng Range("A1: D10000") tất cả 4x10000 lần.

Nếu code For Each cll In Range("A: D10000") thì chỉ gọi 1 lần
 
Upvote 0
Nếu không có ô đỏ nào thì code này gọi hàm dựng Range("A1: D10000") tất cả 4x10000 lần.
Nếu code For Each cll In Range("A: D10000") thì chỉ gọi 1 lần
Trong 2 cách thì đều duyệt 4*10.000 = 40.000 lần, nếu không có ô màu đỏ
Còn dựng Range 40.000 lần thì em chưa rõ ý anh?
 
Upvote 0
Trong 2 cách thì đều duyệt 4*10.000 = 40.000 lần, nếu không có ô màu đỏ
Còn dựng Range 40.000 lần thì em chưa rõ ý anh?
Range dùng như trên là một thuộc tính của WorkSheet.
Range(cái gì đó) là gọi hàm (hàm ngầm) nhận tham "cái gì đó" và tính ra thuộc tính ấy là cái range gì. (*1)
Như vậy, trong code trên, cứ mỗi lượt là Range("A1: D10000") được ính lại.

(*1) cũng như Array a, khi ta nói a(i) thì toán tử () gọi một hàm ngầm tính ra vị trí của phần tử i của mảng a.
Tuy nhiên, hàm range thuộc loại hàm chồng (cùng một tên, nhiều kiểu tham số) trong khi hàm tính phần tử array là hàm duy nhất (chỉ nhận tham số kiểu số nguyên)

Bài #8 ở trên là tôi minh họa cách dùng For Each thôi. Chứ thực tế thì mấu chốt chính của bài này là hàm FindFormat.

Mã:
Function TimMauDo(rg As Range) As Boolean
Application.FindFormat.Clear
Application.FindFormat.Interior.ColorIndex = MAUDO
Dim GuiltyCell As Range
Set GuiltyCell = Range("A1: D10000).Find(What:="", After:=Cells(1, 1), _
        LookIn:=xlFormulas, LookAt:=xlPart, _
        SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=True)
TimMauDo = (Not GuiltyCell Is Nothing)
End Function

Chú thích: màu ở đây là màu được tô. Màu của conditional formatting lấy cách hơi khác.
 
Upvote 0
Web KT

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

Back
Top Bottom