Tô màu xen kẻ cho dòng theo điều kiện

Liên hệ QC

lp0072021

Thành viên chính thức
Tham gia
23/8/22
Bài viết
60
Được thích
3
Chào anh chị,
Em có file do dữ liệu lớn hơn 500.000 dòng và khi dùng conditional formatting thì bị chậm, nên nhờ anh chị viết giúp em code để tô màu dòng xen kẻ theo điều kiện cùng mã thì cùng màu dòng. Em cảm ơn các anh chị ạ.
 

File đính kèm

  • Tomauxenke.xlsm
    9.9 KB · Đọc: 19
Chào anh chị,
Em có file do dữ liệu lớn hơn 500.000 dòng và khi dùng conditional formatting thì bị chậm, nên nhờ anh chị viết giúp em code để tô màu dòng xen kẻ theo điều kiện cùng mã thì cùng màu dòng. Em cảm ơn các anh chị ạ.
Tô màu cho đẹp à bạn hay làm gì mà tô 500 nghìn dòng.
 
Upvote 0
Dạ dữ liệu của em là file tính toán và có nhập liệu nữa nên cần tô màu theo dòng có cùng ID để dễ nhận biết trong cùng nhóm đó anh.
Màu mè vào rồi file của anh chị cũng thành 1 đống rác thôi. Chưa nói tới nó sẽ làm tăng dung lượng file lên nữa. và cùng mã thì cùng màu. nếu 500k dòng có 300k mã khác nhau thì cũng nhọc đấy
 
  • Thích
Reactions: th7
Upvote 0
Theo tôi bạn chỉ làm việc này 1 lần thì không cần viết code chi cho tốn thời gian.
Như lời khuyên những bài trên, số lượng trên 500K dòng thì màu ko còn ý nghĩa. Nếu bạn vẫn muốn tô màu thử cân nhắc cách này nhé:
1. Thêm một cột dùng hàm if (hoặc kiểu gì đó) để đánh dấu dòng cần tô --> cột này có thể là true/false
2. Filter cột vừa thêm rồi tô màu.
Tôi làm ví dụ theo file của bạn chưa thử trên file có 500K dòng.
 

File đính kèm

  • Tomauxenke.xlsm
    11 KB · Đọc: 16
Upvote 0
Theo tôi bạn chỉ làm việc này 1 lần thì không cần viết code chi cho tốn thời gian.
Như lời khuyên những bài trên, số lượng trên 500K dòng thì màu ko còn ý nghĩa. Nếu bạn vẫn muốn tô màu thử cân nhắc cách này nhé:
1. Thêm một cột dùng hàm if (hoặc kiểu gì đó) để đánh dấu dòng cần tô --> cột này có thể là true/false
2. Filter cột vừa thêm rồi tô màu.
Tôi làm ví dụ theo file của bạn chưa thử trên file có 500K dòng.
Cảm ơn bạn nhé, mình đang tìm code còn làm cột phụ và conditional formatting thì mình cũng đang thực hiện rồi.
 
Upvote 0
Chào anh chị,
Em có file do dữ liệu lớn hơn 500.000 dòng và khi dùng conditional formatting thì bị chậm, nên nhờ anh chị viết giúp em code để tô màu dòng xen kẻ theo điều kiện cùng mã thì cùng màu dòng. Em cảm ơn các anh chị ạ.
Làm cái này mới nghiệm ra lão Union này có nhiều điều khó hiểu.
Bạn thử code dưới nhé:
Mã:
Option Explicit

Sub TestUnion()
Dim I As Long, mColor As Boolean, Rng As Range, Lr As Long, t As Double
Application.ScreenUpdating = False
t = Timer()
With Sheets("Sheet1")
    Lr = .Cells(Rows.Count, "D").End(xlUp).Row
    For I = 5 To Lr
        If .Cells(I, "D").Value <> .Cells(I - 1, "D").Value Then mColor = Not mColor
        If mColor Then
            If Rng Is Nothing Then
                Set Rng = Range("A" & I & ":U" & I)
            Else
                Set Rng = Union(Rng, Range("A" & I & ":U" & I))
                If Intersect(Rng, Columns("A")).Cells.Count = 2 Then
                    Rng.Interior.Color = vbYellow
                    Set Rng = Nothing
                End If
            End If
        End If
    Next
End With
On Error Resume Next
    Rng.Interior.Color = vbYellow
    Set Rng = Nothing
Application.ScreenUpdating = True
MsgBox "Thoi gian: " & Format(Timer - t, "0.0")
End Sub
 
