FLUX數(shù)據(jù)后處理怕轿,使用VBA在EXCEL中批量插入插入散點圖
Sub ChartsInsert()
Dim num As Integer
num = 1900
'定義數(shù)據(jù)量
For Each sh In Worksheets
'遍歷工作表肄满,尋找A1單元格為"Labels"的表
If sh.Range("A1").Value = "Labels" Then
Worksheets("CHARTS").Select
'激活"CHARTS"表插入圖表,
Worksheets("CHARTS").Shapes.AddChart.Select
'用With語句省略重復(fù)書寫ActiveChart對象代碼智政,ActiveChart代表上一行中被選中的新插入圖表
With ActiveChart
'CharType是圖表類型屬性认罩,xlXYScatter代表散點圖xlXYScatterSmoothNoMarkers
.ChartType = xlXYScatterSmoothNoMarkers
'SeriesCollection代表圖表系列對象集合,NewSeries方法表示新增圖表系列续捂,相當(dāng)于圖表數(shù)據(jù)源對話框中的“添加數(shù)據(jù)系列”
Dim XV, YV, NAME, COL As String
XV = sh.NAME + "!$B$2:$B$" + LTrim(Str(num))
Dim i As Integer
'遍歷工作表的列垦垂,第一列為空,第二列為時間牙瓢,其余列為數(shù)據(jù)劫拗,為每一列添加曲線系列
For i = 3 To sh.Range("IV1").End(xlToLeft).Column
.SeriesCollection.NewSeries
'SeriesCollection(i)代表新插入的第i個數(shù)據(jù)系列,Name是數(shù)據(jù)系列名稱一罩,這和圖表數(shù)據(jù)源對話框中的“系列名稱”是一樣的杨幼。
'Chr()函數(shù)功能在于把代碼開頭的i所代表的數(shù)字換成A-Y字母列名,LTrim()去掉字符串左側(cè)的空格
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
'以下代碼實現(xiàn)圖表縱向排開效果
With Worksheets("CHARTS")
'ChartObjects是所有圖表類對象集合聂渊,Left屬性代表圖表距離Excel編輯界面上邊界距離差购,這里以集合形式將所有圖表的Left屬性設(shè)置為0
.ChartObjects(1).Top = 0
.ChartObjects.Left = 0
.ChartObjects.Height = 400
.ChartObjects.Width = 1000
'Height代表圖表的寬度,因為每張圖表寬度都是一樣的汉嗽,如將圖表縱向排開的話欲逃,則從第二個圖表開始,Left屬性值應(yīng)該是上一張圖表的高度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