FLUX数据后处理,使用VBA在EXCEL中批量插入插入散点图
Sub ChartsInsert()
Dim num As Integer
num = 1900
'定义数据量
For Each sh In Worksheets
'遍历工作表,寻找A1单元格为"Labels"的表
If sh.Range("A1").Value = "Labels" Then
Worksheets("CHARTS").Select
'激活"CHARTS"表插入图表,
Worksheets("CHARTS").Shapes.AddChart.Select
'用With语句省略重复书写ActiveChart对象代码,ActiveChart代表上一行中被选中的新插入图表
With ActiveChart
'CharType是图表类型属性,xlXYScatter代表散点图xlXYScatterSmoothNoMarkers
.ChartType = xlXYScatterSmoothNoMarkers
'SeriesCollection代表图表系列对象集合,NewSeries方法表示新增图表系列,相当于图表数据源对话框中的“添加数据系列”
Dim XV, YV, NAME, COL As String
XV = sh.NAME + "!$B$2:$B$" + LTrim(Str(num))
Dim i As Integer
'遍历工作表的列,第一列为空,第二列为时间,其余列为数据,为每一列添加曲线系列
For i = 3 To sh.Range("IV1").End(xlToLeft).Column
.SeriesCollection.NewSeries
'SeriesCollection(i)代表新插入的第i个数据系列,Name是数据系列名称,这和图表数据源对话框中的“系列名称”是一样的。
'Chr()函数功能在于把代码开头的i所代表的数字换成A-Y字母列名,LTrim()去掉字符串左侧的空格
If i < 27 Then
COL = Chr(64 + i)
Else
COL = Chr(64 + CInt(i / 26)) + Chr(64 + (i Mod 26))
End If
YV = sh.NAME + "!$" + COL + "$2:$" + COL + "$" + LTrim(Str(num))
NAME = "=" + sh.NAME + "!$" + COL + "$1"
.SeriesCollection(i - 2).NAME = NAME
.SeriesCollection(i - 2).XValues = XV
.SeriesCollection(i - 2).Values = YV
.ChartTitle.Text = "Chart of " + sh.NAME
Next
End With
End If
Next
'以下代码实现图表纵向排开效果
With Worksheets("CHARTS")
'ChartObjects是所有图表类对象集合,Left属性代表图表距离Excel编辑界面上边界距离,这里以集合形式将所有图表的Left属性设置为0
.ChartObjects(1).Top = 0
.ChartObjects.Left = 0
.ChartObjects.Height = 400
.ChartObjects.Width = 1000
'Height代表图表的宽度,因为每张图表宽度都是一样的,如将图表纵向排开的话,则从第二个图表开始,Left属性值应该是上一张图表的高度Height与上一张图表序号(j-1)之乘积。因图表高度相同,故可以直接使用ChartObjects(1).Height(第一张图表的高度)
For j = 2 To .ChartObjects.Count
.ChartObjects(j).Top = .ChartObjects(1).Height * (j - 1)
Next
End With
End Sub
网友评论