2014-10-05 5 views
0

Excel 용 vba 코드를 준비하려고합니다. 매달 값의 목록이 있으며 매달 별도의 열에 나열되며 매월 아래에 여러 값이 나열됩니다.각 열 평균의 셀 값 비교

내가 원했던 것은 각 셀의 색상을 월 평균보다 4 배 작은 값으로 변경하는 것입니다. 지금까지 제 코드는 이렇게 보였습니다. 각 평균은 원했던 것처럼 계산되었습니다.하지만 셀을 한 열의 평균과 비교하는 방법을 알아낼 수는 없었습니다. 지금.

Sub MonthAverage() 
    Dim Data As Variant 
    Set Data = Selection 
    Dim rows As Integer 
    Dim columns As Integer 

    rows = Data.rows.Count 
    columns = Data.columns.Count 

    Dim average As Double 

    For j = 1 To columns 
     average = 0# 

     For i = 1 To rows 
      average = average + Data.Cells(i, j) 
     Next 

     average = average/rows 

     For Each cell In Data.Cells 
      If cell.Value <= average/4 Then cell.Interior.Color = RGB(0, 0, 255) 
     Next 

     MsgBox average 'just to make sure I got the averages correctly 
    Next 
End Sub 
+0

2 센트짜리 주제가 약간 다릅니다. 일반적으로 피벗 테이블이 만들어지는 것입니다. – tagoma

+0

조건부 서식 및 평균 수식을 사용하면됩니다. VBA는 필요하지 않습니다. –

+0

나는 확실히 더 빠르고 쉽게 할 수있을 것이라고 인정하지만, 나는 VBA에서 그것을 할 방법을 찾고 있었다. – mango

답변

1

내가 대신 현재 SelectionActiveSheet에서 작동하도록 코드를 수정했습니다. 이 코드는 ActiveSheet의 각 열을 반복하며 평균보다 4 배 작은 각 셀의 색을 지정합니다.

Sub MonthAverageV2() 
    Dim ws As Worksheet 
    Dim ThresholdVal As Double 
    Dim i As Integer 
    Dim j As Integer 
    Dim r As Integer 

    Set ws = ActiveSheet 

    'Loop columns 
    For i = 1 To ws.Cells(1, ws.columns.Count).End(xlToLeft).Column 
     r = ws.Cells(ws.rows.Count, i).End(xlUp).Row 
     'Column average 
     ThresholdVal = Application.WorksheetFunction.average(ws.Range(ws.Cells(2, i).Address & ":" & ws.Cells(r, i).Address)) * 0.25 
     Debug.Print ThresholdVal 
     'Loop rows 
     For j = 2 To r 
      If ws.Cells(j, i).Value < ThresholdVal Then 
       ws.Cells(j, i).Interior.Color = RGB(0, 0, 255) 
      End If 
     Next j 
    Next i 
End Sub 

또한 각 열의 평균을 계산하려면 Application.WorksheetFunction.average을 사용합니다.

+0

답변 주셔서 감사합니다. 그러나 테이블의 맨 아래 열에 Excel의 이름이 나열되어 있으면 작동하도록 할 수 있습니까? (기본적으로 결과 테이블, 각 이름은 한 달에 하나의 값을가집니다.) 여러분이 볼 수 있듯이, 나는 코딩에 능숙하지 않습니다. 또한 메소드 i를 사용하여 작동하도록 할 수 있는지 말해 줄 수 있습니까? 적용 되었습니까 아니면 완전히 올바른 선택이 아니 었습니까? – mango

+0

아, 첫 번째 부분이 있다고 생각합니다. i = 2 일 것입니다. – mango

+0

첫 번째 열을 건너 뛰고 싶다면 'i = 2'에서 루프를 실행하십시오. –