2014-03-26 4 views
2

데이터 그룹의 부분합 (평균, 최소, 최대 ...)을 얻고 싶습니다. 아래 코드를 사용하여 목표를 달성했습니다. 루프를 사용하여 어떻게 단순화 할 수 있습니까? 많은 감사합니다!루프를 사용하여 코드를 단순화하는 방법

Sub AddSubs() 
    Worksheets("Summary (3)").Activate 
    'http://msdn.microsoft.com/en-us/library/office/ff838166(v=office.15).aspx 
    Selection.Subtotal GroupBy:=14, Function:=xlAverage, SummaryBelowData:=False, Replace:=False, PageBreaks:=True, TotalList:=Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39) 
    Worksheets("Summary (3)").Activate 
    Selection.Subtotal GroupBy:=14, Function:=xlStDev, SummaryBelowData:=False, Replace:=False, PageBreaks:=True, TotalList:=Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39) 
    Worksheets("Summary (3)").Activate 
    Selection.Subtotal GroupBy:=14, Function:=xlMin, SummaryBelowData:=False, Replace:=False, PageBreaks:=True, TotalList:=Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39) 
    Worksheets("Summary (3)").Activate 
    Selection.Subtotal GroupBy:=14, Function:=xlMax, SummaryBelowData:=False, Replace:=False, PageBreaks:=True, TotalList:=Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39) 
    Worksheets("Summary (3)").Activate 
    Selection.Subtotal GroupBy:=14, Function:=xlCount, SummaryBelowData:=False, Replace:=False, PageBreaks:=True, TotalList:=Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39) 
End Sub 
+1

단순화를 필요로하는 유일한 것은 기능이다입니다. 내가 무엇을 할 것인가? 모든 상수를 가진 열거 가능한리스트를 생성하고 그 위에 반복한다. –

답변

3

내 덧글 덧붙이겠습니다. = 매개 변수 : 이것은 (@simocos 힌트 당) 코드

Sub AddSubs() 
    Worksheets("Summary (3)").Activate 

    Dim constList As Collection 
    Set constList = New Collection 

    constList.Add (xlAverage) 
    constList.Add (xlStDev) 
    constList.Add (xlMin) 
    constList.Add (xlMax) 
    constList.Add (xlCount) 

    Dim cnst 
    For Each cnst In constList 
     Selection.Subtotal GroupBy:=14, Function:=cnst, SummaryBelowData:=False, Replace:=False, PageBreaks:=True, TotalList:=Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39) 
    Next 

End Sub 

또는 단순한를 단순화하는 한 가지 방법

Sub Main() 

    Dim cnst 
    For Each cnst In Array(xlAverage, xlStDev, xlMin, xlMax, xlCount) 
     Selection.Subtotal GroupBy:=14, Function:=cnst, SummaryBelowData:=False, Replace:=False, PageBreaks:=True, TotalList:=Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39) 
    Next 

End Sub 
+2

+1, 두 번째 코드에서'For Each cnst In constList'를'For each cnst In c'로 변경한다. Btw, 왜 각 cnst 배열에 (xlAverage, xlStDev, xlMin, xlMax, xlCount)'? –

+2

@simoco 확실히 +1 당신은 내가 무언가의 한가운데에 있었고 생각없이 대답했다 –

+0

어쨌든 배열의 숫자를 단순화하는 방법이 있습니까 (3, 4, 5, 6, 7, 8, 9, 10, 11, 12 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,29,30,31,32,33,34,35,36,37,38 , 39)? – user2230101

관련 문제