Nhờ hướng dẫn tô màu tự động cho bảng excel theo điều kiện (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tandattb

Thành viên mới
Tham gia
9/10/18
Bài viết
45
Được thích
9
Donate (Momo)
Donate
Giới tính
Nam
Anh chị cho em hỏi cách tô màu dòng excel theo điều kiện với ạ.
em có bảng sản phẩm như sau
Cứ sản phẩm ký hiệu màu là XR thì sẽ tô màu xanh rêu, tương tự với các loại màu khác ạ.
nhưng hiện nay em tô thủ công lâu quá.
Anh chị có cách nào chỉ giúp em , cứ ở cột màu đánh "XR" thì tự động dòng đó sẽ được tô màu xanh rêu không ạ (tương tự với các màu khác ạ)
Em cám ơn!
STTmã sản phẩmMàuQuy cáchtrọng lượngsố métghi chú
1​
SP001XRXanh rêu
2​
SP002DDĐỏ đậm
3​
SP003XDXanh dương
4​
SP004XNXanh ngọc
5​
SP005XRXanh rêu
6​
SP006DDĐỏ đậm
7​
SP007XDXanh dương
8​
SP008XNXanh ngọc
9​
SP009XRXanh rêu
10​
SP010DDĐỏ đậm
11​
SP011XDXanh dương
12​
SP012XNXanh ngọc
 

File đính kèm

Anh chị cho em hỏi cách tô màu dòng excel theo điều kiện với ạ.
em có bảng sản phẩm như sau
Cứ sản phẩm ký hiệu màu là XR thì sẽ tô màu xanh rêu, tương tự với các loại màu khác ạ.
nhưng hiện nay em tô thủ công lâu quá.
Anh chị có cách nào chỉ giúp em , cứ ở cột màu đánh "XR" thì tự động dòng đó sẽ được tô màu xanh rêu không ạ (tương tự với các màu khác ạ)
Em cám ơn!
STTmã sản phẩmMàuQuy cáchtrọng lượngsố métghi chú
1​
SP001XRXanh rêu
2​
SP002DDĐỏ đậm
3​
SP003XDXanh dương
4​
SP004XNXanh ngọc
5​
SP005XRXanh rêu
6​
SP006DDĐỏ đậm
7​
SP007XDXanh dương
8​
SP008XNXanh ngọc
9​
SP009XRXanh rêu
10​
SP010DDĐỏ đậm
11​
SP011XDXanh dương
12​
SP012XNXanh ngọc
Thử tìm hiểu cf thử nha
 
Anh chị cho em hỏi cách tô màu dòng excel theo điều kiện với ạ.
em có bảng sản phẩm như sau
Cứ sản phẩm ký hiệu màu là XR thì sẽ tô màu xanh rêu, tương tự với các loại màu khác ạ.
nhưng hiện nay em tô thủ công lâu quá.
Anh chị có cách nào chỉ giúp em , cứ ở cột màu đánh "XR" thì tự động dòng đó sẽ được tô màu xanh rêu không ạ (tương tự với các màu khác ạ)
Em cám ơn!
STTmã sản phẩmMàuQuy cáchtrọng lượngsố métghi chú
1​
SP001XRXanh rêu
2​
SP002DDĐỏ đậm
3​
SP003XDXanh dương
4​
SP004XNXanh ngọc
5​
SP005XRXanh rêu
6​
SP006DDĐỏ đậm
7​
SP007XDXanh dương
8​
SP008XNXanh ngọc
9​
SP009XRXanh rêu
10​
SP010DDĐỏ đậm
11​
SP011XDXanh dương
12​
SP012XNXanh ngọc
 

File đính kèm

Anh chị cho em hỏi cách tô màu dòng excel theo điều kiện với ạ.
em có bảng sản phẩm như sau
Cứ sản phẩm ký hiệu màu là XR thì sẽ tô màu xanh rêu, tương tự với các loại màu khác ạ.
nhưng hiện nay em tô thủ công lâu quá.
Anh chị có cách nào chỉ giúp em , cứ ở cột màu đánh "XR" thì tự động dòng đó sẽ được tô màu xanh rêu không ạ (tương tự với các màu khác ạ)
Em cám ơn!
STTmã sản phẩmMàuQuy cáchtrọng lượngsố métghi chú
1​
SP001XRXanh rêu
2​
SP002DDĐỏ đậm
3​
SP003XDXanh dương
4​
SP004XNXanh ngọc
5​
SP005XRXanh rêu
6​
SP006DDĐỏ đậm
7​
SP007XDXanh dương
8​
SP008XNXanh ngọc
9​
SP009XRXanh rêu
10​
SP010DDĐỏ đậm
11​
SP011XDXanh dương
12​
SP012XNXanh ngọc
dùng conditional fomatting, cái này dễ làm lắm ad, lên yt nhiều clip hướng dẫn thôi
 
anh ơi. cái đó chỉ tô màu ô chứa chữ thôi. ý em là tô cả dòng của bảng cơ ạ
 
viết lệnh là trong cf là được,
 
Anh chị cho em hỏi cách tô màu dòng excel theo điều kiện với ạ.
em có bảng sản phẩm như sau
Cứ sản phẩm ký hiệu màu là XR thì sẽ tô màu xanh rêu, tương tự với các loại màu khác ạ.
nhưng hiện nay em tô thủ công lâu quá.
Anh chị có cách nào chỉ giúp em , cứ ở cột màu đánh "XR" thì tự động dòng đó sẽ được tô màu xanh rêu không ạ (tương tự với các màu khác ạ)
Em cám ơn!
STTmã sản phẩmMàuQuy cáchtrọng lượngsố métghi chú
1​
SP001XRXanh rêu
2​
SP002DDĐỏ đậm
3​
SP003XDXanh dương
4​
SP004XNXanh ngọc
5​
SP005XRXanh rêu
6​
SP006DDĐỏ đậm
7​
SP007XDXanh dương
8​
SP008XNXanh ngọc
9​
SP009XRXanh rêu
10​
SP010DDĐỏ đậm
11​
SP011XDXanh dương
12​
SP012XNXanh ngọc
Bài đã được tự động gộp:

các màu khác tương tự nhé b
 

File đính kèm

Nếu bạn muốn sử dụng VBA thì sử dụng hàm dưới đây


Sau khi copy code vào một module thì có thể sử dụng:

Gõ vào Ô C1 công thức sau:

Cách 1: Nhập mảng trực tiếp

=FillColorByCondition(A2:G10000,{"XR", 232324, "DD", 12123, "XD", 42424}, "C", -1, "Màu*")


Cách 2: Nhập mảng gián tiếp
Nếu Cột H chứa "XR",... Màu nền được lấy làm giá trị màu

=FillColorByCondition(A2:G10000,H1:H4, "C", -1, "Màu*")

5 đối số:
A2:G10000 --------------------- sẽ là bảng nhập vào bắt đầu từ Hàng chứa dữ liệu
{"XR",232324} hoặc H1:H4 --- sẽ là Giá trị và màu
"C" hoặc 1 ------------------- Là duyệt ở cột C hoặc duyệt ở cột 1 của bảng dữ liệu.
-1 ------------------------------ Là Màu nền: Nếu <0 thì không màu nền
"Màu*" ------------------------ Đặt tên cho ô đặt công thức.


------------------------------
JavaScript:
Option Explicit
#If VBA7 Then
  Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongPtr, ByVal lpTimerFunc As LongPtr) As Long
  Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
  Private Declare Function SetTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  Private Declare Function KillTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
