VBA代码记录4 - 散点图

目录

需求

版本一


需求

表格内某两列的数据分别作为X轴和Y轴,创建带直线与数据标记的散点图

版本一

Sub 散点图()

    For i = 2 To Worksheets.Count                                             '遍历需要创建散点图的Sheet
        Sheets(i).Select
        lastrow = ActiveSheet.UsedRange.Rows.Count
        For j = 6 To 7                                                        '把第六、第七列的数据作为Y轴
            If Cells(1, j).Value <> -99 Then
                Sheets(i).Shapes.AddChart2.Select                             '创建图表,并Select
                For k = ActiveChart.FullSeriesCollection.Count To 1 Step -1   '删除默认的系列,Office2016有五个默认的系列且全部显示
                    ActiveChart.FullSeriesCollection(k).Delete
                Next k
                ActiveChart.ChartType = xlXYScatterLines                      '设置图标属性为带直线与数据标记的散点图
                ActiveChart.SeriesCollection.NewSeries                        '新建系列,一条折线表示一个系列
                
                ActiveChart.SeriesCollection(1).XValues = "='" & ActiveSheet.Name & "'!" & "$E$1:$E$" & lastrow   'E列数据作为X轴数据
                ActiveChart.Axes(xlCategory, xlPrimary).MinimumScale = Application.WorksheetFunction.Min(Range("E1:E" & lastrow))                    '设置横坐标的最小值为E列的最小值,设置X轴数据后才能设置最小值
                If j = 6 Then
                    ActiveChart.SeriesCollection(1).Name = "depth"            '新插入的数据系列名称,用于图例显示
                    ActiveChart.SeriesCollection(1).Values = "='" & ActiveSheet.Name & "'!" & "$F$1:$F$" & lastrow                                                   '一列数据作为Y轴数据
                    sensortype = "depth"
                Else
                    ActiveChart.SeriesCollection(1).Name = "pressure"         '新插入的数据系列名称,用于图例显示
                    ActiveChart.SeriesCollection(1).Values = "='" & ActiveSheet.Name & "'!" & "$G$1:$G$" & lastrow                                                   '一列数据作为Y轴数据
                    sensortype = "pressure"
                End If
                ActiveChart.ChartTitle.Text = ActiveSheet.Name & " " & sensortype   '设置图标名称
            End If
        Next j
        
        ActiveSheet.ChartObjects.Top = 300                                    '设置图表位置,距编辑区域顶部
        ActiveSheet.ChartObjects(1).Left = 300                                '设置图表位置,距编辑区域左侧
        If ActiveSheet.ChartObjects.Count > 1 Then                            '多个图表排列
            ActiveSheet.ChartObjects(2).Left = 900 + ActiveSheet.ChartObjects(1).Width + 100
        End If
    Next i

End Sub

参考

1.设置坐标轴:http://www.exceloffice.net/archives/644

2.生成散点图:http://blog.sina.com.cn/s/blog_8748bb0001012usj.html

3.图表类型:https://blog.csdn.net/tulasgao/article/details/13018935

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
让用户可以随时查找曲线上任意点的坐标(函数值) 附件的 .mht文件,是一个简单介绍贝塞尔三次插值的文档,可以用IE打开,更多贝塞尔插值的算法,可以用搜索引擎找 附件的 .xls文件,打开以后,会看见三个工作表,分别演示了 找一个数值在曲线上的一组对应点 找一个数值在曲线上的所有对应点 和贝塞尔曲线是怎样在通过每两个节点的(每一对输入的X-Y数值代表平面坐标系的一个点,称为节点,Excel的平滑曲线通过每一个节点) 要在其他Excel文档使用 BezireInt() 函数,需要按Alt+F11,双击模块一 复制所有文字 然后打开其他Excel文档按Alt+F11,插入---模块,然后粘贴所有文字 自定义函数的使用方法是: 在空白单元格输入 =BezierInt(X坐标的范围,Y坐标的范围,待查的数值) 函数就会返回一个包含六个元素的数组,分别是三个点的X,Y坐标 如: 你根据 a1:a4的数值作为X值,b2:b4的数值作为Y值,画了一个平滑线散点图 想查找c1的数值是不是在这条曲线上 就可以输入 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,1) 得到曲线上第一个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,2) 得到曲线上第一个 X值=C1数值的点的Y坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,3) 得到第2个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,4) 得到第2个 X值=C1数值的点的Y坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,5) 得到第3个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,6) 得到第3个 X值=C1数值的点的Y坐标 如果有多段曲线上的点包含C1的数值,那么可以增加输入参数,指定从哪个节点开始查找 =Index( BezierInt(a1:a4,b1:b4,c1,3),1,1) 得到从第三组X-Y数据开始查找, 返回第一个符合C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1,3),1,2) 得到从第三组X-Y数据开始查找,返回第一个符合C1数值的点的Y坐标 函数默认输入数值是X值,要根据Y值找点的话,还可以增加输入参数, 指定输入的是Y值 =Index( BezierInt(a1:a4,b1:b4,c1,1,"Y"),1,1) 得到返回曲线上第一个 Y值=C1数值的点的X坐标如此类推......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值