我正在尝试从 excel vba 中的图表中获取点数?
我在 excel 中制作了一个学生成绩图表,我想设置一个条件,即如果图表上的分数大于 90,则点的颜色变为红色,如果小于 90,则颜色为绿色。如何使用 VBA 做到这一点?
答案1
这是一个简单的例子,它可以提供您所需要的一切:
Sub Macro1()
Dim crt As Chart
Dim ser As Series
Dim val As Long
Dim pnt As Point
Set crt = ActiveChart
Debug.Print "Number of Series: ", crt.SeriesCollection.Count
Set ser = crt.SeriesCollection(2)
Debug.Print "# Points in Series 2: ", ser.Points.Count
NumPoints = ser.Points.Count
Debug.Print "Values for Series 2:"
For i = 1 To NumPoints
val = ser.Values(i)
Debug.Print " ", i, val,
Set pnt = ser.Points(i)
If val > 6 Then
pnt.MarkerForegroundColorIndex = 4
pnt.MarkerBackgroundColorIndex = 4
Debug.Print pnt.MarkerForegroundColor, pnt.MarkerForegroundColorIndex
Else
Debug.Print
End If
Next i
End Sub
如果可以,您应该使用索引值设置颜色,因为这样可以保持一致的颜色。另请注意,非索引颜色编号从 -1 开始,因此您不能使用它来检查实际颜色值。它是但是,一旦您更改颜色,就会设置。如果您希望填充与边缘相同,您还需要更改背景颜色以及前景。
答案2
不要使用宏,而是创建两个系列。假设成绩在 B2:B10。选择 C2:C10,其中 C2 为活动单元格。输入:
=IF(B2>=90,B2,NA())
然后按住 Ctrl 并按 Enter,将公式输入到选定范围的所有单元格中。
选择 D2:D10,其中 D2 为活动单元格。输入
=IF(B2<90,B2,NA())
然后按住 Ctrl 并按 Enter。
B 列的值将仅显示一次,根据其值显示在 C 列或 D 列中,而另一列将包含#N/A
未用标记绘制的错误。
使用 C 列和 D 列制作图表,使用好颜色格式化 C 列,使用坏颜色格式化 D 列。由于红绿色盲占主导地位,因此红色和绿色不是好的选择。尝试使用蓝色表示好,橙色表示坏。