VBA Создание диаграммы из массива - проблема с отсутствующими значениями - PullRequest
0 голосов
/ 21 марта 2019

Я делаю линейный график с маркерами. Данные создаются в виде кода в массив, а этот массив помещается в диаграмму.

Проблема в том, что в массиве отсутствуют значения, представленные как ПУСТОЙ.

При построении двух точек, которые существуют, соединяются линией. Опция выбрана для построения пробелов, если ячейки пусты.

Формула серии показывает ПУСТОЙ как # N / A.

XValues ​​== { "11/28/2016", "12/5/2016", "12/12/2016", "12/19/2016", "12/26/2016", "1 / 2/2017" , "1/9/2017", "1/16/2017", "1/23/2017", "1/30/2017", "2/6/2017", "2/13 / 2017" , "2/20/2017", "2/27/2017"}

Значения = {125.15,93.875, # Н / Д, # Н / Д, # Н / Д, # Н / Д, 42,125,48.5714285714285,137,127.285714285714,81.6428571428571,89,9375,69,5,65,6428571428571,75,5,47 }666666 *

Попробовал заменить на 0, "", NaN, ничего не работает. Я хочу сделать перерыв в графике.

У меня есть существующее значение, затем серия пропущенных значений, а затем некоторое значение. Я заметил, что если серия начинается с пропущенных значений, то она хорошо строится с пропуском. В противном случае не работает.

For i = LBound(p_data, 1) + 1 To UBound(p_data, 1)
    sSerieName = p_data(i, 0)

    If sSerieName <> "" Then

        Dim serie() As Variant
        Dim w As Long
        w = 0
        For j = LBound(labels) To UBound(labels)
            ReDim Preserve serie(j): serie(j) = p_data(i, j + 1)
        Next j
        If Not Len(Join(serie, "")) = 0 Then
        On Error Resume Next
            With p_chart.Chart.SeriesCollection.NewSeries
                .XValues = labels
                .Values = serie
                .Name = sSerieName                    
            End With
        On Error GoTo 0
        End If
    End If
Next i

1 Ответ

0 голосов
/ 21 марта 2019

Я не думаю, что это возможно при установке значений и т. Д. С помощью массивов.Кажется, он разрешает Empty как N / A.Я попробовал следующее решение, которое включало бы в себя подсчет того, где происходят эти пустые события.Так, например, в этом случае я заменил предыдущее значение для моего пустого в точке 3 и использовал следующие

Требуемые значения: 10,20, ПУСТО, 40

With s.NewSeries
    .XValues = Array("a", "b", "c", "d")
    .Values = Array(10, 20, 20, 40)
    .Points(3).Format.Line.Visible = msoFalse
End With

Полное решение, которое я попробовал, выглядит следующим образом

Sub x()

Dim s As SeriesCollection
Dim lc As Long
Dim aTest() As Variant
Dim serie As String

aTest = Array(15, 20, Empty, 40)

Set s = ActiveChart.SeriesCollection

For lc = 0 To UBound(aTest)

    If aTest(lc) = "" Then      '   <--- record these lc values to hide points
        If lc = 0 Then
            aTest(lc) = 0
        Else
            aTest(lc) = aTest(lc - 1)
        End If
    Else
    End If

Next lc

With s.NewSeries
    .XValues = Array("a", "b", "c", "d")
    .Values = aTest
    .Points(3).Format.Line.Visible = msoFalse
End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...