Tô màu bằng VBA theo bảng mã quy định (1 người xem)

  • Thread starter Thread starter stao
  • Ngày gửi Ngày gửi
Liên hệ QC

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

stao

Thành viên hoạt động
Tham gia
29/7/08
Bài viết
113
Được thích
26
Chào các Bác,

Mình có thông tin file như sau:
- Sheet DT: mã quy định code nào màu nào.
- Sheet RS: tô màu B5:G8 theo quy định ở Sheet DT, không phân biệt chữ hoa chữ thường.

Mình đã làm theo macro nhưng dài quá vì nhiều mã cần tô màu và danh mục mã này lại không cố định.
Nhờ các Bác giúp mình code VBA tổng quát theo vòng lặp.

Cảm ơn nhiều.
 

File đính kèm

Chào các Bác,

Mình có thông tin file như sau:
- Sheet DT: mã quy định code nào màu nào.
- Sheet RS: tô màu B5:G8 theo quy định ở Sheet DT, không phân biệt chữ hoa chữ thường.

Mình đã làm theo macro nhưng dài quá vì nhiều mã cần tô màu và danh mục mã này lại không cố định.
Nhờ các Bác giúp mình code VBA tổng quát theo vòng lặp.

Cảm ơn nhiều.
Chỉ có 5 màu ta dùng Conditional Formating cho nhanh bạn à
 
Upvote 0
Chào các Bác,

Mình có thông tin file như sau:
- Sheet DT: mã quy định code nào màu nào.
- Sheet RS: tô màu B5:G8 theo quy định ở Sheet DT, không phân biệt chữ hoa chữ thường.

Mình đã làm theo macro nhưng dài quá vì nhiều mã cần tô màu và danh mục mã này lại không cố định.
Nhờ các Bác giúp mình code VBA tổng quát theo vòng lặp.

Cảm ơn nhiều.
Tại sheet DT, tôi tạo sẳn cho bạn bảng màu (56 màu), nhưng chỉ chừa lại màu sáng, còn những màu tối tôi đã xóa (vì khó nhìn).
Cho mã ký tự của bạn vào cột A, để dựa vào đó mà giúp cho bạn sẽ dễ dàng hơn.
 

File đính kèm

Upvote 0
Chào các Bác,

Mình có thông tin file như sau:
- Sheet DT: mã quy định code nào màu nào.
- Sheet RS: tô màu B5:G8 theo quy định ở Sheet DT, không phân biệt chữ hoa chữ thường.

Mình đã làm theo macro nhưng dài quá vì nhiều mã cần tô màu và danh mục mã này lại không cố định.
Nhờ các Bác giúp mình code VBA tổng quát theo vòng lặp.

Cảm ơn nhiều.
Mã:
Sub HoaSy_Voi()
  Dim cArr(), sArr(), Res() As Range
  Dim i As Long, k As Long, j As Byte
  cArr = Sheets("DT").Range("A2", Sheets("DT").Range("B65500").End(xlUp)).Value
  ReDim Res(1 To UBound(cArr))
  sArr = Sheets("RS").Range("A1:G8").Value
  
  With CreateObject("scripting.dictionary")
    For i = 1 To UBound(cArr)
      .Item(cArr(i, 1)) = i
    Next i
    For i = 5 To 8
      For j = 2 To 7
        k = .Item(UCase(sArr(i, j)))
        If k Then
          If Res(k) Is Nothing Then
            Set Res(k) = Cells(i, j)
          Else
            Set Res(k) = Union(Res(k), Cells(i, j))
          End If
        End If
      Next j
    Next i
  End With
  For i = 1 To UBound(cArr)
    If Not Res(i) Is Nothing Then Res(i).Interior.Color = cArr(i, 2)
  Next i
End Sub
 

File đính kèm

Upvote 0
Tại sheet DT, tôi tạo sẳn cho bạn bảng màu (56 màu), nhưng chỉ chừa lại màu sáng, còn những màu tối tôi đã xóa (vì khó nhìn).
Cho mã ký tự của bạn vào cột A, để dựa vào đó mà giúp cho bạn sẽ dễ dàng hơn.
Gửi Bác file nhập các mã tương ứng màu
 

