Excel,突出显示一系列连续的重复值

我有一个服务器可用性脚本,在.csv文件中报告0或1。 我试图在Excel 2010中创build一个VBA用户定义的函数来分析文件中的每个列(服务器),并突出显示连续3次出现“1”的所有实例。

Time srv1 srv2 srv3 srv4 2:01:00 AM 0 0 0 0 2:21:00 AM 1 0 0 0 2:41:00 AM 1 0 0 0 3:01:00 AM 1 0 0 0 3:21:00 AM 1 0 0 0 3:41:00 AM 0 0 0 0 4:01:00 AM 0 0 0 0 

我是一个VBA和UDF的新手,但这是我试过的(没有成功):

 Function HighlightConsecutive(ByRef rng As Range, myNum) As Long Dim a, i As Long a = rng.Value For i = 1 To UBound(a, 2) - 1 If (a(1, i + 1) = myNum) * (a(1, i) = myNum) Then CountConsecutive = CountConsecutive + 1 End If If (CountConsecutive >= 3) Then ActiveCell.Interior.Color = RGB(255, 0, 0) End If Next End Function 

我也尝试了一系列不同的解决scheme,如SO和其他地方所看到的公式和条件格式,但坦率地说,它看起来很笨重,不够强大

实际的文件包含16列720行,我将有很多要分析。 我的意图是使用过滤来查看只是突出显示的单元格。

如果function可以忽略更大系列的“1”中的单个“0”,则额外信贷

这将遍历所有列:(编辑:直到它到达最后一列)

 Sub ColorCells() Dim cl As Long, N As Long, i As Long, LastCL As Long N = Cells(Rows.Count, "A").End(xlUp).Row LastCL = Cells(2, Columns.Count).End(xlToLeft).Column For cl = 2 To LastCL For i = 3 To N Set r1 = Cells(i, cl) Set r2 = r1.Offset(-1, 0) Set r3 = r1.Offset(-2, 0) If r1.Value = 1 And r2.Value = 1 And r3.Value = 1 Then Union(r1, r2, r3).Interior.Color = RGB(255, 0, 0) End If Next i Next cl End Sub 

我们将使用一个而不是一个函数。 这个子部分看B

 Sub ColorCells() Dim cl As String, N As Long, i As Long cl = "B" N = Cells(Rows.Count, cl).End(xlUp).Row For i = 3 To N Set r1 = Cells(i, cl) Set r2 = r1.Offset(-1, 0) Set r3 = r1.Offset(-2, 0) If r1.Value = 1 And r2.Value = 1 And r3.Value = 1 Then Union(r1, r2, r3).Interior.Color = RGB(255, 0, 0) End If Next i End Sub 

你可以适应其他列。

编辑#1

这里是修改调用它与多个列(在这个例子中BG

 Sub ColorCells(cl As Variant) Dim N As Long, i As Long N = Cells(Rows.Count, cl).End(xlUp).Row For i = 3 To N Set r1 = Cells(i, cl) Set r2 = r1.Offset(-1, 0) Set r3 = r1.Offset(-2, 0) If r1.Value = 1 And r2.Value = 1 And r3.Value = 1 Then Union(r1, r2, r3).Interior.Color = RGB(255, 0, 0) End If Next i End Sub Sub MAIN() For i = 2 To 6 Call ColorCells(i) Next i End Sub 

VBA函数( UDF )中,通常用于将值返回给单元格,而不是用于一般的单元格更新。

你也可以用条件格式来做到这一点。

如果您上面列出的数据在范围A2:E9中(需要缓冲区行在顶部,稍后您会看到),那么您可以select范围B3:E9并创build新规则,并Use a formula to determine which cells to format并input以下公式:

 =OR(SUM(B1:B3)=3,SUM(B2:B4)=3,SUM(B3:B5)=3) 

至于你的额外的信用,这是可能的,但你需要提供更好的标准。