[HỎI] CODE TÌM VÀ CHỌN Ô ĐƯỢC TÔ MÀU CHỮ HOẶC MÀU NỀN THEO MÃ MÀU

Liên hệ QC

Mutants Men

Thành viên thường trực
Tham gia
30/12/15
Bài viết
394
Được thích
266
Chào mọi người, mọi người cho mình hỏi một việc như trên tiêu đề nhé.
chả là trong trang tính mình có tô màu chữ một vài ô, một vài ô thì có tô màu nền, giờ mình muốn chọn một số ô được tô màu trước đó thì code viết như thế nào để chọn 1 lần 1 toàn bộ những ô thỏa mãn mà không phải dùng vòng lặp.
nội dung mình có nêu trong file đính kèm.
 

File đính kèm

  • HOI- CHON O THEO DIEU KIEN.xlsm
    29.7 KB · Đọc: 6
Lần chỉnh sửa cuối:
Chào mọi người, mọi người cho mình hỏi một việc như trên tiêu đề nhé.
chả là trong trang tính mình có tô màu chữ một vài ô, một vài ô thì có tô màu nền, giờ mình muốn chọn một số ô được tô màu trước đó thì code viết như thế nào để chọn 1 lần 1 toàn bộ những ô thỏa mãn mà không phải dùng vòng lặp.
nội dung mình có nêu trong file đính kèm.
Trong Excel có sẳn Filter by Font Color (màu chữ), Filter by Cell Color (màu nền) và chỉ cho phép chọn 1 loại duy nhất.
Có thể Record Macro rồi chế biến lại sau đó copy sang sheet khác để xem, như File trong bài Này, còn có cách nào khác nữa thì tôi chưa biết.
 
Upvote 0
Trong Excel có sẳn Filter by Font Color (màu chữ), Filter by Cell Color (màu nền) và chỉ cho phép chọn 1 loại duy nhất.
Có thể Record Macro rồi chế biến lại sau đó copy sang sheet khác để xem, như File trong bài Này, còn có cách nào khác nữa thì tôi chưa biết.
em cảm ơn thầy đã quan tâm. em có tham khảo tại bài này và đã làm được, mục đích chỉ để tìm 1 dòng chỉ định bất kỳ để chỉnh chiều cao ô được gộp xem nhanh không, em thử nghiệm trên 2 ô để chạy code, thời gian hết 0.41s, chậm hơn cả code chỉnh dòng toàn bộ trang 0.25-0.37s
cũng chia sẻ nội dung code lên cho bạn nào cần
Mã:
Sub text()
Dim Tmr As Double
Tmr = Timer()
FixRowFormat Range("A1:Z72") ' chinh noi dung trong pham vi vung A1:Z72
MsgBox Timer() - Tmr
End Sub


Sub FixRowFormat(ByVal Rn As Range)
    Dim xSCR As Boolean, xCAL As Integer, xDIS As Boolean, xENA As Boolean
    xSCR = Application.ScreenUpdating:      Application.ScreenUpdating = False
    xCAL = Application.Calculation:         Application.Calculation = xlManual
    xDIS = Application.DisplayAlerts:       Application.DisplayAlerts = False
    xENA = Application.EnableEvents:        Application.EnableEvents = False
With Rn.Worksheet
    With .Range("AA13") 'lay noi dung mau chu va mau nen tai o AA13 (o mau) de tim va chinh cac o co dinh dang tuong tu
    MauChu = .Font.Color
    MauNen = .Interior.Color
    ChonO MauChu, MauNen, Rn
    End With
End With
    Application.ScreenUpdating = xSCR: Application.Calculation = xCAL
    Application.DisplayAlerts = xDIS: Application.EnableEvents = xENA
End Sub


Sub ChonO(Optional ByVal MauChu As Long = 0, Optional ByVal MauNen As Long = 16777215, Optional Vung As Range)
Dim Rngtxt As String
Dim FirstAddress As String
Dim LastCell As Range
Dim Arr As Variant
If MauChu = 0 And MauNen = 16777215 Then Exit Sub
If Vung Is Nothing Then Set Vung = Selection
'Vung.Select
Set LastCell = Vung.Cells(Vung.Cells.Count)

    Application.FindFormat.Clear
    Application.FindFormat.Font.Color = MauChu
    Application.FindFormat.Interior.Color = MauNen

Do
Rep:
    Set LastCell = Vung.Find(What:="", After:=LastCell, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=True)
    Rngtxt = Rngtxt & "," & LastCell.Address
    If Len(FirstAddress) = 0 Then
        FirstAddress = LastCell.Address
        GoTo Rep
    End If
      
      
Loop While FirstAddress <> LastCell.Address
Rngtxt = Mid(Rngtxt, 2, Len(Rngtxt) - Len(FirstAddress) - 2)
Arr = Split(Rngtxt, ",")
For MauChu = LBound(Arr) To UBound(Arr)
MergeCellFit Vung.Worksheet.Range(Arr(MauChu))
Next MauChu
'Range(Rngtxt).Select
End Sub



'https://www.giaiphapexcel.com/diendan/threads/t%E1%BA%B7ng-c%C3%A1c-b%E1%BA%A1n-code-autofit-row-v%E1%BB%9Bi-merge-cells-nhi%E1%BB%81u-h%C3%A0ng-nhi%E1%BB%81u-c%E1%BB%99t.105954/#post-681822
Sub MergeCellFit(ByVal MergeCells As Range)
    Dim Diff As Single
    Dim FirstCell As Range, MergeCellArea As Range
    Dim Col As Long, ColCount As Long, RowCount As Long
    Dim FirstCellWidth As Double, FirstCellHeight As Double, MergeCellWidth As Double
    If MergeCells.Count = 1 Then
        Set MergeCellArea = MergeCells.MergeArea
    Else
        Set MergeCellArea = MergeCells
    End If
    Dim xSCR As Boolean, xCAL As Integer, xDIS As Boolean, xENA As Boolean
    xSCR = Application.ScreenUpdating:      Application.ScreenUpdating = False
    xCAL = Application.Calculation:         Application.Calculation = xlManual
    xDIS = Application.DisplayAlerts:       Application.DisplayAlerts = False
    xENA = Application.EnableEvents:        Application.EnableEvents = False
    'Application.ScreenUpdating = False
    'Application.EnableEvents = False
    'Application.Calculation = xlCalculationManual
    With MergeCellArea
        ColCount = .Columns.Count
        RowCount = .Rows.Count
        .WrapText = True
        If RowCount = 1 And ColCount = 1 Then
            .EntireRow.AutoFit
            GoTo ExitSub
        End If
        Set FirstCell = .Cells(1, 1)
        FirstCellWidth = FirstCell.ColumnWidth
        Diff = 0.75
        For Col = 1 To ColCount
            MergeCellWidth = MergeCellWidth + .Cells(1, Col).ColumnWidth + Diff
        Next
        .MergeCells = False
        FirstCell.ColumnWidth = MergeCellWidth - Diff
        .EntireRow.AutoFit
        FirstCellHeight = FirstCell.RowHeight
        .MergeCells = True
        FirstCell.ColumnWidth = FirstCellWidth
        FirstCellHeight = FirstCellHeight / RowCount
        .RowHeight = FirstCellHeight
    End With
ExitSub:
    Application.ScreenUpdating = xSCR: Application.Calculation = xCAL
    Application.DisplayAlerts = xDIS: Application.EnableEvents = xENA
    'Application.Calculation = xlCalculationAutomatic
    'Application.EnableEvents = True
    'Application.ScreenUpdating = True
End Sub
À! mà file đi nhỉ, cho dễ xem.
file hơi nhẹ với ít dòng ít định dạng nên code chạy nhanh, file chính đến 3Mb, định dạng tô tùm lum hết nên chậm
 

File đính kèm

  • TEST.xlsm
    27.9 KB · Đọc: 11
Lần chỉnh sửa cuối:
Upvote 0
em cảm ơn thầy đã quan tâm. em có tham khảo tại bài này và đã làm được, mục đích chỉ để tìm 1 dòng chỉ định bất kỳ để chỉnh chiều cao ô được gộp xem nhanh không, em thử nghiệm trên 2 ô để chạy code, thời gian hết 0.41s, chậm hơn cả code chỉnh dòng toàn bộ trang 0.25-0.37s
cũng chia sẻ nội dung code lên cho bạn nào cần
...................
À! mà file đi nhỉ, cho dễ xem.
file hơi nhẹ với ít dòng ít định dạng nên code chạy nhanh, file chính đến 3Mb, định dạng tô tùm lum hết nên chậm
Quê tôi Cần Thơ, từ nay đến tháng 8 có thể tôi sẽ về Cần Thơ. Nếu có dịp chúng ta sẽ gặp gỡ giao lưu nhé.
 
Upvote 0
Web KT
Back
Top Bottom