나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 참서리 (k5953)

추천:  2
파일:     area_avg.xls (43KB) 조회:  1756
제목:   [RE]엑셀 주기에서의 평균을 구할 수 있을까요?
     
 
--------------------
' VBA Code
'--------------------


'----------------------------------
Sub get_avg()
'----------------------------------


    Dim data As Variant, rng As Range
    
    Set rng = Worksheets("area").Range("B2")
    
    data = Range(rng, rng.End(xlDown)).Value
    
    
    Dim colX As Scripting.Dictionary: Set colX = CreateObject("Scripting.Dictionary")
    
    '
    Dim arr As Variant: arr = Array()
    Dim sCate As String, sTemp As String
    Dim iCurrent As Variant
    Dim bMoved As Boolean
    
    ' 구분
    sCate = IIf(data(2, 1) >= data(1, 1), "Up", "Down")
    
    Dim iEnd As Long: iEnd = UBound(data, 1) - 1
    
    'Stop
    
    colX.Add "Up", Array()
    colX.Add "Down", Array()
  
    
    
    
    '-------------------------------------------------
    For r = 1 To iEnd
    '-------------------------------------------------
    
        ' 현재 값
        iCurrent = data(r, 1)
        
        ' get category
        If data(r + 1, 1) >= iCurrent Then sTemp = "Up" Else sTemp = "Down"
        
        If sCate = sTemp Then
        
           arr = push(arr, iCurrent)
           
        Else
           arr = push(arr, iCurrent)
           
           
          ' Debug.Print VBA.Join(arr, ",")
           'Stop
           colX.Item(sCate) = push(colX.Item(sCate), arr)
           
           'colX.Add arr
           
           sCate = sTemp
           arr = Array()
            
        End If
   
    Next r
    
    ' 마지막 거 처리
    arr = push(arr, data(r, 1))
   
    colX.Item(sCate) = push(colX.Item(sCate), arr)
    
    
    Call get_result(colX)
    
End Sub



'----------------------------------------------
Sub get_result(colX As Scripting.Dictionary)
'----------------------------------------------



    Dim sht As Worksheet: Set sht = Worksheets("result")
    
    '기존 자료 지우기
    
    sht.Range("A7:D10000").ClearContents
    
    
    Dim keys As Variant: keys = Array("Up", "Down")
    
    ' 각 시작 셀
    Dim sStart As Variant: sStart = Array("A7", "C7")
    
    
    
    For i = 0 To 1
    
        Debug.Print keys(i)
'        Debug.Print ""
    
        r = 0
        
       For Each arr In colX.Item(keys(i))
       
            'Debug.Print Join(arr, ", ")
            With sht.Range(sStart(i))
            
                .Offset(r, 0).Value = WorksheetFunction.Average(arr)
                .Offset(r, 1).Value = WorksheetFunction.Count(arr)
                
                Debug.Print Join(arr, ", ")
                
            End With
            
            r = r + 1
            
       Next
       
       
    Next



End Sub




' 배열에 요소 추가

'------------------------------------------------------
Function push(col As Variant, ele As Variant) As Variant
'------------------------------------------------------

    Dim i As Long: i = UBound(col, 1) + 1
    ReDim Preserve col(i)
    col(i) = ele
    push = col

End Function
 
[불량 게시물 신고]  
국민근답변 감사합니다 엄청 복잡해보이지만 해볼게요 그럼 좋은하루 되세요!11-18 (16:58)
삭제 ■신고
        
  

작성일 : 2018-11-18(15:26)
최종수정일 : 2018-11-18(15:26)
 


 ◎ 관련글

  제 목   작성자   날짜
엑셀 주기에서의 평균을 구할 수 있을까요? 국민근 2018-11-17
[RE]엑셀 주기에서의 평균을 구할 수 있을까요? 정일한 2018-11-18
[RE]엑셀 주기에서의 평균을 구할 수 있을까요? 참서리 2018-11-17
[RE]엑셀 주기에서의 평균을 구할 수 있을까요? 참서리 2018-11-18