web-dev-qa-db-ja.com

最後の値にのみデータラベルを追加する

つまり、複数の折れ線を含む折れ線グラフがあります。そのように。 enter image description here

各行にデータラベルを追加したいのですが、右側の最後の値にのみです。

個別のラベルを削除できるかどうかはわかります。しかし、新しい値をテーブルに追加すると、新しい値は新しいラベルで表示されますが、これは適切ですが、以前の値は手動で削除する必要がありました。ラベルを自動的に右に移動する方法はありますか?

enter image description here

3
Alexey Adamsky

私の他の回答では、移動する最後のポイント(つまり、追加されたデータポイント)を考慮していません。単一の移動ラベルを可能にするためにデータを調整することは大したことではありません。

ここでは1つのデータシリーズのみを示していますが、トリックを知っていれば、必要な数だけ簡単に実行できます。次のデータセットには、Date列と、同じヘッダーの2つの列Valueがあります。最初の値列には、日付範囲の中央までの値があります。 2番目の列には、最後の値のみを表示する数式があります。これはセルC2の数式です。

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

この数式は列の下にコピーされます。

次に、すべてのデータのグラフを作成します。最初の値系列は青い円と線で、2番目の値系列は最後の青い点のオレンジ色の円です。オレンジではなく、青のシリーズにラベルを追加しました。

2番目のグラフは、それがクリーンアップされたことを示しています。2番目のValueシリーズをフォーマットして、マーカーも線も使用せず、凡例を削除しました。

enter image description here

次のグラフでは、いくつかのデータポイントを追加するだけです。私の側でそれ以上の努力なしに、レーベルは新しい最後のポイントに移動しました。

enter image description here

4
Jon Peltier

シリーズ全体を選択すると、シリーズの各ポイントにラベルが付けられます。

ラベルを付ける単一のポイントのみを選択します。1回クリックして系列を選択し、もう一度クリックして1つのポイントを選択します。右クリックメニューまたはプラス記号アイコンを使用してデータラベルを追加すると、選択した1つのポイントにのみラベルが追加されます。

最後のポイントにラベルを追加するだけで、グラフに ""ラベルの束を残さないVBAアプローチの場合、これは私のチュートリアルの簡単な手順 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グラフ作成ソフトウェアには、この機能の更新バージョンが含まれています。

2
Jon Peltier

私はあなたに両方のオプションを提案したいと思います。最初は非VBAであり、他はVBAコードです

非VBAソリューション:

Excelには、1つのデータラベルのみを割り当てるための配置がないため、一連のセルがグラフの作成に関与している場合。

ただし、グラフが作成された後、ラベルをリセットできます。

あなたのケースでは、ラベルが適用された後、線を右クリックすると、ラベルを編集する準備ができていることがわかります。 [ラベル]を1つずつ選択し、右クリックして削除するか、グラフエリアの横にある[値のチェック]チェックボックスをオフにします。

VBAソリューション:

1つのコマンドボタンを作成し、このコードを入力します。

単にグラフを作成するだけで、データラベルは適用しないことを忘れないでください。すべての準備が整ったら、[コマンド]ボタンをクリックします。コードは最初にすべてのデータラベルを作成し、最後に最後のものを保持します。

コマンドボタンがなくても、このコードを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
Rajesh S