使用vba在堆叠柱形图上显示数据值

我有一个数据表,在图表的第15行有一个月,在“B17:B25”的“B”列中有不同的公司名称。 示例表如下图所示 在这里输入图像说明

现在我写了一个代码,它将捕获这些值并输出一个堆叠的柱状图,如下所示: 在这里输入图像说明

这是我写的代码:

Sub getchart() y = Format(Now, "ww") Dim ws As Worksheet Dim aCell As Range, Rng As Range, bCell As Range, sRng As Range, fRng As Range Dim col As Long, lRow As Long, srow As Long Dim colName As String Dim wsTemp As Worksheet Dim oChrt As ChartObject Dim sheetname As String '~~> Change this to the relevant sheet Set ws = ThisWorkbook.Sheets("Calculation") With ws Set aCell = .Range("D16:BC16").Find(What:=y, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False) Set bCell = .Range("B:B").Find(What:="Total no of Consultants", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False) '~~> If Found If Not aCell Is Nothing Then col = aCell.Column colName = Split(.Cells(, col).Address, "$")(1) Else MsgBox "Nov Not Found" End If If Not bCell Is Nothing Then srow = bCell.Row x = srow - 1 Else MsgBox "Nov Not Found" End If Set sRng = .Range(colName & "17:" & colName & x) Debug.Print sRng.Address Set fRng = .Range("B" & "17:" & "B" & x) Debug.Print fRng.Address End With '~~> Set the sheet where you have the charts data ActiveWorkbook.Worksheets("Calculation").Activate '~~> This is your charts range Set Rng = Range("D17:G25") '~~> Delete the temp sheeet if it is there Application.DisplayAlerts = False On Error Resume Next ThisWorkbook.Sheets("TempOutput").Delete On Error GoTo 0 Application.DisplayAlerts = True '~~> Add a new temp sheet Set wsTemp = ThisWorkbook.Sheets.Add With wsTemp '~~> Give it a name so that we can delete it as shown above '~~> This is just a precaution in case `wsTemp.Delete` fails below .Name = "TempOutput" '~~~> Add the chart Set oChrt = .ChartObjects.Add _ (Left:=5, Width:=650, Top:=20, Height:=350) '~~> Set the chart's source data and type '~~> Change as applicable With oChrt.Chart .SetSourceData Source:=Rng .ChartType = xlColumnStacked .HasTitle = True '.Legend.LegendEntries (fRng) .HasLegend = True .ChartTitle.Text = "Total # Consultants and Spread" ' .SeriesCollection(1).DataLabels.ShowValues = True For intSeries = 1 To .SeriesCollection.Count .SeriesCollection(intSeries).Name = fRng.Cells(intSeries, 1) Next End With End With End Sub 

现在我想要的是我必须显示堆积柱状图的列中每个栏的数据值。 那么如何编写一个vba代码来显示数据值。

请在这件事上给予我帮助

您可以轻松录制一个macros,select该系列并将数据标签添加到该系列。 这会给你你需要的代码,你可以根据你的需要进行调整。

当堆积列数据点太小而不能实际显示数据标签时,会出现真正的问题。 在堆积柱状图中,数据标签只能显示在数据点(即代表数据的彩色矩形)内。

在开始自动化数据标签创build之前,请先备份文件并手动添加数据标签。 然后仔细看一下用户体验:图表在非常窄的数据点上的数据标签是什么样的? 看看你的截图,如果你添加数据标签的X位置1,5和6列 – 这看起来如何?

你会发现答案是:不漂亮。 – 根据你的截图,你甚至没有绘制表中的所有数据。

所以,你真的想回到绘图板,并计划更好的数据可视化。 因为你现在的图表沟通不好。

如果您想了解一stream的数据可视化,请抓住Stephen Few的书。 如果要在Excel中应用良好数据的原则,请查看Jon Peltier的网站 ,其中详细解释了使用Excel图表可以完成的任何事情。

这不是你想听到的答案,但坦率地说,我不知道如何将数据标签添加到列中的这些小数据点,并使图表的读者容易理解。