2013-08-27 1 views
1

특정 테스트를 1,000 번 실행하는 Excel 기반 시뮬레이터를 개발 중입니다. 각 테스트의 결과는 두 개의 좌표입니다. 이 좌표는 범위에 기록됩니다. 그런 다음 해당 범위를 기반으로 X-Y Scatter 그래프를 만듭니다.포인트 자체의 X, Y 좌표의 함수로 VBA/Excel의 분산 형 그래프에서 점의 색상을 어떻게 다르게 할 수 있습니까?

내가 지금하고 싶은 것은 그래프의 1,000 포인트를 순환하여 포인트의 X 및 Y 좌표에 따라 그 포인트의 색상을 변경하는 것입니다. 특히, 그래프의 중앙 근처에있는 점으로 색상의 강도가 증가하는 효과를 만들기 위해 X Mod (Half Max X) 및 Y Mod (Half Max Y)를 사용하려고합니다.

Temp = "'" + FirstCalcs.Name + "'!" + FirstCalcs.Cells(SOWD + 3, 2).Address + ":" + FirstCalcs.Cells(SOWD + 3, NumOfTests + 1).Address 
Temp2 = "'" + FirstCalcs.Name + "'!" + FirstCalcs.Cells(SOWD + 4, 2).Address + ":" + FirstCalcs.Cells(SOWD + 4, NumOfTests + 1).Address 
Set chtChart = Charts.Add 
With chtChart 

    Do Until .SeriesCollection.Count = 1  ' remove extra series, which Excel spawns like rabbits, for some reason 
     .SeriesCollection(1).Delete 
    Loop 

    .Name = Institution + " summary" 
    .ChartType = xlXYScatter 
    'Link to the source data range. 

    '.SetSourceData Source:=FirstCalcs.Range(Temp) 

    .SeriesCollection(1).Values = Temp2 
    .SeriesCollection(1).XValues = Temp 

    For Each pts In .SeriesCollection(1).Points 

      .Format.Fill.Solid 

      'The next line is what I can't figure out 
      .MarkerBackgroundColor = RGB(XFunctionOf(.pts.XCoor), YFunctionOf(.pts.YCoor), 128) 

      .MarkerStyle = xlMarkerStyleDiamond 
      .MarkerSize = 10 
    End With 

    Next i 

    .HasTitle = True 
    .ChartTitle.Text = "Summary" 
    .Axes(xlCategory, xlPrimary).HasTitle = True 
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "T" 
    .Axes(xlValue, xlPrimary).HasTitle = True 
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Time before T achieved" 
    .HasLegend = False 

End With 

그러나 내가 그들에 필요한 기능을 수행하기 위해 X 및 Y 값을 얻을 수있는 방법을 작동 할 수 없습니다 다음과 같이

내가 사용하고자하는 코드입니다. 포인트 자체의 수 (1 ~ 1000)에 따라 색상을 다양하게 할 수는 있지만 원하는 것은 아닙니다. 색상은 각 포인트의 X, Y 좌표의 함수입니다. X 좌표와 Y 좌표의 범위는 가변적이다. 즉, 매번 동일한 스케일로 결과를 반환하지 않는다.

도움을 주시면 감사하겠습니다.

답변

2

여기서 각 점의 X 및 Y 값을 액세스하는 방법의 간단한 예이다 :이 대

Sub Tester() 

    Dim s As Series, i As Long, x, y 

    Set s = ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1) 

    For i = 1 To s.Points.Count 
     x = s.XValues(i) 
     y = s.Values(i) 
     If x > 3 And y < 40 Then 
      s.Points(i).MarkerBackgroundColor = vbRed 
     End If 
    Next i 

End Sub 
+0

감사 팀. 연극을하고 그 작품을 만들 수 있는지 알아 봅시다. 밤새 나는 또한 데이터 라벨을 켜고, 텍스트를 추출하고, 그것을 분할했다. (나는 우아하지 않다.) 그러나 X와 Y 라벨을 켜는 방법을 아직 알지 못했다. 나는 너의 것 (처음에는 더 간단 해 보일 것이다)을 갈 것이다. 일단 내가 작동하게되면 나는 해결책을 게시 할 것이다. 고마워, 마크. – user2723257

+0

완벽하게 작동하고 http://www.mcpher.com/Home/excelquirks/snippets/heatmap도 사용하여 좋은 결과를 얻었습니다. – user2723257

관련 문제