1

Итак, у меня есть линейный график с несколькими линиями. Как это.

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

Я знаю, если можно удалить отдельные ярлыки. Но когда я добавлю новое значение в свою таблицу, новое значение появится с новой меткой, что хорошо, но предыдущую мне придется удалить вручную. Есть ли способ автоматически переместить ярлык вправо?

3 ответа3

1

В моем другом ответе я не учел перемещение последней точки (т. Е. Добавленных точек данных). Нет ничего сложного в том, чтобы скорректировать ваши данные, чтобы учесть одну движущуюся метку.

Я показываю только один ряд данных, но достаточно легко сделать столько, сколько нужно, если вы знаете хитрость. В приведенном ниже наборе данных у меня есть столбец Date и два столбца с одинаковым заголовком Value. Первый столбец значений имеет значения до середины диапазона дат. Второй столбец имеет формулу, которая отображает только последнее значение. Это формула в ячейке C2:

=IF(AND(ISNUMBER(B2),LEN(B3)=0),B2,NA())

Эта формула скопирована вниз по столбцу.

Теперь сделайте диаграмму всех данных. Первая серия значений - это синие круги и линии, вторая - просто оранжевый круг на последней синей точке. Я добавил ярлык к оранжевой серии, а не синий.

Второй график просто показывает, что он очищен: я отформатировал второй ряд значений, чтобы в нем не использовались маркеры и строки, и я удалил легенду.

На следующем графике я только добавил пару точек данных. Без каких-либо дополнительных усилий с моей стороны, лейбл перешел к новому последнему пункту.

0

Я хотел бы предложить вам оба варианта. Первый - это не VBA, а другой - код VBA.

Решение не VBA:

Так как в Excel нет никакой возможности назначать только одну метку данных, если для создания диаграммы используется ряд ячеек.

Но после создания диаграммы вы можете сбросить метки.

В вашем случае после применения метки щелкните правой кнопкой мыши по строке, и вы увидите, что метки готовы к редактированию. Выберите «Метки» по одному, затем либо щелкните правой кнопкой мыши и удалите, либо снимите флажок «Значение» рядом с областью диаграммы.

Решение VBA:

Создайте одну командную кнопку и введите этот код.

Помните, что вы просто создаете диаграмму, но не применяете метки данных. После того, как все будет готово, нажмите кнопку «Команда». Сначала код создаст все метки данных, и, наконец, оставит последний из них.

Обратите внимание, что вы можете переименовать этот код в RUN MACRO даже без командной кнопки.

Sub LastDataLabel()

Dim ws As Worksheet
Dim chrt as Chart
Dim srs as Series
Dim pnt as Point
Dim p as Integer

Set ws = ActiveSheet
Set chrt = ws.ChartObjects("Line Chart")
Set srs = chrt.SeriesCollection(1)

    srs.ApplyDataLabels

    For p = 1 to srs.Points.Count - 1 
        Set pnt = srs.Points(p)

        p.Datalabel.Text = ""
    Next

    srs.Points(srs.Points.Count).DataLabel.Format.TextFrame2.TextRange.Font.Size = 10


End Sub

Надеюсь, это поможет вам.

0

Если вы выберете целую серию, Excel поместит метку в каждую точку серии.

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

Для подхода VBA, который только добавляет метку к последней точке и не оставляет группу "" меток на диаграмме, вот простая процедура из моего урока Label Last Point для Excel 2007. Он конкретно маркирует последнюю точку каждой серии в активной диаграмме названием серии.

Sub LastPointLabel()
  Dim mySrs As Series
  Dim iPts As Long
  Dim vYVals As Variant
  Dim vXVals As Variant

  If ActiveChart Is Nothing Then
    MsgBox "Select a chart and try again.", vbExclamation
  Else
    Application.ScreenUpdating = False
    For Each mySrs In ActiveChart.SeriesCollection
      With mySrs
        vYVals = .Values
        vXVals = .XValues
        ' clear existing labels
        .HasDataLabels = False
        For iPts = .Points.Count To 1 Step -1
          If Not IsEmpty(vYVals(iPts)) And Not IsError(vYVals(iPts)) _
              And Not IsEmpty(vXVals(iPts)) And Not IsError(vXVals(iPts)) Then
            ' add label
            mySrs.Points(iPts).ApplyDataLabels _
                ShowSeriesName:=True, _
                ShowCategoryName:=False, ShowValue:=False, _
                AutoText:=True, LegendKey:=False
            Exit For
          End If
        Next
      End With
    Next
    ' legend is now unnecessary
    ActiveChart.HasLegend = False
    Application.ScreenUpdating = True
  End If
End Sub

Я написал кучу статей об этом:

Кроме того, мое коммерческое программное обеспечение для создания диаграмм в Excel содержит обновленную версию этой функции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .