Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
散布図にデータラベルとつける
投稿日時: 21/01/26 12:31:55
投稿者: あまあま
メールを送信

散布図を作るために下のデータを用意しました。
 
番号    得点    評価点
1    63    80
2    79    84
3    41    56
4    60    52
5    58    56
6    55    54
7    42    60
8    72    70
9    69    64
10    66    56
得点をy軸に評価点をX軸にし、データラベルとして、〇の横に番号を表示したいと思っています。
調べ、考えたコードが次ですが、うまくいきません。
 
Worksheets("Chart").Select
 
Dim ChartObj As Object
 
With ActiveSheet.Shapes.AddChart.Chart
    .ChartType = xlXYScatter
    .SetSourceData Range(Cells(1, 2), Cells(10, 3))
End With
 
Set ChartObj = ActiveSheet.ChartObjects(1)
With ChartObj
    .Name = "Chart1"
    With .Chart
         
        .HasTitle = True
        .ChartTitle.Text = "相関図"
        With .ChartTitle.Format.TextFrame2.TextRange.Font
            .Size = 10
            .Fill.ForeColor.ObjectThemeColor = 6
        End With
        .HasLegend = True
        .Legend.Position = xlLegendPositionRight
        With ChartObj.Chart.Legend.Format.Fill
            .Visible = msoTrue
            .ForeColor.RGB = RGB(217, 217, 217)
        End With
 
        ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1) .HasDataLabels = True
      End With
 
  End With
End Sub
どなたかご教示願えないでしょうか

回答
投稿日時: 21/01/26 13:14:40
投稿者: simple

こちらを参考にして、まず手作業で実行し、それをマクロ記録してみてください。
 
http://www4.synapse.ne.jp/yone/excel2013/excel2013_graph_sanpuzu.html
 
なお、質問にあたっては、OSとExcelのバージョンを明記ください。
質問によっては、それらに依存して動作が異なることがあります。

回答
投稿日時: 21/01/26 14:25:50
投稿者: sk

引用:
散布図を作るために下のデータを用意しました。

引用:
得点をy軸評価点をX軸にし、データラベルとして、〇の横に番号を表示したい

とりあえず、ここでの「〇」というのが
系列の各要素のマーカーであると仮定します。
 
(標準モジュール)
------------------------------------------------------------------
 
Dim xlsWorksheet As Excel.Worksheet
Dim xlsShape As Excel.Shape
Dim xlsChart As Excel.Chart
Dim xlsSeries As Excel.Series
Dim xlsDataLabel As Excel.DataLabel
Dim lngRow As Long
  
'ワークシートの参照
Set xlsWorksheet = Worksheets("Chart")
'グラフ(散布図)の追加
Set xlsShape = xlsWorksheet.Shapes.AddChart(XlChartType:=xlXYScatter)
'グラフの参照
Set xlsChart = xlsShape.Chart
  
'新しい系列の追加
Set xlsSeries = xlsChart.SeriesCollection.NewSeries
 
With xlsWorksheet
     
    '系列の設定
    xlsSeries.Name = "=" & .Cells(1, 2).Address(External:=True)
    xlsSeries.XValues = "=" & .Range(.Cells(2, 3), .Cells(11, 3)).Address(External:=True)
    xlsSeries.Values = "=" & .Range(.Cells(2, 2), .Cells(11, 2)).Address(External:=True)
    xlsSeries.MarkerStyle = xlMarkerStyleCircle
     
    '項目軸の軸ラベルの設定
    xlsChart.Axes(xlCategory).HasTitle = True
    xlsChart.Axes(xlCategory).AxisTitle.Formula = "=" & .Cells(1, 3).Address(External:=True)
     
    'データラベルの設定
    xlsSeries.HasDataLabels = True
    lngRow = 2
    For Each xlsDataLabel In xlsSeries.DataLabels
        xlsDataLabel.Text = .Cells(lngRow, 1).Text
        lngRow = lngRow + 1
    Next
 
End With
     
With xlsChart
     
    'グラフタイトルの設定
    .HasTitle = True
    .ChartTitle.Text = "相関図"
    With .ChartTitle.Format.TextFrame2.TextRange.Font
        .Size = 10
        .Fill.ForeColor.ObjectThemeColor = 6
    End With
     
    '凡例の設定
    .HasLegend = True
    .Legend.Position = xlLegendPositionRight
    With .Legend.Format.Fill
        .Visible = True
        .ForeColor.RGB = RGB(217, 217, 217)
    End With
 
End With
 
Set xlsDataLabel = Nothing
Set xlsSeries = Nothing
Set xlsChart = Nothing
Set xlsShape = Nothing
Set xlsWorksheet = Nothing
 
 
------------------------------------------------------------------