#End If

Private fRN_TimerID As Long

Function FillColorByCondition(Optional ByVal Target As Range, _
                              Optional ByVal ConditionsValue, _
                              Optional ByVal Column, _
                              Optional ByVal BackcolorDefault As Long = -1, _
                              Optional ByVal NameForCell As String = "")
  FillColorByCondition = NameForCell
  On Error Resume Next
  Static a, b, c, d As Boolean, e As Long, i, j, p As Long, l As Long
  If fRN_TimerID <> 0 Then KillTimer 0&, fRN_TimerID
  If VBA.TypeName(Application.Caller) = "Range" Then
    Set a = Target
    If VBA.TypeName(ConditionsValue) = "Range" Then
      Set b = ConditionsValue
      l = b.Rows.Count: p = 1
    Else
      b = ConditionsValue
      l = UBound(b)
    End If
    If VBA.IsNumeric(Column) Then
      c = CLng(Column)
    Else
      c = Columns(Column).Column - Target.Column + 1
    End If
    e = BackcolorDefault
    fRN_TimerID = SetTimer(0&, 0&, 1, AddressOf FillColorByCondition_Callback)
  Else
    Dim k As Long, bb, r() As Range, o, h, m As Boolean, n As Long, y, z
    o = a.Value: h = a.Columns.Count
    n = a(a.Rows.Count, 1).End(3).Row - a(1, 1).Row + 1
    If n > 0 Then
      ReDim r(1 To l) As Range
      If p > 0 Then
        bb = b.Value: bb = Application.Transpose(bb)
        y = 1
      Else
        y = 2
      End If
     
      For i = 1 To n
        For j = 1 To l Step y
          If o(i, c) = bb(j) Then
            k = k + 1
            If r(j) Is Nothing Then
              Set r(j) = a(i, 1).Resize(, h)
            Else
              Set r(j) = Application.Union(a(i, 1).Resize(, h), r(j))
            End If
            Exit For
          End If
        Next j
      Next i
      If k Then
        Dim SU As Boolean
        SU = Application.ScreenUpdating
        Application.ScreenUpdating = False
        If e >= 0 Then
          a.Interior.Color = e
        Else
          a.Interior.Pattern = xlNone
        End If
        '--------------------------------
        For j = 1 To l Step y
          If Not r(j) Is Nothing Then
            If p > 0 Then
              If b(j, 1).Interior.Pattern = xlNone Then
                z = -1
              Else
                z = b(j, 1).Interior.Color
              End If
            Else
              z = b(j + 1)
            End If
            If z >= 0 Then
              r(j).Interior.Color = z
            Else
              r(j).Interior.Pattern = xlNone
            End If
          End If
        Next j
        '--------------------------------
        Application.ScreenUpdating = SU
      End If
      Set a = Nothing
      If p > 0 Then Set b = Nothing
    End If
  End If
