VB(A)

시간별 그룹(피벗테이블)

당근쨈 2016. 10. 30. 10:55

http://cafe.naver.com/excelmaster/131866




피벗테이블의 기본기능을 이용하면 쉽게 풀리는 예제

꼭 매크로로 할 것도 없이

텍스트파일을 불러온 후 피벗을 새로고침해도 되는 일이다.

아직 피벗에 약해서. 하나하나 뜯어봄

자세한 것은 주석 참고


텍스트파일을 불러올 때 한줄씩 셀에 출력하다보니 속도에 문제가...

일단 피벗에 초점을 두고..ㅋㅎ





Sub LoadTextFile()
 
    Dim strFilter As String
    Dim strFile As Variant
    Dim i As Integer
    Dim v As Variant
    Dim Line As String
 
    '변수설정
    ActiveSheet.UsedRange.Clear
    ChDir ThisWorkbook.Path
    strFilter = "텍스트파일 (*.txt), *.txt"
    strFile = Application.GetOpenFilename(FileFilter:=strFilter, Title:="파일 선택", MultiSelect:=False)
 
    '파일선택 취소하면 매크로 종료
    If TypeName(strFile) = "Boolean" Then Exit Sub
 
    '텍스트파일을 띄어쓰기 기준으로 한줄씩 불러옵니다.
    '제목행은 다시 입력합니다.
    Open strFile For Input As #1
 
    Do Until EOF(1)
        
        Line Input #1, Line
        
            v = Split(Line, " ")
            
            If UBound(v) > 0 Then
            
                Range("A1").Offset(i).Resize(, 3= v
                
                i = i + 1
            
            End If
    Loop
    
    Close #1
    
    '서식 지정
    With Range("A1").CurrentRegion
    
        .Rows(1= Array("Date""Time""Used(%)")
        
        With Columns(3)
            .NumberFormatLocal = "G/표준"
            .Value = .Value
        End With
        
    End With
    
End Sub

-------------------------------------------------------------------------------------

Sub MakePivot()
'텍스트파일을 소스로 하여 피벗테이블을 생성합니다.
'업무시간(9~18시), 비업무시간(그 이외의 시간)으로 그룹을 나누어 일자별로 평균을 냅니다.
'사용하지 않는 총합계, 다른 그룹들은 숨김처리를 합니다.
 
    Dim PvtRange As Range
    Dim PvName As String
    
    Range("E1").CurrentRegion.Clear
    PvName = "Cpu Used"
    Set PvtRange = Range("E1")
    
    ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Range("A1").CurrentRegion).CreatePivotTable _
                TableDestination:=PvtRange, TableName:=PvName
    
    With ActiveSheet.PivotTables(PvName)
        
        '값, 행레이블, 열레이블에 데이터를 입력합니다.
        With .PivotFields("Date")
            .Orientation = xlRowField
            .Position = 1
        End With
    
        With .PivotFields("Time")
            .Orientation = xlColumnField
            .Position = 1
        End With
         
        .AddDataField .PivotFields("Used(%)"), "CPU 사용률(%)", xlAverage
        
        '총합계는 생략합니다.
        .ColumnGrand = False
        .RowGrand = False
        
        '업무시간과 비업무시간으로 나누어 시간을 그룹으로 묶어줍니다.
        .PivotSelect "'09:00:00':'18:00:00'", xlDataAndLabel, True
        Selection.Group
        .PivotFields("Time2").PivotItems("그룹1").ShowDetail = False
        
        .PivotSelect "Time2['00:00:00':'23:30:00'] Time[All]", xlDataAndLabel, True
        Selection.Group
        .PivotFields("Time").Orientation = xlHidden
         
        With .PivotFields("Time2")
            With .PivotItems("그룹2")
                .ShowDetail = False
                .Position = 2
                .Caption = "비업무시간"
            End With
            
            .PivotItems("그룹1").Caption = "업무시간"
        End With
             
        With PvtRange
            .CurrentRegion.NumberFormatLocal = "0.00_ "
            .Offset(, -4).Select
        End With
    End With
End Sub
 
cs


Book1.xlsm

CPU_사용량(3).txt