Office中国论坛/Access中国论坛

标题: 归类填充颜色,不一样的填充不一样的底纹 [打印本页]

作者: zhuangyongjin    时间: 2016-1-5 09:59
标题: 归类填充颜色,不一样的填充不一样的底纹
归类填充颜色,不一样的填充不一样的底纹

作者: pureshadow    时间: 2016-1-5 11:18
这个不需要VBA,条件格式就可以了
公式用:
  1. =MOD(INT(SUMPRODUCT(1/COUNTIF(A$3:A3,A$3:A3))),2)
复制代码

作者: zhuangyongjin    时间: 2016-1-5 13:04
pureshadow 发表于 2016-1-5 11:18
这个不需要VBA,条件格式就可以了
公式用:

谢谢你
但是,我还要做其它的一些操作,用VBA比较方便
作者: roych    时间: 2016-1-5 16:22
本帖最后由 roych 于 2016-1-7 10:08 编辑

写得有点啰嗦,有时间再优化呗。
  1. Sub test()
  2.     Dim i As Long, j As Long
  3.     Dim k As Range, m As Range
  4.     '预填充
  5.     Set k = Sheet1.Range("A3")
  6.     k.Interior.Color = vbYellow
  7.     For j = 0 To 1
  8.         For i = 1 To Sheet1.Range("A2").End(xlDown).Row - 2
  9.             Set m = Sheet1.Range("A2").Offset(i, j)
  10.             '值相同则填充上一个单元格的颜色【即黄色】
  11.             If m.Value = k.Value Then
  12.                 m.Interior.Color = k.Interior.Color
  13.             Else
  14.                '如果单元格不同,则预填充绿色
  15.                 m.Interior.Color = RGB(0, 192, 0)
  16.                '如果跟上一个单元格颜色一致,则改为黄色
  17.                 If m.Interior.Color = k.Interior.Color Then
  18.                     m.Interior.Color = vbYellow
  19.                 End If
  20.             End If
  21.                 Set k = m
  22.         Next
  23.     Next
  24. End Sub
复制代码


详见附件。
[attach]57789[/attach]

作者: zhuangyongjin    时间: 2016-1-6 17:15
roych 发表于 2016-1-5 16:22
写得有点啰嗦,有时间再优化呗。

详见附件。

谢谢您
代码测试了下,一直运行过程,颜色会一直改变
作者: roych    时间: 2016-1-7 10:09
zhuangyongjin 发表于 2016-1-6 17:15
谢谢您
代码测试了下,一直运行过程,颜色会一直改变

附件已更新,请自行下载。
作者: pureshadow    时间: 2016-1-7 11:21
这个呢

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. On Error Resume Next
  3. Cells.SpecialCells(xlCellTypeBlanks).Interior.Pattern = xlNone
  4. If Target = Target.Offset(-1, 0) Then
  5.     Target.Interior.Color = Target.Offset(-1, 0).Interior.Color
  6. Else
  7.     If Target.Offset(-1, 0).Interior.Color = 65535 Then
  8.         Target.Interior.Color = 5296274
  9.     Else
  10.         Target.Interior.Color = 65535
  11.     End If
  12. End If
  13. End Sub
复制代码

作者: zhuangyongjin    时间: 2016-1-8 07:38
pureshadow 发表于 2016-1-7 11:21
这个呢

谢谢您
测试了下,如果跳行录入数据,会出现相邻两行的数据不一样,但颜色一样
作者: zhuangyongjin    时间: 2016-1-8 07:40
本帖最后由 zhuangyongjin 于 2016-1-8 07:49 编辑
roych 发表于 2016-1-7 10:09
附件已更新,请自行下载。

谢谢您,您的方法可行
不过,里面有一句代码我不理解                m.Interior.Color = RGB(0, 192, 0)
                If m.Interior.Color = k.Interior.Color Then   
                    m.Interior.Color = vbYellow
                End If当 m <>k时,单元格填充的是绿色。
然后,当单元格的颜色等于k的颜色,那么单元格的颜色就是黄色,但是k表示A3,本来就是黄色啊,那么这个条件If m.Interior.Color = k.Interior.Color 怎么会成立呢




作者: roych    时间: 2016-1-8 08:43
zhuangyongjin 发表于 2016-1-8 07:40
谢谢您,您的方法可行
不过,里面有一句代码我不理解                m.Interior.Color = RGB(0, 192, 0 ...

请留意 set k=m
作者: zhuangyongjin    时间: 2016-1-9 07:36
roych 发表于 2016-1-8 08:43
请留意 set k=m

谢谢你,现在明白了。
现在这个表格,可以弄成黄色和绿色两种颜色,如果我想要弄成黄色、绿色、蓝色三种颜色,需要怎么修改代码呢
作者: roych    时间: 2016-1-9 09:21
zhuangyongjin 发表于 2016-1-9 07:36
谢谢你,现在明白了。
现在这个表格,可以弄成黄色和绿色两种颜色,如果我想要弄成黄色、绿色、蓝色三种 ...

类似的,只是需要多定义一些变量罢了。定义数组可能会方便一些。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3