Ajout de l'étiquette de données uniquement à la dernière valeur

1

J'ai donc un graphique en courbes à plusieurs lignes. Comme ça. enter image description here

Je voudrais ajouter une étiquette de données à chaque ligne, mais seulement à la dernière valeur à droite.

Je sais si je peux supprimer des étiquettes individuelles. Mais lorsque j'ajoute une nouvelle valeur à ma table, la nouvelle valeur apparaît avec une nouvelle étiquette, ce qui est bien, mais la précédente devra être supprimée manuellement. Existe-t-il un moyen de déplacer automatiquement l'étiquette vers la droite?

enter image description here

Alexey Adamsky
la source

Réponses:

1

Dans mon autre réponse, je ne tenais pas compte d’un dernier point en mouvement (c’est-à-dire des points de données ajoutés). Ce n’est pas un gros problème d’ajuster vos données pour permettre une seule étiquette en mouvement.

Je ne montre qu'une série de données, mais il est assez facile d'en faire autant que nécessaire, une fois que vous connaissez le truc. Dans l'ensemble de données ci-dessous, j'ai une colonne Date et deux colonnes avec le même en-tête, Value. La première colonne de valeurs a des valeurs jusqu'au milieu de la plage de dates. La deuxième colonne a une formule qui affiche uniquement la dernière valeur. C'est la formule dans la cellule C2:

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

Cette formule est copiée dans la colonne.

Maintenant, faites un graphique de toutes les données. La première série de valeurs est constituée par les cercles et les lignes bleus, la seconde n'est que le cercle orange situé sur le dernier point bleu. J'ai ajouté une étiquette à la série orange, pas la bleue.

Le deuxième graphique montre simplement que tout est nettoyé: j'ai formaté la deuxième série Value afin qu'elle n'utilise aucun marqueur ni aucune ligne, et j'ai supprimé la légende.

enter image description here

Dans le graphique suivant, tout ce que j'ai fait est d'ajouter quelques points de données. Sans aucun effort supplémentaire de ma part, le label est passé au nouveau dernier point.

enter image description here

Jon Peltier
la source
Ah, solution intéressante ... Je me demande si je pourrais combiner les deux colonnes, par exemple, convertir toutes les valeurs en chaîne et uniquement la dernière en nombre? J'aurais aussi besoin de comprendre comment les formater à l'identique dans le tableau et cela me limiterait également à certaines formules du tableau.
Alexey Adamsky
Quelles deux colonnes? Et pourquoi convertir en chaînes? Les chaînes seront tracées à zéro (même les chaînes "", qui semblent vides mais ne le sont pas). J'utilise # N / A car ceux-ci ne sont pas complétés du tout.
Jon Peltier
0

Je voudrais vous suggérer les deux options. Le premier est non-VBA et l'autre est le code VBA.

Solution non-VBA:

Comme Excel n’a aucun arrangement pour n’attribuer qu’une seule étiquette de données, des séries de cellules sont impliquées pour créer le graphique.

Mais après la création du graphique, vous pouvez réinitialiser les étiquettes.

Dans votre cas, après l’application de l’étiquette, cliquez avec le bouton droit de la souris sur la ligne pour vérifier si les étiquettes sont prêtes à être modifiées. Sélectionnez les étiquettes une par une, puis faites un clic droit sur & amp; Supprimez ou décochez la case à cocher Valeur en regard de la zone de graphique.

Solution VBA:

Créez un bouton de commande et entrez ce code.

N'oubliez pas que vous créez simplement le graphique mais n'appliquez pas les étiquettes de données. Une fois que tout est prêt, cliquez sur le bouton de commande. Le code créera d’abord toutes les étiquettes de données et conserve le dernier.

Notez que vous pouvez utiliser ce code comme RUN MACRO même sans le bouton de commande.

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

J'espère que cela vous aidera .

Rajesh S
la source
Juste étiqueter le dernier point: srs.Points(srs.Points.Count).ApplyDataLabels. Ensuite, votre tableau n'est pas encombré de toutes ces étiquettes vides.
Jon Peltier
0

Si vous sélectionnez la série entière, Excel apposera une étiquette sur chaque point de la série.

Sélectionnez uniquement le point sur lequel vous souhaitez attribuer une étiquette: cliquez une fois pour sélectionner la série, puis à nouveau pour sélectionner un point. Désormais, lorsque vous utilisez le menu contextuel ou l'icône du signe plus pour ajouter des étiquettes de données, une étiquette ne sera ajoutée qu'au point sélectionné.

Pour une approche VBA qui ajoute seulement une étiquette au dernier point et ne laisse pas de "" étiquettes dans le graphique, voici une procédure simple tirée de mon tutoriel. Étiquette dernier point pour Excel 2007 . Il étiquette spécifiquement le dernier point de chaque série dans le graphique actif avec le nom de la série.

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

J'ai écrit un tas d'articles à ce sujet:

De plus, mon logiciel de création de graphiques Excel commercial inclut une version mise à jour de cette fonctionnalité.

Jon Peltier
la source