Получить ссылку на ячейку точки данных диаграммы - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь получить некоторые данные из графика.

У меня есть нижеследующее, которое проходит по диаграмме и может получить доступ к точкам данных, например значениям меток и т. Д.

Sub GetChartPoints()

  Dim mySrs As Series
  Dim iPts As Long
  Dim bLabeled As Boolean

  If ActiveChart Is Nothing Then
    MsgBox "Select a chart and try again.", vbExclamation
  Else
    For Each mySrs In ActiveChart.SeriesCollection
      bLabeled = False
      With mySrs
        For iPts = .Points.Count To 1 Step -1
            Debug.Print "w"
            Debug.Print mySrs.Points(iPts).HasDataLabel
            If mySrs.Points(iPts).HasDataLabel Then
                Debug.Print mySrs.Points(iPts).DataLabel.Text
                mySrs.Points(iPts).Interior.Color = RGB(0, 255, 0)
                Debug.Print mySrs.Values(iPts)
                Debug.Print mySrs.XValues(iPts)
            End If
        Next
      End With
    Next
  End If

End Sub

То, что я хотел бы сделать, это получить другие значения из данных, на которых это основано, например: если точка данных ссылается на ячейку C4, я хочу это вернуть (тогда я должен был бы получить форму значения, скажем, E4 и так что-то с этим).

Возможно ли получить ячейку, на которую указывает точка данных

Спасибо

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете получить его, просто нужно добавить несколько Objects и получить немного хитроумный .

См. Ваш код и раздел дополнения ниже (я пометил его в коде).

Вы можете сохранить несколько объектов и параметров, я просто хотел показать проделанную работу шаг за шагом.

код

Option Explicit

Sub GetChartPoints()

Dim mySrs As Series
Dim iPts As Long
Dim bLabeled As Boolean

If ActiveChart Is Nothing Then
    MsgBox "Select a chart and try again.", vbExclamation
Else
    For Each mySrs In ActiveChart.SeriesCollection
        bLabeled = False
        With mySrs
            For iPts = .Points.Count To 1 Step -1
                Debug.Print "w"
                Debug.Print mySrs.Points(iPts).HasDataLabel

                If mySrs.Points(iPts).HasDataLabel Then
                    Debug.Print mySrs.Points(iPts).DataLabel.Text
                    mySrs.Points(iPts).Interior.Color = RGB(0, 255, 0)
                    Debug.Print mySrs.Values(iPts)
                    Debug.Print mySrs.XValues(iPts)

                    ' ========= Addition start here =========
                    Dim RangeAddress As String, PointAddress As String
                    Dim SerValuesRng As Range, PointRng As Range

                    ' get the Range Address of the current series (Values)
                    RangeAddress = Split(mySrs.Formula, ",")(2)

                    ' set a Range object according to the result of the Address string
                    Set SerValuesRng = Range(RangeAddress)

                    ' Get the Cell location of current point in the Sereis range
                    Set PointRng = SerValuesRng.Cells(iPts)

                    ' Address of the PointRng
                    PointAddress = PointRng.Address(0, 0, xlA1, xlExternal)

                    ' for debug only
                    Debug.Print PointAddress
                    ' ========= Addition ends here =========

                End If
            Next
        End With
    Next
End If

End Sub
...