2014-11-12 2 views
0

.csv 파일에 0 또는 1을보고하는 서버 가용성 스크립트가 있습니다. Excel 2010에서 VBA 사용자 정의 함수를 만들어 파일의 각 열 (서버)을 분석하고 '1'이 3 회 이상 연속적으로 발생하는 모든 인스턴스를 강조 표시하려고합니다. Excel에서 일련의 연속 된 중복 값 강조 표시

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의에 총 초보자 해요,하지만 여기에 내가 (성공 O/W) 시도했습니다 것입니다 :

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와 다른 곳에서 볼 수 있듯이 조건부 서식이 있지만 솔직히 껄끄 럽고 강력하지는 않습니다.

실제 파일은 720 열로 16 열을 포함하며 분석 할 것이 많습니다. 제 의도는 필터링을 사용하여 강조 표시된 셀을 보는 것입니다.

추가 신용 기능이 하나의

답변

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

'의 더 큰 일련의 하나를'0 '으로 무시할 수있는 경우에 우리는 하위보다는 기능을 사용합니다.이 하위 열 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 

다른 열의를 적용 할 수 있습니다 본다.

EDIT 번호 여기서 1

VBA 함수에서 (통해 예 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 

을 호출하도록 수정 (UDF 인)는 일반적으로 셀에 값을 반환하는 데 사용되며 일반 셀 업데이트에는 사용되지 않습니다. 모든 컬럼을 통해

+0

감사합니다. b 열에 대해 설명한대로 작동합니다. 하위를 호출하는 가장 좋은 방법은 무엇이며 일반으로 만들 수 있습니까? 필자는 함수를 사용하는 아이디어를 좋아했습니다. 그 이유는 필자는 열의 맨 아래로 가서 수식과 같은 함수를 사용하고 다른 열로 복사 할 수 있기 때문입니다. 변수 번호가있는 파일이 많습니다. – user2655065

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) 

를, 그 작업을 수행하는 것이 가능하지만, 당신은 더 나은 조건을 제공해야합니다.

관련 문제