End Function
Private Sub FillColorByCondition_Callback()
  Call FillColorByCondition
End Sub
 
Lần chỉnh sửa cuối:
Nếu bạn muốn sử dụng VBA thì sử dụng hàm dưới đây


Sau khi copy code vào một module thì có thể sử dụng:

Gõ vào Ô C1 công thức sau:

Cách 1: Nhập mảng trực tiếp

=FillColorByCondition(A2:G10000,{"XR", 232324, "DD", 12123, "XD", 42424}, "C", -1, "Màu*")


Cách 2: Nhập mảng gián tiếp
Nếu H1:I4 Cột H chứa "XR",... Cột I chứa giá trị màu

=FillColorByCondition(A2:G10000,H1:I4, "C", -1, "Màu*")

5 đối số:
A2:G10000 sẽ là bảng nhập vào bắt đầu từ Hàng chứa dữ liệu
{"XR",232324} sẽ là Giá trị và màu
"C" hoặc 1 Là duyệt ở cột C hoặc duyệt ở cột 1 của bảng dữ liệu.
-1 Là Màu nền: Nếu <0 thì không màu nền
"Màu*" Đặt tên cho ô đặt công thức.


------------------------------
JavaScript:
Option Explicit
#If VBA7 Then
  Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongPtr, ByVal lpTimerFunc As LongPtr) As Long
  Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
  Private Declare Function SetTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  Private Declare Function KillTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
#End If

Private fRN_TimerID As Long