Upvote 0
Mượn tạm cột BZ để viết code, điền số 1 vô cột này cho các dòng xem kẽ, sau đó code sẽ delete cột này đi.
Nhấn nút "Tô màu xen kẽ" để chạy code. Thời gian chạy code khoảng 3s cho 500.000 dòng
PHP:
Option Explicit
Sub tomauxenke()
Dim lr&, i&, c&, rng, u As Range, arr(1 To 1000000, 1 To 1)
lr = Cells(Rows.Count, "D").End(xlUp).Row
rng = Range("D4:D" & lr).Value
For i = 2 To UBound(rng)
    If rng(i, 1) <> rng(i - 1, 1) Then c = c + 1
    If WorksheetFunction.IsOdd(c) Then
        arr(i - 1, 1) = 1
    End If
Next
Range("bz5").Resize(UBound(rng) - 1, 2).Value = arr
With Range("A4:bz" & lr)
    .AutoFilter Field:=Range("bz1").Column, Criteria1:=1
    Range("A5:U" & lr).Interior.Color = 10086143
    .AutoFilter
End With
Range("bz4:bz" & lr).ClearContents
End Sub
 

File đính kèm

  • Tomauxenke.xlsm
    4.4 MB · Đọc: 26
Upvote 0
Trong thực tế thì việc tô xen kẽ cũng giúp ích cho người nhập liệu tránh sai sót.
 
Upvote 0
Em ơn tất cả các anh đã hổ trợ em nhé. Vì tô màu dòng này để ứng dụng cho việc nhập liệu như 1 đơn hàng có nhiều mặt hàng nên có nhiều dòng, nên tô màu để khi nhập liệu dễ nhận biết những dòng nào trong cùng 1 đơn hàng.
 
Upvote 0
Dòng này thay bằng
If not Rng is nothing then...
Cái này thì em biết, cơ mà tới đây nó cũng chỉ có mỗi lỗi này nữa thôi nên cho chạy tuốt luôn anh :D
Cái em thấy hay trong bài này là giữa các dòng union thì 100 dòng lại không nhanh hơn 2 dòng (có thể em chưa test được nhiều kiểu dữ liệu, nhưng test dòng chẵn lẻ cho 500.000 dòng thì nó vậy). Mà 2 dòng với 1 dòng thì một trời một vực. Để 1 là đơ file luôn. Chỗ này không hiểu được
 
Upvote 0
Cái này thì em biết, cơ mà tới đây nó cũng chỉ có mỗi lỗi này nữa thôi nên cho chạy tuốt luôn anh :D
Cái em thấy hay trong bài này là giữa các dòng union thì 100 dòng lại không nhanh hơn 2 dòng (có thể em chưa test được nhiều kiểu dữ liệu, nhưng test dòng chẵn lẻ cho 500.000 dòng thì nó vậy). Mà 2 dòng với 1 dòng thì một trời một vực. Để 1 là đơ file luôn. Chỗ này không hiểu được

Bài toán chỉ phân thành 2 loại, bạn làm lại thuật toán gom loại cần tô màu vào 1 Range rồi cuối cùng mới tô màu xem.
 
Upvote 0
Bài toán chỉ phân thành 2 loại, bạn làm lại thuật toán gom loại cần tô màu vào 1 Range rồi cuối cùng mới tô màu xem.
Union một range mà dữ liệu lớn là cực chậm anh ạ. Nó tầm khoảng <500 dòng trong một range union. Còn lớn hơn là bắt đầu chậm rì rồi. Nên em mới phải tách ra nhiều lần đấy, mỗi lần xong lại set về nothing. Nhưng cái lạ là em cứ nghĩ cứ cho union nhiều dòng xíu rồi tô màu thì nhanh hơn mà test thì thấy 500 dòng chậm hơn 100, 100 chậm hơn 10 haha. Lão hóa luôn cái não :D
 
Upvote 0
. . . , nên nhờ anh chị viết giúp em code để tô màu dòng xen kẻ theo điều kiện cùng mã thì cùng màu dòng. Em cảm ơn các anh chị ạ.
Vậy bạn có bao nhiêu mã trong 500K dòng vậy?
E rằng không đủ màu để tô ấy chứ?!
Mà sao lại phải tô cả dóng, sao không tô chỉ cột mã đó thôi?
Nói chung là chủ bài đăng trả giá khá đắt khi tô màu như vậy.
 
Upvote 0
Vậy bạn có bao nhiêu mã trong 500K dòng vậy?
E rằng không đủ màu để tô ấy chứ?!
Mà sao lại phải tô cả dóng, sao không tô chỉ cột mã đó thôi?
Nói chung là chủ bài đăng trả giá khá đắt khi tô màu như vậy.
à chỉ tô xen kẽ 2 màu thôi anh, mã trùng nhau thì cùng 1 màu.
 
Upvote 0
Web KT

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

Back
Top Bottom