我有一个服务器可用性脚本,在.csv文件中报告0或1。我正在尝试在Excel 2010中创建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& amp;的新手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
我还尝试了一系列不同的公式和条件格式的解决方案,如SO和其他地方所见,但它坦率地看起来很笨重而且不够强大
实际文件包含16列@ 720行,我将分析其中的许多列。我的目的是使用过滤来查看突出显示的单元格。
如果函数可以忽略更大的'1'
系列中的单个'0',则可获得额外的功劳答案 0 :(得分:2)
这将遍历所有列:(编辑:直到到达最后一列)
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
答案 1 :(得分:1)
我们将使用 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 强>
以下是使用多列调用它的修改(在此示例中 B 通过 G )
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 s)通常用于将值返回到单元格而不是一般的单元格更新。
答案 2 :(得分:1)
您也可以使用条件格式来执行此操作。
如果您在上面列出的数据位于范围A2:E9(需要顶部的缓冲区行,因为您稍后会看到),那么您可以选择范围B3:E9并创建一个新的规则和Use a formula to determine which cells to format
并输入以下公式:
=OR(SUM(B1:B3)=3,SUM(B2:B4)=3,SUM(B3:B5)=3)
至于您的额外信用,可以这样做,但您需要提供更好的标准。