Function FillColorByCondition(Optional ByVal Target As Range, _
                              Optional ByVal ConditionValue, _
                              Optional ByVal Column, _
                              Optional ByVal BackcolorDefault As Long = -1, _
                              Optional ByVal NameForCell As String = "")
  FillColorByCondition = NameForCell
  On Error Resume Next
  Static a, b, c, d As Long, e As Long, i, j
  If fRN_TimerID <> 0 Then KillTimer 0&, fRN_TimerID
  If VBA.TypeName(Application.Caller) = "Range" Then
    Set a = Target
    b = ConditionValue
    If VBA.IsNumeric(Column) Then
      c = CLng(Column)
    Else
      c = Columns(Column).Column - Target.Column + 1
    End If
    e = BackcolorDefault
    fRN_TimerID = SetTimer(0&, 0&, 1, AddressOf FillColorByCondition_Callback)
  Else
    Dim k As Long, r() As Range, o, h, m As Boolean, n As Long, l As Long, p As Long, y, z
    o = a.Value: h = a.Columns.Count
    n = a(a.Rows.Count, 1).End(3).Row - a(1, 1).Row + 1
    If n > 0 Then
      ReDim r(UBound(b)) As Range
      l = UBound(b)
      p = UBound(b, 2)
      y = 2: If p > 0 Then y = 1
      For i = 1 To n
        For j = 1 To l Step y
          If p > 0 Then
            z = b(j, 1)
          Else
            z = b(j)
          End If
          If o(i, c) = b(j) Then
            k = k + 1
            If r(j) Is Nothing Then
              Set r(j) = a(i, 1).Resize(, h)
            Else
              Set r(j) = Application.Union(a(i, 1).Resize(, h), r(j))
            End If
            Exit For
          End If
        Next j
      Next i
      If k Then
        Dim SU As Boolean
        SU = Application.ScreenUpdating
        Application.ScreenUpdating = False
        If e >= 0 Then
          a.Interior.Color = e
        Else
          a.Interior.Pattern = xlNone
        End If
        '--------------------------------
        For j = 1 To l Step i
          If Not r(j) Is Nothing Then
            If p > 0 Then
              z = b(j, 2)
            Else
              z = b(j)
            End If
            If z >= 0 Then
              r(j).Interior.Color = z
            Else
              r(j).Interior.Pattern = xlNone
            End If
          End If
        Next j
        '--------------------------------
        Application.ScreenUpdating = SU
      End If
      Set a = Nothing
    End If
  End If
End Function
Private Sub FillColorByCondition_Callback()
  Call FillColorByCondition
End Sub
Dear bạn sẵn đây mình hỏi xíu vba luôn.. mình có một lệnh code (ẩn dòng khi rỗng và hiện dòng khi có dữ liệu) giờ mình muốn gắn vào control from . Vd số 1 mình bấm nút button lên là 2 thì lệnh code đó hoạt động đồng thời luôn... V minh phải làm sao ạ. Cảm ơn bạn
 
Anh chị cho em hỏi cách tô màu dòng excel theo điều kiện với ạ.
em có bảng sản phẩm như sau
Cứ sản phẩm ký hiệu màu là XR thì sẽ tô màu xanh rêu, tương tự với các loại màu khác ạ.
nhưng hiện nay em tô thủ công lâu quá.
Anh chị có cách nào chỉ giúp em , cứ ở cột màu đánh "XR" thì tự động dòng đó sẽ được tô màu xanh rêu không ạ (tương tự với các màu khác ạ)
Em cám ơn!
Nếu File sử dụng Conditional fornating để định dạng theo điều kiện cho nhiều Cell sẽ làm cho File ì ạch nếu sử dụng nhiều quá có ngày sẽ bực mình vì nó.
Chuyển sang VBA cho nó nhẹ nhàng.
 

File đính kèm

cám ơn bạn nhiều ạ
Bài đã được tự động gộp:

Nếu bạn muốn sử dụng VBA thì sử dụng hàm dưới đây


Sau khi copy code vào một module thì có thể sử dụng:

Gõ vào Ô C1 công thức sau:

Cách 1: Nhập mảng trực tiếp

=FillColorByCondition(A2:G10000,{"XR", 232324, "DD", 12123, "XD", 42424}, "C", -1, "Màu*")


