Excel——宏教程(2)

Excel------宏教程(2)

一)、处理单元格

1、直接赋值与引用

将变量、常量值直接赋给单元格、或将单元格的值直接赋给变量、常量,这是在excel中最简单的单元格赋值及引用方法。

如下例将工作表"Sheet1"A1单元格的值赋给Integer变量I,并将I+1的值赋给当前工作表中的B1单元格:

vbnet 复制代码
Dim I As Integer
I=Worksheets("Sheet1").Cells(1,1) 

Cells(1,2).Select '选定B1单元格,使其成为当前单元格 ActiveCell=I+1 '以I+1为当前单元格赋值

2、用公式赋值

在宏的使用中,可能会更多地用公式来给单元格赋值。

如下例将相对于活动单元格左侧第4列、向上第6行至向上第2行的单元格数值之和赋给活动单元格(以本行、本列为第0行、0列):

vbnet 复制代码
ActiveCell.Formula="=AVERAGE(R[-6]C[-4]:R[-2]C[-4])"

3、引用其它工作表中的单元格

当赋值公式中需要引用其它工作表中的单元格时,在被引用的单元格前加上"工作表名!"即可。

如以下即在赋值中引用了"Sheet1"工作表中的A1至A4单元格:

vbnet 复制代码
Range("E10").Formula="=SUM(Sheet1!R1C1:R4C1)"

但需注意的是:当被引用的工作表名中含有某些可能引起公式歧义的字符时,需要用单引号'将工作表名括起来。如:

vbnet 复制代码
Worksheets("Sheet1").ActiveCell.Formula="=Max('1-1剖面'!D3:D5)"

4、引用其它工作簿中的单元格

在被引用单元格所在工作表名前加上"[工作簿名]",即可引用其它工作簿中的单元格。如:

vbnet 复制代码
ActiveCell.Formula="=MAX([Book1.xls]Sheet3!R1C:RC[4])"

同样需注意的是:当被引用的工作簿名中含有某些可能引起公式歧义的字符时,需要用中括号"["、"]"及单引号'将工作簿名括起来。如:

vbnet 复制代码
Cells(1,2).Formula="=MIN('[1995-2000总结.xls]1995-1996年'! $A$1:$A$6)"

5、避免循环引用

在上述公式赋值过程中,应避免在公式中引用被赋值的单元格,防止循环引用错误。

6、添加批注

可按如下方法格给单元格添加批注:

vbnet 复制代码
Dim 批注文本 As String

批注文本="批注示例" '准备批注文本

vbnet 复制代码
ActiveCell.AddComment '添加批注
ActiveCell.Comment.Text Text:=临时 '写入批注文本
ActiveCell.Comment.Visible=False '隐藏批注[dvnews_page]

7、添加、删除、复制、剪切、粘贴单元格

vbnet 复制代码
Range("D10").Insert Shift:=xlToRight '在D10单元格处添加一新单元格,原D10格右移 
Range("C2").Insert Shift:=xlDown '在C2单元格处添加一新单元格,原C2格下移
Rows(2).EntireRow.Insert '在第2行前添加一空白行,原第2行下移
Columns(3).EntireColumn.Insert '在C列前添加一空白列,原C列右移
Columns("A:D").Delete Shift:=xlToLeft '删除A列至D列,其右侧列左移
Rows("3:5").Delete Shift:=xlUp '删除第3行至第5行,其下方行上移
Range("B2").EntireRow.Delete '删除第2行
Range("C4").EntireColumn.Delete '删除C列
Range("B10:C13").Copy '复制B10至C13单元格区域
Cells(1,2).Cut '剪切B1单元格
Range("D10").Select
ActiveSheet.Paste '自D10单元格起粘贴剪贴板中的内容

二)、图表

1、工作表图表

以下为一添加工作表图表的实例。

