EXCEL VBA 运用
在EXCEL中使用VBA编程处理数据
王强
(福建教育学院信息技术系,福建
摘
福州350001)
王强:在
EXCEL
要:本文通过利用EXCEL中的VBA编写宏来自动生成全国等级考试机试安排表的实例,说明EXCEL中宏
的应用和单元格引用的方法。
关键词:EXCEL;宏;引用单元格;VBA中图分类号:TP311
文献标识码:B
2.用编号引用单元格
下例中,Cells(6,1)返回工作表“Sheet1”上的单元格“A6”,然后将Value属性设置为10。
SubEnterValue()
Worksheets("Sheet1").Cells(6,1).Value=10
EndSub
[1]
3.引用行或列
[1]
中使用编程处理数据
VBA
Excel电子表格软件是应用最广泛的软件之一,它的数据处理、图表功能及各种函数和工具深受广大用户的喜爱。Excel文件是一个工作薄,一个工作薄最多可以包含255个工作表,
每个工作表又可以包含大量的数据。
Excel的强大优势还在于它提供的宏语言VisualBasicforApplication(VBA)。VisualBasic是windows环境下开发应用软件的一种通用程序设计语言,功能强大,简便易用。VBA是它的一个子集,可以广泛地应用于Microsoft公司开发的各种软件中,例如Word、Excel、Access等。
那么“,宏”到底是什么呢?在Excel中,“宏”是一个难以理解的概念,但对于一个具体的“宏”而言,却是容易理解的,如果说“将一块文字变为体’,字号为‘三号’”就可以看作一个“宏”的话,难理解了,其实Excel“,并命名存储(相当于VB)在Excel中,“记录宏”仅记录操作结果,而不记录操作过程。例如,改变文字字体时,需要打开“字体”栏中的下拉列表,再选择一种字体,这时文字即变为所选择的字体,这是一个过程,结果是将所选择的文字改变为所选择的字体。而“记录宏”则只记录“将所选择的文字改变为所选择的字体”这一结果。
Excel中工作表是由行和列组成的二维表格,我们可以通过系统提供的VBA语句和宏的功能,任意选取当前工作表中的单元格,对单元格中的数据加以处理,生成自己所需的报表,一点也不逊色于用其他语言来开发的应用程序。
本人就利用Excel提供的VBA语句和宏来处理全国计算机等级考试数据,最终由计算机自动生成上机考试安排表。在编写下面程序的过程中,我个人认为对于以前有一定编程能力的程序员来说,最基本的是如何使用VBA来引用单元格,其余的很大部分内容可以用记录宏的方法来完成。
下面举几种常用引用单元格的方法。
[1]
1.用A1样式的记号引用单元格和单元格区域
4.使用Union方法引用若干单元格区域SubMultipleRange()
Dimr1,r2,myMultipleRangeAsRange
Setr1=Sheets("Sheet1").Range("A1:B2")Setr2=Sheets("Sheet1").Range("C3:D4")SetmyMultipleRange=Union(r1,r2)myMultipleRange.Font.Bold=TrueEndSub
[1]
本程序是以全国等级考试返回的考生数据为例子。假设在工作薄中有一张工作表初始数据如下:(其中程序中主要用到第A,C,I列
)
福建教育学院学报二○○三年第十期
EXCEL VBA 运用
通过以下程序生成如下报表:
Next
’生成报表中的E18单元格数据(生成公式)
Sheets(sheetsname).Cells(lsrow+1,4).FormulaR1C1=
"=SUM(R[+Str(lsrow*-1)+"]C:R[-1]C)"
’对报表中的数据自动调整列宽Sheets(sheetsname).Select
Columns("A:A").EntireColumn.AutoFitRange("B:B,C:C").Select
Selection.NumberFormatLocal="0-"Columns("A:A").SelectSelection.InsertShift:=xlToRight
’合并报表中的A18:D18单元格,并输入“合计”Dimrange1AsRange
Setrange1=Cells(lsrow+1,1)Forlsj=2To4
Setrange1=Union(range1,Cells(lsrow+1,lsj))Nextlsj
range1.Select
Selection.MergeWithSelection
.HorizontalAlignment=xlCenter.VerticalAlignment=xlCenter.WrapText=False.Orientation=0.AddIndent..M=ith
Selection.Value="合计"
’自动生成考次,并合并相关的单元格,见报表中的A5:A17。
rowcount=lsrowlsi=""lsk=0
Forlsj=1Torowcount
IfLeft(Cells(lsj,2).Value,18)<>lsiThenlsk=lsk+1
Cells(lsj,1).Value=lsk
lsi=Left(Cells(lsj,2).Value,18)EndIfNextlsj
Setrange1=Cells(1,1)ls-i=0
Forlsj=1Torowcount
IfLen(Trim(Cells(lsj,1).Value))<>0Thenrange1.SelectSelection.MergeWithSelection
.HorizontalAlignment=xlCenter.VerticalAlignment=xlCenter.WrapText=False.Orientation=0.AddIndent=False.ShrinkToFit=False.MergeCells=TrueEndWithEndI
f
王强:在
EXCEL
中使用编程处理数据
VBA
以下为源程序:’宏开始
Subwqan()
’假设初始数据表名为“机试表”,生成的报表放在工作表名为“wangqiang"的表中
DimlsrowAsInteger
sheetsname="wangqiang"sheetsnameks="机试表"’生成工作表“wangqiang"Sheets(1).SelectSheets.Add
’统计生成考次、、和人数,见报表中B5:Sheets(1).Name=eSheets(sheetsnameks).lstime=Range("I2").Valuelszkzfirst=Range("A2").Valuelszkzsecond=lszkzfirstlsrowfirst=2lsrow=0
ForEachcInRange("i:i").Cells
Ifc.Row<>1Andc.Row<>2ThenIf(lstime<>c.Value)Thenlsrow=lsrow+1
lszkzsecond=Sheets(sheetsnameks).Cells(c.Row-1,1).Value
Sheets(Sheets(1).Name).Cells(lsrow,1).Value=
lstime
Sheets(Sheets(1).Name).Cells(lsrow,2).Value=
lszkzfirst
Sheets(Sheets(1).Name).Cells(lsrow,3).Value=
lszkzsecond
Sheets(Sheets(1).Name).Cells(lsrow,4).Value=
c.Row-lsrow …… 此处隐藏:5638字,全部文档内容请下载后查看。喜欢就下载吧 ……