我使用条件格式设置在名为“Loops_1000”的保存范围内将单元格设为红色,这些范围具有重复值。为了便于讨论,范围是A1:Z100
。所以现在我可能有100个单元格,其中包含各种标记数据(例如C-03012034
)。格式为常规。我想搜索范围并找到所有红色单元格(背景红色= 3我相信)并将它们中的数据按升序返回到单个空列(AA)。
我使用名称管理器在此站点上查找了一个解决方案,以创建一个名为CellColor
的函数。它看起来像这样:
=GET.CELL(63,INDIRECT("rc",FALSE))
然后在一个单元格中我使用了以下内容:
=IF(CellColor=3,"EXISTING","NOT USED") as a test.
它返回“未使用”并且没有返回“现有”(即使我尝试了各种颜色。对于一个简单的测试,我将调色板上的红色= 3并将"=CellColor"
放入因此,我的红细胞返回值“3”。
我需要更多帮助来搜索范围,找到所有红色单元格并在每个红色单元格中给出值,并按升序将这些值返回到单个列中(或者我可以在获取数据后进行排序以简化功能)。
所以更大的问题是宏或VBA是否可以解释条件格式=重复值的单元格背景颜色
答案 0 :(得分:1)
我确信有一种更有效的方式对此进行编码,但这可能对您有用。这假设第1行包含标题:
Sub Macro1()
'
' Macro1 Macro
'
'clears out the destination
Range("B1:B100").ClearContents
'filters by color
Rows("1:1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$2:$A$100").AutoFilter Field:=1, Criteria1:=RGB(255, 0, _
0), Operator:=xlFilterFontColor
'copies the visible area
Range("A2:A100").Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
'pastes into next column starting below the header
Range("B2").Select
ActiveSheet.Paste
'removes filer
Selection.AutoFilter
End Sub
答案 1 :(得分:0)
所以更大的问题是宏或VBA是否可以解释条件格式=重复值的单元格背景颜色
有时,但几乎总是不值得努力。通常更简单的是基于原始条件进行确定,该原始条件将打开或关闭规则,而不是检查单元格是否为红色'或不。一些困难:
.Interior.Color = 3
。 .StopIfTrue
状态也会生效,以确定是否应该检查更多CF规则。Application.Evaluate
需要A1单元格引用,因此您需要Application.ConvertFormula
从R1C1到A1 RelativeTo:=
正在检查的单元格,而不是“适用于:m”中的第一个单元格。 .AddUniqueValues DupeUnique:=xlDuplicate
)没有我知道可以在任何给定单元格上确定CF状态的属性或方法。正如您所看到的,当您真正想要的是生成重复列表时,这很快就会成为一个漏洞。这是一个简短的宏,用于查找,计算和整理Range("Loops_1000")
中的重复项。
Sub Dupes_in_Loops_1000()
Dim c As Range
With ActiveSheet
.Columns("AA").ClearContents
.Cells(1, "AA").Resize(1, 2) = Array("dupes", "nmbr")
For Each c In Range("Loops_1000")
If Application.CountIf(Range("Loops_1000"), c.Value) > 1 _
And Not CBool(Application.CountIf(.Columns("AA"), c.Value)) Then
.Cells(Rows.Count, "AA").End(xlUp).Offset(1, 0) = c.Value
.Cells(Rows.Count, "AA").End(xlUp).Offset(0, 1) = _
Application.CountIf(Range("Loops_1000"), c.Value)
End If
Next c
With .Columns("AA")
.Cells.Sort key1:=.Columns(1), order1:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlYes
End With
End With
End Sub
大量使用Application.CountIf
可能不是最优雅的代码,但评估每个单元格的CF规则会变得更加高效。