编程语言应用

首页 » 常识 » 诊断 » Excel中VBA编程,处理数据得心应手
TUhjnbcbe - 2023/9/1 20:20:00

#在VBA宏模块中编写代码其实并不是想象中的那么难,虽然代码看上去比较繁琐和复杂,但是如果你利用“录制宏”的功能来生成代码就非常容易了,然后再对生成的代码进行适当修改,代码是按照你的操作步骤一步一步生成的,每一步你的操作与代码对应,这样很容易修改生成的代码。

录制宏:

找到视图下的宏,找到录制功能:

录制宏模块

给宏取名:

按功能输入宏模块的名称:

给宏模块命名

手动作图:

先用手动选择数据画想要生成的图形:

先用手动选择数据画想要生成的图形

停止录制:

画好图后停止录制宏

查看宏:

找到名称,点编辑进入代码窗口:

编辑宏代码

点开编辑,查看系统自动生成的代码:

Subcurve()Range("G:H").SelectActiveSheet.Shapes.AddChart.SelectActiveChart.SetSourceDataSource:=Range("数据1!$G$:$H$")ActiveChart.ChartType=xlLineMarkersActiveChart.SeriesCollection(1).SelectActiveSheet.ChartObjects("图表1").ActivateActiveSheet.ChartObjects("图表1").ActivateActiveChart.Axes(xlCategory).SelectActiveSheet.ChartObjects("图表1").ActivateActiveChart.Axes(xlCategory).SelectActiveChart.Axes(xlCategory).TickLabelSpacing=1ActiveChart.Axes(xlCategory).TickLabelSpacing=3ActiveChart.Axes(xlCategory).TickLabelSpacing=5EndSub

Range("G:H").Select:选择数据范围

ActiveSheet.Shapes.AddChart.Select:当前激活表插入图形

ActiveChart.SetSourceDataSource:=Range("data1!$G$:$H$"):选择源数据

ActiveChart.ChartType=xlLineMarkers:图形类型选折线类型

ActiveChart.SeriesCollection(1).Select:选择系列

ActiveSheet.ChartObjects("图表1").Activate:激活图表

ActiveChart.Axes(xlCategory).Select:选择坐标轴

ActiveChart.Axes(xlCategory).TickLabelSpacing=5:坐标轴文本标签间隔设置为5

可以看出,你的每一步操作都自动生成了代码,而且是严格对应的,有些方法和属性你不知道怎么用,但是如果录制宏自动生成代码,你就知道怎么调用和引用了,这样下一步对于我们来修改程序,批量选择数据,批量生成多个曲线奠定了基础。

下面对8个数据表同时操作,生成曲线图:数据简单处理:把数据为0的值都处理成空值,在画图的时候越过这些值

处理代码:

SubdataOperation()Dimstr3()str3()=Array("","data1","data2","data3","data4","data5","data6","data7","data8")Form=2To24Step2Forj=2ToIfSheets(str3(5)).Cells(j,m)=0ThenFori=1To8Sheets(str3(i)).Cells(j,m).ClearContentsNextiEndIfNextjNextmEndSub新生成列数据(用已有列数据进行自动计算):

SubdataCreate()str1="源数据":str2="F":str3="I":str4="L":str5="J":str6="K":str7="G"Fori=2ToIfSheets(str1).Cells(i,str2)0AndSheets(str1).Cells(i,str3)=""ThenSheets(str1).Cells(i,str3)=Sheets(str1).Cells(i,str2)/Sheets(str1).Cells(i,str4)Sheets(str1).Cells(i,str5)=0Sheets(str1).Cells(i,str6)=-Sheets(str1).Cells(i,str5)/Sheets(str1).Cells(i,str3)*EndIfNextiEndSub画图代码:

通过录制宏,然后手动修改宏,再额外加一些简单的循环代码,实现多表和多图操作

