DEF*_*123 1 excel vba excel-vba
我有一列有不同的数字.我的代码正在对它们进行排序,并检查该列中出现的相同数字的频率.如果一个值出现超过3次,则应为包含该值的所有行着色,否则应删除行.
到目前为止,这是我的代码:
Sub mySub10()
Dim wsTEMP As Worksheet
Dim wsSPECIAL As Worksheet
Dim wsTEMPLrow As Long
Dim i As Integer
Dim x As Integer
Dim rng As Range
Set wsTEMP = ThisWorkbook.Sheets("Temp")
Set wsSPECIAL = ThisWorkbook.Sheets("Spezial")
Application.ScreenUpdating = False
wsTEMPLrow = Worksheets("Temp").Range("A" & Worksheets("Temp").Rows.Count).End(xlUp).Row
With wsTEMP
.Columns("A:Q").Sort Key1:=.Range("L1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
For i = wsTEMPLrow To 5 Step -1
Set rng = Range("A" & i)
If Cells(i, 12).Value = Cells(i - 1, 12).Value And Cells(i, 12).Value = Cells(i - 2, 12).Value And Cells(i, 12).Value = Cells(i - 3, 12).Value And Cells(i, 12).Value = Cells(i - 4, 12).Value Then
Range("A" & i).EntireRow.Interior.ColorIndex = 6
Range("A" & i - 1).EntireRow.Interior.ColorIndex = 6
End If
Next
For i = wsTEMPLrow To 2 Step -1
Set rng = Range("A" & i)
If rng.Interior.ColorIndex <> 6 Then
rng.EntireRow.Delete
End If
Next
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
突出显示部分可以使用条件格式和COUNTIF.只有通过VBA才能删除.
我假设带有数字的列是列A.
COUNTIF 计算出现次数要计算列中值的出现次数A,只需在列的第一行中使用此公式,并用它填充整个列:
=COUNTIF(A:A, A1)
Run Code Online (Sandbox Code Playgroud)
COUNTIF计算满足给定条件(第二个参数)的指定范围(第一个参数)中的所有值.A:A是整栏A.将单元格引用指定为条件,COUNTIF表示应计算相同值的出现次数.
现在,您可以删除包含COUNTIF公式的列,因为它仅用于演示如何COUNTIF工作.它将不再需要.
使用上面写的公式,可以有条件地格式化具有重复三次以上值的单元格.通过使列引用为绝对,可以以与第一个单元格相同的方式格式化整行.选择整个表,A1激活单元格,并使用以下公式定义的条件设置条件格式:
COUNTIF($A:$A, $A1) > 3
Run Code Online (Sandbox Code Playgroud)
如果需要,将3更改为任何其他常量.例如,使用1将格式应用于所有重复值.
$在地址的一部分是绝对寻址之前.$A1是与A当前格式化单元格在同一行中的列中的单元格(因为行号仍然是相对的).有关单元格寻址的详细信息,请参阅关于单元格和范围引用@ Excel支持页面.
使用VBA,您可以应用如下格式:
Selection.Cells(1,1).Activate
Selection.FormatConditions.Add Type:=xlExpression, Operator:=xlGreater, _
Formula1:="COUNTIF($A:$A, $A1) > 3"
Selection.FormatConditions(1).Interior.ColorIndex = 6
Run Code Online (Sandbox Code Playgroud)
使用Range("A:A").Select选择整个第一列,如果没有做选择,否则.Selection.FormatConditions.Delete选择范围后使用以删除先前设置的条件格式.您也可能想要更改格式.最后一行只是将字体颜色设置为当前调色板中的颜色编号6.它在默认调色板中是黄色的,可以在MS Graph VB参考页面上看到ColorIndex属性.
看到:
要删除未格式化的行,请遍历单元格,使用单元格的颜色cell.DisplayFormat.Interior.ColorIndex,cell.EntireRow.Delete如果未着色则调用:
Dim i As Long
For i = Selection.Rows.Count To 1 Step -1
With Selection.Cells(i, 1)
If .DisplayFormat.Interior.ColorIndex <> 6 Then
.EntireRow.Delete
End If
End With
Next i
Run Code Online (Sandbox Code Playgroud)