在VBA中用平滑线条编码散点图

我正在尝试使用VBA使用stream畅的线条来编写散点图。 我正在尝试从工作表中取出数据,并使用VBA在同一工作簿不同表单中创build带有线条和无标记的散点图。

这是我的工作表的一部分

在这里输入图像说明

A列中低于247和263至455之间的值在B列中将相应为-1.75。

x值在范围A1:A401

y值在B1:B401范围内

此外,我想标题为我的graphics和X和Y轴标记。 我无法弄清楚如何让y值与x值一起绘制,而不是在图表上绘制两条独立的线。

这是我需要的图表

在这里输入图像说明

这是我用过的代码

 Set xData = ThisWorkbook.Worksheets(2).Range("A1:A" & LastRow_this) Set yData = ThisWorkbook.Worksheets(2).Range("B1:B" & LastRow_this) Set GraphRange = Union(xData, yData) 'Create a chart Set cht = ThisWorkbook.Worksheets(1).Shapes.AddChart2 'Give chart some data cht.Chart.SetSourceData Source:=GraphRange 'Determine the chart type cht.Chart.ChartType = xlXYScatterLines 

这是它在Excel中给我的。

在这里输入图像说明

我怎样才能得到想要的结果?

如果范围是dynamic的,我该怎么办?

你可以尝试这样的事情…

 Sub CreateChart() Dim wsData As Worksheet, wsChart As Worksheet Dim LastRow As Long Dim xData As Range, yData As Range, GraphRange As Range Dim cht As Shape Application.ScreenUpdating = False Set wsChart = Sheets(1) Set wsData = Sheets(2) LastRow = wsData.Cells(Rows.Count, 1).End(xlUp).Row Set xData = ThisWorkbook.Worksheets(2).Range("A1:A" & LastRow) Set yData = ThisWorkbook.Worksheets(2).Range("B1:B" & LastRow) Set GraphRange = Union(xData, yData) 'Create a chart Set cht = ThisWorkbook.Worksheets(1).Shapes.AddChart2(, xlXYScatterLinesNoMarkers) 'Give chart some data cht.Chart.SetSourceData Source:=GraphRange cht.Chart.FullSeriesCollection(1).Format.Line.Weight = 5 Application.ScreenUpdating = True End Sub 

在这里输入图像说明

使用散点图,您不希望对整个图表使用“GraphRange”。 根据月球的数据和相位,Excel将尝试将X和Y数据绘制为单独的数列,这不是您想要的。

而是分别编辑或插入每个系列,并设置X和Y值的范围。 您还需要xlXYScatterSmoothNoMarkers作为图表types。

尝试使用macroslogging器来select范围,添加平滑线条的散点图。 然后检查代码。 这将为您提供有关您需要对代码进行更改的宝贵指示。

我的代码是

 Sub setChart() Dim LastRow_this As Long Dim Ws As Worksheet, chtWs As Worksheet Dim xData As Range, yData As Range Dim Cht As Chart Set Ws = ThisWorkbook.Worksheets(2) Set chtWs = ThisWorkbook.Worksheets(1) With Ws LastRow_this = .Range("a" & Rows.Count).End(xlUp).Row Set xData = .Range("A1:A" & LastRow_this) Set yData = .Range("B1:B" & LastRow_this) End With Set Cht = chtWs.Shapes.AddChart.Chart With Cht .ChartType = xlXYScatterLinesNoMarkers .HasLegend = False .SeriesCollection.NewSeries With .SeriesCollection(1) .XValues = xData .Values = yData End With .Axes(xlCategory).MajorUnit = 50 .Axes(xlCategory).HasMajorGridlines = True .Axes(xlValue).HasMajorGridlines = True .Axes(xlCategory).MaximumScale = 460 .Axes(xlCategory).MinimumScale = 50 End With End Sub