VBA代码为Excel。 如何在分隔的工作表中创build图表?

我有一个关于如何使用vba代码自动创build图(图)的问题。 我可以有两种列的excel文档:可以分为6列的列或可以分为7列的列。前2张图片代表我如何收到excel文档。

我要做的是:

步骤1.复制A列,并将其放在每组6或7列之前,并插入一个空的列,如图3所示。

第二步 :为每个在新工作表中创build的新工作组创build一个图表(例如,如果我有100组工作列,我想要有100张工作表,

问题是: 如何把每个图表分隔开?

如果需要,第一张纸的名字是“HOOD”

我写的代码可以做第一步,也创build情节,但问题是我不能把每个图表放在一张纸上。

我可以做第1步,从第2步我只能创build图表,但我不能把每个图表放在一个新的表格中。

6columns7columns使用vba代码我得到了什么

Sub Macro_Linearity_Plot() Dim pas As Integer Dim val As Integer Dim lCol As Integer Dim i As Integer Dim uCol As Integer ' define the numbers of columns. it can be 6 or 7 columns. lCol = Cells(1, Columns.Count).End(xlToLeft).Column val = Range("A1").Value pas = val + 2 ' insert 2 new empty columns For colx = pas To lCol Step pas Columns(colx).Insert Shift:=xlToRight Columns(colx).Insert Shift:=xlToRight Next ' insert column number 1 For colx = pas + 1 To lCol Step pas Sheets("HOOD").Columns(1).Copy Sheets("HOOD").Columns(colx).PasteSpecial xlPasteValues Next ' for every group of columns created at the last step generate a chart uCol = Cells(1, Columns.Count).End(xlToLeft).Column For i = -1 To uCol Step pas Range(Cells(2, i + 2), Cells(121, i + pas)).Select ActiveSheet.Shapes.AddChart.Select ActiveChart.SetSourceData Source:=Range(Cells(2, i + 2), Cells(121, i + pas)) ActiveChart.ChartType = xl3DArea Next End Sub 

谢谢 :)

更新

新的代码是:

  Sub Macro_Linearity_Plot() Dim pas As Integer Dim val As Integer Dim lCol As Integer Dim i As Integer Dim uCol As Integer ' define the numbers of columns. it can be 6 or 7 columns. lCol = Cells(1, Columns.Count).End(xlToLeft).Column val = Range("A1").Value pas = val + 2 ' insert 2 new empty columns For colx = pas To lCol Step pas Columns(colx).Insert Shift:=xlToRight Columns(colx).Insert Shift:=xlToRight Next ' insert column number 1 For colx = pas + 1 To lCol Step pas Sheets("HOOD").Columns(1).Copy Sheets("HOOD").Columns(colx).PasteSpecial xlPasteValues Next ' for every group of columns created at the last step generate a chart uCol = Cells(1, Columns.Count).End(xlToLeft).Column For i = -1 To uCol Step pas Range(Cells(2, i + 2), Cells(121, i + pas)).Select ActiveSheet.Shapes.AddChart.Select ActiveChart.SetSourceData Source:=Range(Cells(2, i + 2), Cells(121, i + pas)) ActiveChart.ChartType = xl3DArea xx = 1 'Just to identify the Graph order ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Chart" & xx 'Count the sheets and Charts for moving Chart to the end ws = ThisWorkbook.Worksheets.Count cht = ThisWorkbook.Charts.Count Sheets("Chart" & xx).Move After:=Sheets(ws + cht) xx = xx + 1 Next End Sub 

但是有一些错误:

错误调试

当您使用不合格的范围时,遇到的问题是典型的。 非限定范围是指活动工作表,每次插入新工作表时都会更改,所以在第一次循环之后,代码就开始搞乱了。

起初我已经通过在每个循环之后“重新激活”HOOD修复你的代码,但是我更愿意完全重写你的代码,以便除了一些其他的修复之外,它不会引用不合格的范围。

 Sub Macro_Linearity_Plot() Dim pas As Integer, val As Integer, lCol As Integer, i As Integer, ch As Chart With Sheets("HOOD") lCol = .Cells(2, .Columns.Count).End(xlToLeft).Column val = .Range("A1").Value pas = val + 2 ' insert an empty column and a copy of column A For colx = pas To lCol Step pas .Columns(colx).Insert Shift:=xlToRight .Columns(colx).Insert Shift:=xlToRight .Columns(1).copy .Columns(colx + 1) Next Application.CutCopyMode = False ' for every group of columns generate a chart and move it to end of Workbook lCol = .Cells(1, Columns.Count).End(xlToLeft).Column For i = -1 To lCol Step pas Set ch = ActiveWorkbook.Charts.Add '<~~ add a chart in own new sheet ch.ChartType = xl3DArea ch.SetSourceData .Range(.Cells(2, i + 2), .Cells(121, i + pas)) ch.name = "Chart" & CInt(1 + (i + 2) / pas) ch.Move , ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) Next End With End Sub 

我已经查看并更改了原始脚本中的一些项目。

我的初始xx的设置不好,它需要在循环之前,否则它将始终是1。

我做了一些改变,我相信也有更好的方法:最后一列的分配; 确保你参考你想要select一组单元格的特定工作表

  Sub Macro_Linearity_Plot() Dim pas As Integer Dim val As Integer Dim lCol As Integer Dim i As Integer Dim uCol As Integer ' define the numbers of columns. it can be 6 or 7 columns. 'You lCol script was worn got determine the last Column With ActiveSheet.UsedRange lCol = .Columns(.Columns.Count).Column End With 'lCol = Cells(1, Columns.Count).End(xlToLeft).Column val = Range("A1").Value pas = val + 2 ' insert 2 new empty columns For colx = pas To lCol Step pas Sheets("HOOD").Columns(colx).Insert Shift:=xlToRight Sheets("HOOD").Columns(colx).Insert Shift:=xlToRight Next ' insert column number 1 For colx = pas + 1 To lCol Step pas Sheets("HOOD").Columns(1).Copy Sheets("HOOD").Columns(colx).PasteSpecial xlPasteValues Next ' for every group of columns created at the last step generate a chart uCol = Cells(1, Columns.Count).End(xlToLeft).Column xx = 1 'Just to identify the Graph order For i = -1 To uCol Step pas 'Need top reselect the "HOOD" sheet for the range selection ActiveWorkbook.Sheets("HOOD").Select Sheets("HOOD").Range(Cells(2, i + 2), Cells(121, i + pas)).Select ActiveWorkbook.Sheets("HOOD").Shapes.AddChart.Select ActiveChart.SetSourceData Source:=Range(Cells(2, i + 2), Cells(121, i + pas)) ActiveChart.ChartType = xl3DArea ChartName = "Graph Group " & xx ActiveChart.Location Where:=xlLocationAsNewSheet, Name:=ChartName 'Count the sheets and Charts for moving Chart to the end ws = ThisWorkbook.Worksheets.Count cht = ThisWorkbook.Charts.Count Sheets(ChartName).Move After:=Sheets(ws + cht) xx = xx + 1 Next i End Sub