vbnet 复制代码
Charts.Add after:=Worksheets("Sheet1") '在"Sheet1"工作表之后添加新图表工作表
ActiveChart.ChartType=xlXYScatterSmooth '图表类型为XY平滑线散点图
ActiveChart.SetSourceData Source:=Sheets("结点坐标").Range("A1:B69"), PlotBy:= _
xlColumns '图表数据来源于"结点坐标"工作表的A1至B69单元格,且按列绘图。
ActiveChart.Location Where:=xlLocationAsNewSheet
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "节点坐标" '图表标题"节点坐标"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x" 'x轴标题"x"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y" 'y轴标题"y"
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = True '显示x轴主网格线,默认情况下为显示
.HasMinorGridlines = True '显示x轴次网格线,默认情况下为不显示
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True '标出x轴主网格值,默认情况下为标注
.HasMinorGridlines = False '取消x轴次网格值标注,默认情况下为不标注
End With
ActiveChart.Legend.Position = xlRight '图例显示在图表右侧

2、嵌入式图表

嵌入式图表仅在添加方式及引用格式上与工作表图表有所不同,而对图表的设置基本类似。详见下例。

vbnet 复制代码
Set嵌入表=ActiveSheet.ChartObjects.Add(0,0,200,300) '在当前工作表(0,0)坐标处添加宽200,高300的嵌入式图表
嵌入表.Chart.ChartType = xlColumnClustered '图表类型为簇状柱形图
嵌入表.Chart.SetSourceData Source:=Sheets(1).Range("A2:B2"), PlotBy:=xlRows 
'设置图表数据来源
With 嵌入表.Chart
.HasTitle = False '无图表标题
.Axes(xlCategory, xlPrimary).HasTitle = False '无x轴标题
.Axes(xlValue, xlPrimary).HasTitle = False '无y轴标题
End With[dvnews_page]

三)、工作表

1、添加

vbnet 复制代码
Sheets.Add before:=Sheets(1) '在第1工作表前添加新工作表
Sheets.Add after:=Sheets(Sheets.Count) '在最后工作表后添加新工作表

2、移动

vbnet 复制代码
ActiveSheet.Move before:=Sheets(2) '将当前工作表移动至第2工作表之前

3、命名

vbnet 复制代码
ActiveSheet.Name="工作表名" '将当前工作表命名为"工作表名"

4、删除

可以用以下语句删除当前工作表。

vbnet 复制代码
ActiveSheet.Delete

但在删除前excel会自动弹出提示框,需在用户确认后方可执行删除。为避免这一干扰,可以先用以下语句关闭excel的警告提示。

vbnet 复制代码
Application.DisplayAlerts = False

在删除完成后,再重新打开excel的警告提示

vbnet 复制代码
Application.DisplayAlerts = True

四)、工作簿

excel的宏对工作簿的操作主要为保存。

vbnet 复制代码
Dim 存盘文件名 As String
vbnet 复制代码
ActiveWorkbook.Save '保存当前工作簿
存盘文件名="工作表名"
vbnet 复制代码
ActiveWorkbook.SaveAs Filename:= 存盘文件名 '当前工作簿另存为"工作表名.xls"

在另存时,若指定的存盘文件名不包含路径,则保存在该工作簿的打开目录下。而若此存盘文件已存在,也可用关闭excel警告提示的方法以免其自动弹出提示框。

相关推荐
今日之风甚是温和1 小时前
【Excel】拆分多个sheet,为单一表格
java·excel·sheet·vb宏
如意机反光镜裸1 小时前
Excel如何批量导入图片
excel
滨HI016 小时前
python中Pandas操作excel补全内容
python·excel·pandas
Leuanghing16 小时前
使用Python生成卡方分布表并导出为Excel文件
python·excel·pandas·scipy·卡方分布表
叮当喵是mao18 小时前
python基础知识(七)——写入excel
android·python·excel
阿呆5911 天前
使用 Excel 的功能来快速在 TXT 文件中添加一列零
excel
Benaso1 天前
使用Python编写脚本,为Excel表格添加水印
python·excel
Str_Null1 天前
Seatunnel解决Excel中无法将数字类型转换成字符串类型以及源码打包
java·excel·seatunnel·源码修改
丶Darling.2 天前
Linux之vim全选,全部复制,全部删除
linux·vim·excel