File đính kèm

Upvote 0
Mã:
Sub HoaSy_Voi()
  Dim cArr(), sArr(), Res() As Range
  Dim i As Long, k As Long, j As Byte
  cArr = Sheets("DT").Range("A2", Sheets("DT").Range("B65500").End(xlUp)).Value
  ReDim Res(1 To UBound(cArr))
  sArr = Sheets("RS").Range("A1:G8").Value
 
  With CreateObject("scripting.dictionary")
    For i = 1 To UBound(cArr)
      .Item(cArr(i, 1)) = i
    Next i
    For i = 5 To 8
      For j = 2 To 7
        k = .Item(UCase(sArr(i, j)))
        If k Then
          If Res(k) Is Nothing Then
            Set Res(k) = Cells(i, j)
          Else
            Set Res(k) = Union(Res(k), Cells(i, j))
          End If
        End If
      Next j
    Next i
  End With
  For i = 1 To UBound(cArr)
    If Not Res(i) Is Nothing Then Res(i).Interior.Color = cArr(i, 2)
  Next i
End Sub
Cảm ơn Bác. Cách này hay nè.
Khi ráp vào dữ liệu lớn thì đứng máy luôn. Không rõ mình có làm sai ở đâu không? Vì chỉ sửa i, j tương ứng với vùng dữ liệu cần tô màu.
 
Upvote 0
Cảm ơn Bác. Cách này hay nè.
Khi ráp vào dữ liệu lớn thì đứng máy luôn. Không rõ mình có làm sai ở đâu không? Vì chỉ sửa i, j tương ứng với vùng dữ liệu cần tô màu.
Lớn là đến bao nhiêu dòng?
 
Upvote 0
Cảm ơn Bác. Cách này hay nè.
Khi ráp vào dữ liệu lớn thì đứng máy luôn. Không rõ mình có làm sai ở đâu không? Vì chỉ sửa i, j tương ứng với vùng dữ liệu cần tô màu.
Dùng code sau
Mã:
Sub HoaSy_Voi()
  Dim cArr(), sArr(), Res() As Range, Rng As Range
  Dim i As Long, k As Long, j As Byte
  Application.ScreenUpdating = False
  cArr = Sheets("DT").Range("A2", Sheets("DT").Range("B65500").End(xlUp)).Value
  ReDim Res(1 To UBound(cArr))
  sArr = Sheets("RS").Range("A1:G8").Value
  With CreateObject("scripting.dictionary")
    For i = 1 To UBound(cArr)
      .Item(cArr(i, 1)) = i
    Next i
    For i = 5 To UBound(sArr)
      For j = 2 To 7
        k = .Item(UCase(sArr(i, j)))
        If k Then
          If Res(k) Is Nothing Then
            Set Res(k) = Cells(i, j)
          Else
            Set Res(k) = Union(Res(k), Cells(i, j))
            If Res(k).Cells.Count = 20 Then
              Res(k).Interior.Color = cArr(k, 2)
              Set Res(k) = Nothing
            End If
          End If
        End If
      Next j
    Next i
  End With
  For i = 1 To UBound(cArr)
    If Not Res(i) Is Nothing Then Res(i).Interior.Color = cArr(i, 2)
  Next i
  Application.ScreenUpdating = True
End Sub
If Res(k).Cells.Count = 20 Then
Nếu máy mạnh có thể chỉnh số 20 lớn hơn 1 chút
 
Upvote 0
Dữ liệu thực tế nhiều màu và trên 10.000 dòng nên muốn dùng VBA để On/Off cho nó nhẹ file Bác.
Nhiều là bao nhiêu màu?

Bảng màu trên Excel 2010 chỉ là 50 màu thọi đó. Vượt qua số này mắt thường không dễ fân biệt!
E rằng tiền mất tật mang cũng nên.
 
Upvote 0
Cảm ơn các Bác nhiều. Em đang thử nghiệm cách các Bác với dữ liệu 10.000 dòng tới 50.000 và trên 30 màu.
 
Upvote 0
Web KT

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

Back
Top Bottom