Cách 2: Nhập mảng gián tiếp
Nếu Cột H chứa "XR",... Màu nền được lấy làm giá trị màu

=FillColorByCondition(A2:G10000,H1:H4, "C", -1, "Màu*")

5 đối số:
A2:G10000 --------------------- sẽ là bảng nhập vào bắt đầu từ Hàng chứa dữ liệu
{"XR",232324} hoặc H1:H4 --- sẽ là Giá trị và màu
"C" hoặc 1 ------------------- Là duyệt ở cột C hoặc duyệt ở cột 1 của bảng dữ liệu.
-1 ------------------------------ Là Màu nền: Nếu <0 thì không màu nền
"Màu*" ------------------------ Đặt tên cho ô đặt công thức.


------------------------------
JavaScript:
Option Explicit
#If VBA7 Then
  Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongPtr, ByVal lpTimerFunc As LongPtr) As Long
  Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
  Private Declare Function SetTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  Private Declare Function KillTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
#End If

Private fRN_TimerID As Long

Function FillColorByCondition(Optional ByVal Target As Range, _
                              Optional ByVal ConditionsValue, _
                              Optional ByVal Column, _
                              Optional ByVal BackcolorDefault As Long = -1, _
                              Optional ByVal NameForCell As String = "")
  FillColorByCondition = NameForCell
  On Error Resume Next
  Static a, b, c, d As Boolean, e As Long, i, j, p As Long, l As Long
  If fRN_TimerID <> 0 Then KillTimer 0&, fRN_TimerID
  If VBA.TypeName(Application.Caller) = "Range" Then
    Set a = Target
    If VBA.TypeName(ConditionsValue) = "Range" Then
      Set b = ConditionsValue
      l = b.Rows.Count: p = 1
    Else
      b = ConditionsValue
      l = UBound(b)
    End If
    If VBA.IsNumeric(Column) Then
      c = CLng(Column)
    Else
      c = Columns(Column).Column - Target.Column + 1
    End If
    e = BackcolorDefault
    fRN_TimerID = SetTimer(0&, 0&, 1, AddressOf FillColorByCondition_Callback)
  Else
    Dim k As Long, bb, r() As Range, o, h, m As Boolean, n As Long, y, z
    o = a.Value: h = a.Columns.Count
    n = a(a.Rows.Count, 1).End(3).Row - a(1, 1).Row + 1
    If n > 0 Then
      ReDim r(1 To l) As Range
      If p > 0 Then
        bb = b.Value: bb = Application.Transpose(bb)
        y = 1
      Else
        y = 2
      End If
    
      For i = 1 To n
        For j = 1 To l Step y
          If o(i, c) = bb(j) Then
            k = k + 1
            If r(j) Is Nothing Then
              Set r(j) = a(i, 1).Resize(, h)
            Else
              Set r(j) = Application.Union(a(i, 1).Resize(, h), r(j))
            End If
            Exit For
          End If
        Next j
      Next i
      If k Then
        Dim SU As Boolean
        SU = Application.ScreenUpdating
        Application.ScreenUpdating = False
        If e >= 0 Then
          a.Interior.Color = e
        Else
          a.Interior.Pattern = xlNone
        End If
        '--------------------------------
        For j = 1 To l Step y
          If Not r(j) Is Nothing Then
            If p > 0 Then
              If b(j, 1).Interior.Pattern = xlNone Then
                z = -1
              Else
                z = b(j, 1).Interior.Color
              End If
            Else
              z = b(j + 1)
            End If
            If z >= 0 Then
              r(j).Interior.Color = z
            Else
              r(j).Interior.Pattern = xlNone
            End If
          End If
        Next j
        '--------------------------------
        Application.ScreenUpdating = SU
      End If
      Set a = Nothing
      If p > 0 Then Set b = Nothing
    End If
  End If
End Function
Private Sub FillColorByCondition_Callback()
  Call FillColorByCondition
End Sub
Cám ơn anh. nhưng em gà mờ lắm. chưa học VBA bao giờ. chỉ tính toán bình thường trên excel thôi ạ
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom