Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:由不同系列组成的直方图_Vba_Excel_Histogram - Fatal编程技术网

Excel VBA:由不同系列组成的直方图

Excel VBA:由不同系列组成的直方图,vba,excel,histogram,Vba,Excel,Histogram,我试图在VBA中实现一个简单的任务:获取由不同系列组成的直方图。 作为“XValues”,我有字符串。 作为“值”,我有浮动 问题是,当我将新系列添加到我的XLCulnCultualCopy图表的系列集合中时,它不考虑“xValues”,并从左上角自动添加数据(列),并且不同系列的数据(列)混合。这代替了在前一系列的数据之后添加新系列的数据 我使用的代码如下: Dim MyEmbeddedChart As Chart Set MyEmbeddedChart = ActiveSheet.Shape

我试图在VBA中实现一个简单的任务:获取由不同系列组成的直方图。 作为“XValues”,我有字符串。 作为“值”,我有浮动

问题是,当我将新系列添加到我的XLCulnCultualCopy图表的系列集合中时,它不考虑“xValues”,并从左上角自动添加数据(列),并且不同系列的数据(列)混合。这代替了在前一系列的数据之后添加新系列的数据

我使用的代码如下:

Dim MyEmbeddedChart As Chart
Set MyEmbeddedChart = ActiveSheet.Shapes.AddChart.Chart
With MyEmbeddedChart

    'Data
    .ChartType = xlColumnClustered

    .SeriesCollection.NewSeries
    .SeriesCollection(1).Name = "PTV = CTV + 5mm"
    .SeriesCollection(1).XValues = "=" & ActiveSheet.Name & "!" & PAi & ":" & PAf
    .SeriesCollection(1).Values = "=" & ActiveSheet.Name & "!" & Ai & ":" & Af

    .SeriesCollection.NewSeries
    .SeriesCollection(2).Name = "PTV = CTV + 7mm"
    .SeriesCollection(2).XValues = "=" & ActiveSheet.Name & "!" & PBi & ":" & PBf
    .SeriesCollection(2).Values = "=" & ActiveSheet.Name & "!" & Bi & ":" & Bf

    .SeriesCollection.NewSeries
    .SeriesCollection(3).Name = "PTV = CTV + ?"
    .SeriesCollection(3).XValues = "=" & ActiveSheet.Name & "!" & PCi & ":" & PCf
    .SeriesCollection(3).Values = "=" & ActiveSheet.Name & "!" & Ci & ":" & Cf

    .SeriesCollection.NewSeries
    .SeriesCollection(4).Name = "PTV of pre-treated patients"
    .SeriesCollection(4).XValues = "=" & ActiveSheet.Name & "!" & PDi & ":" & PDf
    .SeriesCollection(4).Values = "=" & ActiveSheet.Name & "!" & Di & ":" & Df

    'Titles
    .HasTitle = True
    .ChartTitle.Characters.Text = "V95% of CS-PTV(%) (Patients)"
    .ChartTitle.Characters(Start:=2, Length:=3).Font.Subscript = True
    .Axes(xlCategory, xlPrimary).HasTitle = True
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Patients"
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "V95%(%) of CS-PTV(%)"
    .Axes(xlValue, xlPrimary).AxisTitle.Characters(Start:=2, Length:=3).Font.Subscript = True
    .Axes(xlCategory).HasMajorGridlines = True

    'Formatting
    .Axes(xlCategory).HasMinorGridlines = False
    .Axes(xlValue).HasMajorGridlines = True
    .Axes(xlValue).HasMinorGridlines = True
    .HasLegend = True

    'Position
    .ChartArea.Left = 725
    .ChartArea.Top = 70
    .ChartArea.Height = 500
    .ChartArea.Width = 750

End With
其中,运行期间不同系列定义中涉及的局部变量等于:

我正在处理的工作表和得到的直方图如下所示:

正如您所看到的,我不希望属于不同类别的列混合在一起,而是出现在另一个类别之后

有人知道我怎样才能得到我想要的。
我事先非常感谢你的邀请

这样不行。Excel图表不会获取X轴的值,它只获取名称并显示它们。就这么简单。为了实现您的目标,您需要在不同的行上复制您的值行,每个系列一个,这样对于每个系列,只有它显示的值存在,其他单元格设置为null。您可以使用VBA生成这些行。非常感谢您的回答。我已经考虑过这种可能性:我完全按照你的建议做了,效果很好。很难相信Excel无法获取这些X轴值,正如您所说:这似乎是一个基本要求,此功能将非常有用!问题是,我觉得用0来创建这种矩阵的解决方案会让工作表有点“脏”,这并不是一个很好的解决方案。最好的问候,R.FWIW,有一个替代方案可以避免您创建这些行。您可以计算VBA中的值数组(从适当的范围),然后
series.values=theArray
。缺点是这些值是静态的,如果单元格中的初始值被编辑/更改,则需要重新运行宏。我也考虑过这种可能性,我认为这样会更好。我很高兴你确认了我的考虑。再次感谢您的帮助!rubebop。。。通过自我回答发布您的解决方案(如果满足所有标准,也值得一枚徽章;-)。这样,它也会从“未回答”SO问题队列中删除,如果其他人通过您的解决方案解决了他们的问题,您可能会发现一些投票代表支持该解决方案;-)