VBA: 随机颜色,同列数据相同值同一颜色(涉及排序,字典)

方法一:先排序,判断下一行与上一行数据是否一致,不致时设置另一底色

Sub SameColor()
    Dim LastRow As Long
    Dim i As Long
    Dim Value  As Variant
    Dim ColorValue As Long
      
    '先按任务单号进行排序
    ActiveSheet.Range("A:Z").Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes
      
    ' 获取最后一行的行号
    LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
      
    ' 循环检查每一行的值
    For i = 2 To LastRow
        Value  = ActiveSheet.Cells(i, 1).Value '列A为要检查的列
      

        ' 检查是否与上一行的值相同,不同的话,取新的颜色
        If i > 1 And Value  <> ActiveSheet.Cells(i - 1, 1).Value Then
        r = WorksheetFunction.RandBetween(0, 255)
        g = WorksheetFunction.RandBetween(0, 255)
        b = WorksheetFunction.RandBetween(0, 255)
        
        ColorValue = RGB(r, g, b)
        
        End If
        
        ActiveSheet.Cells(i, 1).Interior.Color = ColorValue
    Next i
End Sub

在这里插入图片描述

方法二:使用字典的方法,即使顺序是乱的,也可以相同值相同颜色

Sub samecolor2()
  Dim rowsum As Integer
  Dim arr, brr
  Dim i As Integer, j As Integer, k As Integer, r As Integer, g As Integer, b As Integer
  Dim ColorValue1 As Long
  Dim value As Variant, key As Variant

'前期绑定
 Dim d As Scripting.Dictionary
 Set d = New Scripting.Dictionary
''后期绑定
'Dim d As Object
'Set d = CreateObject("Scripting.Dictionary")

  rowsum = ActiveSheet.Range("B1").End(xlDown).row
  arr = ActiveSheet.Range("A2:A" & rowsum)
    For i = 1 To UBound(arr)
      d(arr(i, 1)) = arr(i, 1) '  如是写成“d(arr(i, 1)) =""”会造成后面value值空值
    Next    
k = d.Count '字典中的行数
   
 For i = 1 To k

    r = WorksheetFunction.RandBetween(0, 255)
    g = WorksheetFunction.RandBetween(0, 255)
    b = WorksheetFunction.RandBetween(0, 255)
    
    ColorValue1 = RGB(r, g, b)
    
    value = d.Items(i - 1) '数组中序号从0开始
    ''后期绑定改成:value = d.keys()(i - 1)
    
    '这里判断值是否与字典中的相同,相同的话则设置相应底色
     For j = 2 To rowsum
      If ActiveSheet.Cells(j, 1) = value Then
      ActiveSheet.Cells(j, 1).Interior.Color = ColorValue1
      End If
     Next
 Next
Set d = Nothing

End Sub

在这里插入图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值