2013-08-27 24 views
1

我正在開發一個基於Excel的模擬器,運行1000次特定測試。每個測試的結果是兩個座標。這些座標寫入一個範圍。然後,我根據該範圍創建一個X-Y散點圖。如何在VBA/Excel中將散點圖上的點的顏色作爲點X,Y座標的函數進行變化?

我現在想要做的是循環遍歷圖的1000個點,並根據點的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標籤。我會先把你的(看起來更簡單)。一旦我得到它的工作,我會發布我的解決方案。再次感謝Marc。 – user2723257

+0

完美工作,並使用http://www.mcpher.com/Home/excelquirks/snippets/heatmap,我有一個很好的結果。 – user2723257

相關問題