2014-06-16 1 views
2

VBA에서 큰 데이터 세트 (Raw Data라고 함)를 만들고 다른 곳의 8000 데이터 포인트마다 XY 산점도를 작성하려고합니다. 워크 시트. 또한 매크로는 각 그래프에 어떤 범위로 표시되는지 (즉, 1-8000, 8001-16000 등) 레이블을 지정해야합니다.VBA 루핑을 사용하여 큰 데이터 세트에서 여러 개의 그래프 만들기

대용량 데이터 세트는 매초마다 데이터를 기록하는 8 가지 열전대의 온도 판독 값으로 구성됩니다. 데이터 포인트의 수는 실험이 실행 된 시간에 따라 다릅니다. 온도 값은 C에서 J까지의 열에 저장되고 시간 매개 변수는 T 열에 있습니다.

현재 제가 8000 ~ 32000 개의 청크로 그래프 데이터를 설정하는 "일괄 처리"방식이 있습니다 (4 개의 다른 플롯). 데이터 세트가 거의 항상 32000 포인트보다 훨씬 크기 때문에이 방법은 실용적이지 않습니다.

그래프로 할 데이터가 없을 때까지 매 8000 데이터 포인트마다 자동으로 그래프 및 레이블을 지정합니다.

나는 루프를 사용하고 있었지만 코드를 작성하는 방법과 확실하지는 않습니다.

의견이나 도움을 주시면 대단히 감사하겠습니다.

여기 내 배치 코드의 일부입니다 : 이미 주어진 8000 개 레코드에 대한 차트를 생성하는 방법을 이해처럼

'creates graph for first 8000 seconds in TC 1 

Sheets("TC 1").Select 
ActiveSheet.Shapes.AddChart.Select 
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers 
ActiveChart.SeriesCollection.NewSeries 
ActiveChart.SeriesCollection(1).Name = "='Raw Data'!$C$1" 
ActiveChart.SeriesCollection(1).XValues = "='Raw Data'!$t$2:$t$8000" 
ActiveChart.SeriesCollection(1).Values = "='Raw Data'!$C$2:$C$8000" 

With ActiveChart 

'X axis name 
.axes(xlCategory, xlPrimary).HasTitle = True 
.axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time (seconds)" 
'y-axis name 
.axes(xlValue, xlPrimary).HasTitle = True 
.axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Temperature (F)" 

'chart title 
.HasTitle = True 
.ChartTitle.Text = ("1-8000 seconds") 
'adjusts the size/placement of graph and x-axis values 
Set RngToCover = ActiveSheet.Range("A1:T25") 
Set ChtOb = ActiveChart.Parent 
ChtOb.Height = RngToCover.Height ' resize 
ChtOb.Width = RngToCover.Width ' resize 
ChtOb.Top = RngToCover.Top ' repositon 
ChtOb.Left = RngToCover.Left ' reposition 
ActiveChart.axes(xlCategory).Select 
ActiveChart.axes(xlCategory).MinimumScale = 0 
ActiveChart.axes(xlCategory).MaximumScale = 8000 

End With 

답변

2

다음은 내가 생각해 낸 것입니다.

매크로 사용 행의 총 수를 계산 후 들어 ... 다음 루프 8000

의해 그 번호는 0 내지 8000

Dim i As Integer 
Dim j As Variant 
Dim p As Integer 
Dim start_row As Long 
Dim end_row As Long 
Dim RngToCover As Range 
Dim ChtOb As ChartObject 

i = Worksheets("Raw Data").UsedRange.Rows.Count 
j = i/8000 

Sheets("TC 1").Activate 

For p = 0 To j 

start_row = (p * 8000) + 2 
end_row = ((p + 1) * 8000) + 1 

Set ChtOb = ActiveSheet.ChartObjects.Add(Left:=20, Width:=800, Top:=20, Height:=250) 

ChtOb.Chart.ChartType = xlXYScatterSmoothNoMarkers 
ChtOb.Activate 

With ActiveChart.SeriesCollection.NewSeries 
    .Name = Worksheets("Raw Data").Cells(1, 3) 
    .XValues = Worksheets("Raw Data").Range(Worksheets("Raw Data").Cells(start_row, 20), Worksheets("Raw Data").Cells(end_row, 20)) 
    .Values = Worksheets("Raw Data").Range(Worksheets("Raw Data").Cells(start_row, 3), Worksheets("Raw Data").Cells(end_row, 3)) 

    End With 
    Next 
나눈 총 행 실행 분할
0

그것은 소리. 아래는 X 축 (T 열)의 소스 열에서 빈 셀을 찾을 때까지 내보내기 코드를 계속 실행하는 WHILE 루프입니다.

Dim i As Integer 
Dim ws As Worksheet 
i = 2 
Set ws = ThisWorkbook.Worksheets("Raw Data") 
While ws.Cells(i, 20).Value <> "" 
    ''' Create Chart for Next Data Set Starting at Row i (up to 8000 records) 
    i = i + 8000 
Wend