SubimageCreate()定义数组变量:Dimstr1(1To12),str3()Dimy(1To12)Dimysz()按照实际对8个或者更多个数据表进行作图:mm8=1str3()=Array("","data1","data2","data3","data4","data5","data6","data7","data8")ysz()=Array(0,7,3,10,32,28,28,4,32)每个循环代表对一个数据表进行作图Fori2=1To8激活相应数据表SelectCasei2Casei2Sheets(str3(i2)).ActivateEndSelectm=64Fori1=1To12SelectCasei2Casei2Sheets(str3(i2)).ActivateEndSelect数据区域选择:str2=Chr(i1+m)y(i1)=Application.WorksheetFunction.CountA(Range(CStr(str2)+"1"+":"+CStr(str2)"00"))str1(i1)=CStr(str2)+"1"+":"+CStr(Chr(i1+m+1))CStr(y(i1))m=m+1Range(str1(i1)).Select对图形进行相应操作,包括图形类型,线型,颜色,系列名称,标记大小、图名等:ActiveSheet.Shapes.AddChart.SelectWithSelection.Shadow=FalseEndWithActiveChart.SetSourceDataSource:=Range(str3(i2)+"!"+"$"+str2+"$2:$"+CStr(Chr(i1+m))+"$"+CStr(y(i1)))ActiveChart.ChartType=xlLineMarkersActiveChart.Legend.SelectSelection.DeleteActiveChart.SeriesCollection(1).Name="="+""+str3(i2)+""+"!"+"$"+str2+"$1"ActiveChart.LocationWhere:=xlLocationAsObject,Name:="曲线图"+CStr(mm8)ActiveChart.SeriesCollection(1).SelectActiveChart.SeriesCollection(1).Smooth=TrueWithSelection.Border.ColorIndex=ysz(i2).Weight=xlMedium.LineStyle=xlContinuousEndWithWithSelection.MarkerBackgroundColorIndex=ysz(i2).MarkerForegroundColorIndex=ysz(i2).MarkerStyle=xlDiamond.Smooth=ture.MarkerSize=5.Shadow=FalseEndWithActiveChart.ChartArea.Select删除标题,如果想实现某一功能,可能通过录制宏然后再修改代码Ifi26ThenActiveChart.ChartTitle.SelectSelection.DeleteEndIfIfi24ThenWithSelection.Border.LineStyle=0EndWithWithActiveChart.HasAxis(xlCategory,xlPrimary)=False.HasAxis(xlValue,xlPrimary)=TrueEndWithActiveChart.Axes(xlCategory,xlPrimary).CategoryType=xlAutomaticActiveChart.Axes(xlValue).SelectWithSelection.Border.ColorIndex=57.Weight=xlMedium.LineStyle=xlContinuousEndWithElseIfi2=4ThenWithSelection.Border.LineStyle=0EndWithActiveChart.Axes(xlCategory,xlPrimary).CategoryType=xlAutomaticActiveChart.Axes(xlValue).SelectSelection.TickLabels.NumberFormatLocal="0_"设置标记线样式WithSelection.TickLabels.NumberFormatLocal="0_".MajorTickMark=xlInsideEndWithWithSelection.Border.ColorIndex=57.Weight=xlMedium.LineStyle=xlContinuousEndWithWithSelection.MajorTickMark=xlInside.MinorTickMark=xlNone.TickLabelPosition=xlNextToAxisEndWithActiveChart.Axes(xlCategory).SelectWithSelection.Border.ColorIndex=57.Weight=xlMedium.LineStyle=xlContinuousEndWithEndIfWithActiveChart.Axes(xlCategory).HasMajorGridlines=False.HasMinorGridlines=False.MajorTickMark=xlInsideEndWithWithActiveChart.Axes(xlValue).HasMajorGridlines=False.HasMinorGridlines=False.MajorTickMark=xlInsideEndWithActiveChart.PlotArea.SelectWithSelection.Border.Weight=xlThin.LineStyle=xlNoneEndWith对图表和曲线相应设置进行操作Selection.Interior.ColorIndex=xlNoneActiveChart.Axes(xlValue).SelectActiveChart.PlotArea.SelectActiveChart.ChartArea.SelectActiveSheet.Shapes(ActiveSheet.Shapes.Count).IncrementLeft.41ActiveSheet.ChartObjects(ActiveSheet.Shapes.Count).ActivateActiveChart.ChartArea.Shadow=False对曲线显示位置操作ActiveChart.ChartArea.SelectActiveSheet.Shapes(ActiveSheet.Shapes.Count).IncrementLeft*i1Ifi25Andi26Andi27Andi28ThenActiveSheet.Shapes(ActiveSheet.Shapes.Count).IncrementTop70*(i2+3)EndIfIfi2=5ThenActiveSheet.Shapes(ActiveSheet.Shapes.Count).IncrementTop70*(0+3)EndIfIfi2=6Ori2=7Ori2=8ThenActiveSheet.Shapes(ActiveSheet.Shapes.Count).IncrementTop70*(i2-6)EndIfActiveSheet.Shapes(ActiveSheet.Shapes.Count).ScaleWidth1.8,msoFalse,msoScaleFromTopLeftActiveSheet.Shapes(ActiveSheet.Shapes.Count).ScaleHeight0.38,msoFalse,msoScaleFromTopLeftNexti1Nexti2EndSub点击运行模块代码:

点击运行

宏代码模块

运行完毕,打开EXCEL,批量图形展现于此:

数百个曲线图自动一次成图

研究开发Excel中VBA宏模块自动调用Excel的图表制作功能,自动生成数百个曲线图,并且能够根据成图数据自动设置坐标数值、字体及大小、曲线图的形状、颜色及显示方式等参数,实现曲线图的快速成图和自动调整外观及坐标参数。

还可以应用VB程序开发工具编写程序自动从服务器提取和处理需要的数据,按特定格式输出到Excel数据表格中,通过编写宏代码,应用Excel中VBA宏模块调用Excel的图表制作功能,自动生成曲线图,并通过编写VB程序代码设定特定格式数据,通过编写VBA宏模块代码调用数据进行图自动的生成和自动参数设置,实现多组曲线图快速生成和快速坐标及外观设置的目的。

进阶思想:

要想从数据提取,生成新的数据,再到批量成图,需要有完整的思路

功能分类设计图

实现流程图:

实现流程图

成功自动生成数据后,导入VBA模块:

生成数据,导入模块

运行模块,自动批量生成曲线:

批量生成数百种图形

结语:会编程能够有效的提高效率,希望这些可以帮助到需要它的朋友,如果觉得有用,请

1
查看完整版本: Excel中VBA编程,处理数据得心应手