问:怎么给带颜色的单元格添加序号?
具体应用

如果你也遇到过类似的问题,可以先自己想想怎么办?

你可能看到公式里有个ys,这是个什么东西?其实它是一个定义的名称。我们在之前的文章《宏表函数get.cell获取单元格的信息》也说过,想要用函数获取单元格的底纹颜色,只能用宏表函数get.cell。而宏表函数只能在定义名称里使用。
第一步,先获取单元格的底纹颜色。
首先选中B1单元格,然后点击【公式】-【定义名称】,弹出新建名称对话框。在名称里输入ys,在引用位置输入=GET.CELL(63,$A1),点确定。这样名称就定义好了。用定义名称,一定要注意相对引用的位置关系。


有了这个思路就好写公式了,比如我在B2单元格输入公式=IF(ys>0,0,B1+1),向下填充,发现结果是对的。

我们用r1c1的相对引用来解决这个问题,INDIRECT("r[-1]c",0)返回活动单元格的上一个单元格。r[-1]c中的r表示行,c表示列。[]表示相对引用,-1表示活动单元格向上偏移一行。c后面没有列号,表示活动单元格所在的列。
虽然用这种方法还是返回上一个单元格,但是它更为奇特。当在B1单元格输入公式=INDIRECT("r[-1]c",0)时,不但不会出错,还会返回B列的最后一个单元格(B1048576)的值。


Sub 给带颜色的单元格添加序号()
Dim rng As Range, r As Range, n As Integer
Set rng = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).Row)
For Each r In rng
If r.Interior.ColorIndex > 0 Then
r.Offset(0, 1) = 0
n = 0
Else
n = n + 1
r.Offset(0, 1) = n
End If
Next
End Sub
https://pan.baidu.com/s/1MDg5pVeb9vv3mt-oYaV3Lw
赞 (0)