5

作業中のマクロの Excel グラフのポイントまたはラインにテキスト ボックスを添付する方法を考えていました。.AddTextboxなどの方法をとっています。

.Shapes.AddTextbox(msoTextOrientationHorizontal, 150, 250, 100, 15) _
      .TextFrame.Characters.Text = "Temperature"

しかし、向きは線ではなくチャートであるため、それが表すチャート上の線の上にテキストボックスを手動でドラッグする必要があります。線/点を変数として使用できるチャートの向きに変換する方法はありますか? または別の方法?軸の位置の1つをカスタマイズできるようにしたいのですが、おそらくdatalabel関数を使用しています。ありがとう

4

2 に答える 2

4

質問を解決するには、2 つのオブジェクトの左と上の位置を取得する必要があります。

  1. チャート自体。シート範囲領域の左上隅を基準に設定された位置
  2. チャートの左上隅に関連して位置が設定される一連のポイント

両方の結果を次のコードと組み合わせます (状況に合わせてパラメーターを修正する必要があるため、ループを使用するとより動的になる可能性があります)

Sub Add_Text_to_point()

    Dim tmpCHR As ChartObject
    Set tmpCHR = Sheet1.ChartObjects(1) 'put index of your chartobject here

    'for first serie, for point 2nd here
    '(change accordingly to what you need)
    With tmpCHR.Chart.SeriesCollection(1).Points(2)

        Sheet1.Shapes.AddTextbox(msoTextOrientationHorizontal, _
                .Left + tmpCHR.Left, _
                .Top + tmpCHR.Top, _
                100, 15) _
                .TextFrame.Characters.Text = "Temperature"
    End With

End Sub

下の写真を提示する結果の後。

ここに画像の説明を入力

于 2013-07-11T05:57:50.817 に答える
3

もう 1 つのオプションは、Excel のデータ ラベルを使用することです。さらに 2 つのエレガントなオプションがあります。

  1. グラフに 1 つのエントリだけを含む新しいデータ シリーズを作成し、そのシリーズに座標と表示するラベルの名前を指定します。シリーズのマーカー オプションを有効にし (まだ行っていない場合)、データ ポイントを右クリックし、[データ ラベルの追加] をクリックします。ポイントの y 値が表示されます。もう一度右クリックして [データ ラベルの書式設定] を選択すると、テキストをシリーズ名に変更できます。また、位置、境界線なども変更できます。以下は、2 つのデータ ポイントを含む例です。2 番目の点、線、およびマーカーを削除することもできますが、このように、どのように機能するかがわかります。 データラベルの例
  2. KazJaw のソリューションと同様に、シリーズの実際のデータ ポイントを使用して、カスタム データ ラベルを添付できます。これにはいくつかのコーディングが必要です。これを「Topview」という名前のチャートに使用し、データ ポイントの横にパーセンテージを書きました
Sub Add_Text_to_data_points()
    percentages(1) = 0.1
    percentages(2) = 0.23
    '.... further entries
    chartNumber = findChartNumber("Topview")
    collNumber = 12 ' index of the "points" series
    Set tmpCHR = ActiveSheet.ChartObjects(chartNumber) 
    For i = 1 To tmpCHR.Chart.SeriesCollection(collNumber).Points.count
    With tmpCHR.Chart.SeriesCollection(collNumber).Points(i)
        If percentages(i) <> 0 Then
            .DataLabel.Text = format(percentages(i), "0%")
        End If
    End With
    Next
End Sub
于 2014-05-07T13:22:37.510 に答える