回答
投稿日時: 21/01/26 15:39:25
投稿者: sk

補足:

引用:
'データラベルの設定
xlsSeries.HasDataLabels = True
lngRow = 2
For Each xlsDataLabel In xlsSeries.DataLabels
    xlsDataLabel.Text = .Cells(lngRow, 1).Text
    lngRow = lngRow + 1
Next

(どのバージョンの Excel で実行されているのかは不明ですが)
上記の箇所については、恐らく次のように書き換えても動作するはず。
 
---------------------------------------------------------------
 
'データラベルの設定
xlsSeries.HasDataLabels = True
xlsSeries.DataLabels.Format _
         .TextFrame2.TextRange _
         .InsertChartField msoChartFieldRange, _
                           "=" & .Range(.Cells(2, 1), .Cells(11, 1)).Address(External:=True)
With xlsSeries.DataLabels
    .ShowRange = True
    .ShowSeriesName = False
    .ShowCategoryName = False
    .ShowValue = False
    .ShowLegendKey = False
End With
 
---------------------------------------------------------------

投稿日時: 21/01/26 17:19:43
投稿者: あまあま
メールを送信

皆さんありがとうございました。
 
Skさんのものを参考にして当初想定していたものはできました。ありがとうございました。
しかし、グラフのデータ数が多くなるとマーカーの隣に番号では、見づらくなるので、
 
〇のマーカーの代わりに直接番号を、表示することは可能ですか?
 
また、極端な上限値、下限値は除き、X軸とY軸の設定幅を細かくして、表示することは可能ですか?
 
以上の2点についてご教授願います。
ちなみにエクセルバージョンは最新のものです。

回答
投稿日時: 21/01/26 18:12:11
投稿者: sk

引用:
〇のマーカーの代わりに直接番号を、表示することは可能ですか?

系列 "得点" のマーカーのスタイルを「なし」に、
データラベルの位置を「中央」に設定したい、
ということでしょうか。
(見づらいという理由が『要素の数が多すぎる』なら
あまり大した効果は期待できないと思いますけど)
 
引用:
また、極端な上限値、下限値は除き、X軸とY軸の設定幅を細かくして、
表示することは可能ですか?

軸の境界値や目盛りの単位の設定を自動ではなく手動に
(それぞれ任意の数値に)したいということでしょうか。
 
引用:
ちなみにエクセルバージョンは最新のものです。

ならば先に例示したデータラベルの設定に関しては
InsertChartField メソッドを使用する方のコードで良いと思います。
 
引用:
xlsSeries.MarkerStyle = xlMarkerStyleCircle

xlsSeries.MarkerStyle = xlMarkerStyleNone
 
引用:
xlsChart.Axes(xlCategory).HasTitle = True
xlsChart.Axes(xlCategory).AxisTitle.Formula = "=" & .Cells(1, 3).Address(External:=True)

'項目軸の軸ラベルの設定
With xlsChart.Axes(xlCategory)
    .HasTitle = True
    .AxisTitle.Formula = "=" & xlsWorksheet.Cells(1, 3).Address(External:=True)
    .MaximumScale = 100
    .MinimumScale = 0
    .HasMajorGridlines = True
    .MajorUnit = 10
    .HasMinorGridlines = True
    .MinorUnit = 5
End With
 
'数値軸の軸ラベルの設定
With xlsChart.Axes(xlValue)
    .MaximumScale = 100
    .MinimumScale = 0
    .HasMajorGridlines = True
    .MajorUnit = 20
    .HasMinorGridlines = True
    .MinorUnit = 10
End With
 
引用:
With xlsSeries.DataLabels
    .ShowRange = True
    .ShowSeriesName = False
    .ShowCategoryName = False
    .ShowValue = False
    .ShowLegendKey = False
End With

With xlsSeries.DataLabels
    .ShowRange = True
    .ShowSeriesName = False
    .ShowCategoryName = False
    .ShowValue = False
    .ShowLegendKey = False
    .Position = xlLabelPositionCenter
End With

投稿日時: 21/01/26 18:30:20
投稿者: あまあま
メールを送信

skさんありがとうございます。
X軸、Y軸の設定は提示されたもので完璧だと思います。
自分でも試してみました。
 
最初の質問のイメージは
 
120番と12番がX,Yの値が同じだと当然〇が重なります。
そこで、〇の位置は同じでもグラフの間隔(目盛を細かく)を広げ、
 
〇 120
  12 と 表示できれば、良いですし、
 
〇をなくし、
 120
 12 と表示したいのですが
 
可能でしょうか?

投稿日時: 21/01/27 07:53:14
投稿者: あまあま
メールを送信

Skさんありがとうございました。
何とかできました。感謝いたします。