2012-10-09 4 views
0

전 매크로와 VB에서 완전히 익숙해 졌으므로 도움이 되었으면 좋겠습니다. 나는이 양식에 엑셀 데이터가 :Excel에서 고정 된 행 수의 매크로 코드를 반복하는 방법은 무엇입니까?

Clip PSNR-codec1  PSNR-codec2  Bit Rates 
Video1 29.426086  29.220891  94357 
Video1 31.207342  31.703124  322832 
Video1 34.474587  34.255598  633468 
Video1 36.445279  35.479189  936961 
Video1 39.093937  36.4768   1539093 
Video2 41.156012  37.295318  326742 
Video2 43.355358  37.684239  604494 
Video2 29.95337  29.30644  1218206 
Video2 32.040252  30.837518  1809751 
Video2 34.194409  32.774954  2387549 
Video3 35.495356  33.806537  1567065 
Video3 36.395173  34.544676  2173151 
Video3 37.077718  35.234943  3094348 
Video3 35.681498  36.036972  3240981 
Video3 171.661771  83.104314  3355959 
Video4 171.247791  96.978608  5103370 
Video4 185.239286  128.064048  6636778 
Video4 189.115735  115.418461  8150015 
Video4 185.35225  154.3189011  2345629 

내 요구 사항은 각 비디오에 대한 별도의 시트에 유형 "XYScatterSmooth"의 도표를 만드는 것입니다. 그래프는 X 축의 비트율과 Y 축의 PSNR을 가져야합니다. 앞으로 더 많은 동영상에 대한 데이터도 제공 할 예정입니다. 그래서 각 비디오에 대해 이러한 단계를 반복하는 매크로를 작성 어떻게 (즉, 루프는 매 5 개 라인에 대한 반복해야 5 개 라인 데이터가 고정 번호가의.)

엑셀 버전 : 이것은 나를 위해 일한 2010

답변

0

당신이 제공 한 샘플 데이터.

모든 데이터를 1면에 넣고 다른 모든면을 삭제하십시오. 데이터는 2 번 행에서 시작해야합니다 (위와 동일). 매크로는 총 비디오 수를 묻습니다 (빈 셀이 될 때까지 반복하는 것보다 더 쉽습니다). 그런 다음 새 시트에 차트를 만듭니다. Video1, Video2 등의 시트 이름을 지정합니다.

나에게 도움이되는지 알려주세요.

Private Sub BitRateCharts() 

' Data should be on Sheet 1. Delete all other sheets. 


    Dim nVideoNum As Integer 
    nVideoNum = 1 

    Dim n As Integer 
    n = 1 

    Dim nStart As Integer 
    nStart = 2 

    Dim nLast As Integer 
    nLast = 6 

    Dim nVideos As Integer 
    nVideos = InputBox("How many videos?") 

    Dim nSheetNum 
    nSheetNum = ActiveSheet.Index 

    Do Until n > nVideos 

    nSheetNum = ActiveSheet.Index 
     If nSheetNum = ThisWorkbook.Sheets.Count Then 
      Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Video" & nVideoNum 
     Else 
     End If 

      ActiveSheet.Shapes.AddChart.Select 
      ActiveChart.ChartType = xlXYScatterSmoothNoMarkers 
      ActiveChart.SetSourceData Source:=Range("Sheet1!$B$" & nStart & ":$D$" & nLast & "") 
      ActiveChart.SeriesCollection(1).XValues = "=Sheet1!$D$" & nStart & ":$D$" & nLast & "" 
      ActiveChart.SeriesCollection(1).Values = "=Sheet1!$B$" & nStart & ":$B$" & nLast & "" 
      ActiveChart.SeriesCollection(2).XValues = "=Sheet1!$D$" & nStart & ":$D$" & nLast & "" 
      ActiveChart.SeriesCollection(2).Values = "=Sheet1!$C$" & nStart & ":$C$" & nLast & "" 
      ActiveChart.SeriesCollection(1).Name = "=""PSNR-Codec1""" 
      ActiveChart.SeriesCollection(2).Name = "=""PSNR-codec2""" 

      n = n + 1 

      nVideoNum = nVideoNum + 1 

      nStart = nStart + 5 
      nLast = nLast + 5 
    Loop 

    MsgBox ("Macro Complete.") 

Exit Sub 

ErrMsg: 

    MsgBox ("Error encountered. Macro could not complete.") 


End Sub 
+0

대단히 감사합니다. 이것은 나를 위해 일했다 .. – PerlDev5

+0

위대한! 다행히 도울 수있어. – tmoore82

+0

또 다른 질문이 있습니다. 위의 경우 첫 번째 시트의 이름 인 'Sheet1'을 알고 있습니다. 하지만 이제는 첫 번째 시트의 이름을 모르는 더 일반적인 코드를 작성합니다. 따라서 Name1 = ActiveWorkbook.Worksheets (1) 매크로를 사용하여 가져옵니다. Name 그러면 변수 "Name1"을 어떻게 사용합니까? 범위를 선택하려면 루프 문 "ActiveChart.SetSourceData Source : = Range ("Sheet1! $ B $ "& nStart &": $ D $ "& nLast &" ")에? – PerlDev5

관련 문제