В приведенном выше примере это работает отлично, однако, что если я захочу проверить по a, b, c и d. сказать: if (pointLabel == "a") {Изменить цвет точки} Я думаю, что в моем вопросе есть небольшая путаница между меткой точки и меткой тика, поскольку я хочу получить доступ к метке на оси x, которая к точке в серии.
Привет, Колин
Чтобы получить доступ к значению данных или метке точки точки данных, необходимо сначала выполнить цикл по каждой точке данных, а затем получить значения.
Дейв уже дал вам метод для получения значений Y. Вот еще один метод, с помощью которого вы можете получить значения X и Y.
Sub FormatPoints()
Dim chr As ChartObject
Dim chrSeries As Series
Dim X() As String
Dim lngCnt As Long
Dim pnt As Point
Set chr = ActiveSheet.ChartObjects(1)
For Each chrSeries In chr.Chart.SeriesCollection
For Each pnt In chrSeries.Points
pnt.DataLabel.ShowCategoryName = True
X = Split(pnt.DataLabel.Caption, ",")
'---- X Value ---------
'~~> This will give you "A" for the above example
'~~> which you can use for comparision
Debug.Print X(0)
'---- Y Value ---------
'~~> This will give you 1
Debug.Print X(1) ' OR
pnt.DataLabel.ShowCategoryName = False
Next
Next
End Sub
EDIT
Приведенный выше код не будет работать, если точки данных не видны. Вы также можете использовать этот код.
Sub FormatPoints()
Dim chr As ChartObject
Dim chrSeries As Series
Dim X() As String
Dim lngCnt As Long
Dim pnt As Point
Set chr = ActiveSheet.ChartObjects(1)
For Each chrSeries In chr.Chart.SeriesCollection
For Each pnt In chrSeries.Points
'~~> You need this line else the code will fail
pnt.DataLabel.ShowValue = True
pnt.DataLabel.ShowCategoryName = True
X = Split(pnt.DataLabel.Caption, ",")
pnt.DataLabel.ShowCategoryName = False
MsgBox "X Value :" & X(0) & vbNewLine & "Y Value :" & X(1)
Next
Next
End Sub
1025 ** * Snapshot 1026 ** * 1027
Теперь, если у вас есть значения оси X как " Sid, Rout ", то вышеописанное не будет работать. Для этих сценариев я создал дополнительную функцию. Смотрите код ниже.
Sub FormatPoints()
Dim chr As ChartObject
Dim chrSeries As Series
Dim X As String, Y As String
Dim lngCnt As Long
Dim pnt As Point
Set chr = ActiveSheet.ChartObjects(1)
For Each chrSeries In chr.Chart.SeriesCollection
For Each pnt In chrSeries.Points
'~~> You need this line else the code will fail
pnt.DataLabel.ShowValue = True
pnt.DataLabel.ShowCategoryName = True
X = GetVal(pnt.DataLabel.Caption, "X")
Y = GetVal(pnt.DataLabel.Caption, "Y")
pnt.DataLabel.ShowCategoryName = False
MsgBox "X Value :" & X & vbNewLine & "Y Value :" & Y
Next
Next
End Sub
Function GetVal(DataPointCaption As String, strAxis As String) As String
Dim TempAr() As String
TempAr = Split(DataPointCaption, ",")
If strAxis = "Y" Then GetVal = TempAr(UBound(TempAr))
If strAxis = "X" Then
For i = LBound(TempAr) To (UBound(TempAr) - 1)
GetVal = GetVal & "," & TempAr(i)
Next i
GetVal = Mid(GetVal, 2)
End If
End Function
Snapshot
НТН
Sid