2014-11-09 2 views
0

저는 VBA에 비교적 익숙하지 않아이 동적 범위에 대한 코드를 작성하기가 어렵습니다. 입력 데이터는 11/07/14부터 11/14/14까지입니다. 00:00 - 23:00 시간. 나는 각 날짜에 대해 각 시간 (열 단위)에 대한 가치가있는 방식으로 시간을 조 변경해야합니다. 질문이 명확하지 않은 경우 알려주십시오. 미리 감사드립니다 만Excel Vba 동적 행 수가 열로 바뀝니다.

입력 데이터

Date  Hours  Name   %Value 
11/07/14 00:00 P4127C11  20 
11/07/14 01:00 P4127C11  30 
    .         
    .       
11/07/14 23:00 P4127C11  24  
11/08/14 00:00 P4127C11  15  
    . 
    .  
11/11/14 00:00 P4127C11  25  
    .  .   .   .  
    .  .   .   .  
11/11/14 23:00 P4127C11  31 

출력 데이터

Date  Name  00:00 01:00 02:00 . . . . 23:00  
11/07/14 P4127C11 20  30  .  . .. . 24  
11/08/14 P4127C11 15  .  . .. . . . .  
    .  
    .  
11/11/14 P4127C11 25  .  . .   31  
+0

덕분에 내가 데이터를 포맷하려고했다 @Tmdean – Nadeem

답변

0

이것은 단지 피벗 테이블입니다. 행 값에 날짜 및 이름, 열 값에 시간, 값에 최대 % 값이있는 피벗 테이블을 작성하여이를 해결할 수 있습니다.

+0

실제로 나는 그래서 내가 더 출력을 조작 할 수있는이에 대한 excelvba 코드를하고 싶어 – Nadeem

0

@ Nadeem, vba로 해결할 수있는 많은 방법 중 하나는 정의 된 유형의 배열에 데이터를로드하는 것입니다. 이 코드를 보면 사용할 수있는 아이디어를 얻을 수 있습니다.

Private Type tPivotValues 
    sDate As String 
    sName As String 
    aHour() As String 
End Type 

Sub q26832297() 

Dim i, j As Long 
Dim aPivotValues() As tPivotValues 
Dim iArrIndex As Integer 


    ReDim aPivotValues(0 To 1) 

    iArrIndex = 0 
    'reading first date of first element 
    aPivotValues(iArrIndex).sDate = Sheets(1).Cells(2, 1).Value 
    aPivotValues(iArrIndex).sName = Sheets(1).Cells(2, 3).Value 
    j = 0 
    ReDim aPivotValues(iArrIndex).aHour(0 To 23) 

    For i = 2 To Sheets(1).Cells(1, 1).End(xlDown).Row 
     'if date in row different than in array element 
     If aPivotValues(iArrIndex).sDate <> Sheets(1).Cells(i, 1).Value Then 
      iArrIndex = iArrIndex + 1 
      aPivotValues(iArrIndex).sDate = Sheets(1).Cells(i, 1).Value 
      aPivotValues(iArrIndex).sName = Sheets(1).Cells(i, 3).Value 
      'setting hours counter to 0 
      j = 0 
      ReDim aPivotValues(iArrIndex).aHour(0 To 23) 
     End If 
     If aPivotValues(iArrIndex).sDate = Sheets(1).Cells(i, 1).Value Then 
      aPivotValues(iArrIndex).aHour(j) = Sheets(1).Cells(i, 4).Value 
      j = j + 1 
     End If 
    Next i 

    'printing data to different sheet 
    For i = LBound(aPivotValues) To UBound(aPivotValues) 
     Sheets(2).Cells(i + 1, 1).Value = aPivotValues(i).sDate 
     Sheets(2).Cells(i + 1, 2).Value = aPivotValues(i).sName 
     For j = LBound(aPivotValues(i).aHour) To UBound(aPivotValues(i).aHour) 
      Sheets(2).Cells(i + 1, j + 3).Value = aPivotValues(i).aHour(j) 
     Next j 
    Next i 

End Sub