Я знаю, что размер легенды диаграммы автоматически изменяется в соответствии с количеством букв.
Так что это аномалия, но, похоже, необходимо отрегулировать количество символов как пустых. Это не точное совпадение , но пробел * 2 кажется похожим .
Sub setCharts(Target As Range, Cht As Chart)
Dim Srs As Series
Dim vColor, vName
Dim i As Integer, Ln As Integer, k As Integer
vColor = Array(RGB(246, 246, 246), RGB(255, 224, 140), RGB(47, 157, 39), RGB(0, 0, 0))
vName = Array("A", "Word", "Longer sentence", "stack")
Ln = Len(vName(2)) '<~~~ "Longer sentence" 's length --> Collection name
'****** The Loop statement below makes the series names the same length ******
' For i = 0 To UBound(vName)
' k = Ln - Len(vName(i))
' vName(i) = vName(i) & Space(k * 2)
' M = Len(vName(i))
' Next i
With Cht
.ChartType = xlColumnStacked
.HasLegend = True
.Legend.Position = xlLegendPositionBottom
.HasTitle = True
.ChartTitle.Text = Target.Value
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "OCF Percentiles"
.Axes(xlValue).MajorUnit = 50
For Each Srs In .SeriesCollection
Srs.Delete
Next Srs
For i = 0 To 2
Set Srs = .SeriesCollection.NewSeries
With Srs
.Name = vName(i) '<~~ Collection name
.Values = Target.Offset(0, 1).Resize(3).Offset(0, i)
.XValues = Array("A", "D", "I")
.Format.Fill.ForeColor.RGB = vColor(i)
If i = 0 Then
.Format.Fill.Transparency = 0.5 '<~~~~~ Transparency was adjusted
End If
End With
Next i
Set Srs = .SeriesCollection.NewSeries
With Srs
.Name = vName(3) '<~~ Collection name
.ChartType = xlXYScatter
.Values = Target.Offset(0, 4).Resize(1, 3)
.MarkerStyle = xlMarkerStyleSquare
.MarkerBackgroundColor = vColor(3) 'vbBlack
End With
End With
End Sub
До
После