Excel VBA范例大全
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2部分 单元格数据处理技巧

Excel制表中运用最多的莫过于数据处理。前一部分学习了一些单元格及区域之选择技巧,本部分将对选择后之区域数据从最基本的转换和标示,再到复杂的运算、查找、替换等诸多方面进行实例讲解。用户可以从中掌握到数据处理的技巧和一些常用语法。

本部分主要知识点:

● 选区数字、文本及字母转换

● 修改选区格式

● 修改选区数据

● 控制选区的不重复值

● 链接功能的使用

● 批注功能的使用

● 合并单元格相关操作

● 数据查询与替换

● 处理名称

● 其他应用

第4章 选区数据转换

在制表过程中,有时需要对文本、数值、字母等元素进行转换,本章通过5个实例展示数据转换中的技巧。同时还将运用到手动转换和自动转换,读者可从中了解到不同需求下将宏程序存于不同的事件中,从而实现手动运行与自动运行。

● 实例28将选区公式转换成数值

● 实例29将当前区域公式转换成数值

● 实例30将数字转换为文本

● 实例31自动将小写转换为大写

● 实例32将英文转换为首字母大写

实例28 将选区公式转换成数值

【技巧说明】 将选择区域的公式一次性转换成固定数值,使之不随引用数据变化而变化。

【案例介绍】 如图2.1所示,工作表引用了其他工作表的数据进行运算,当其他表的数据改变时将跟随变化,若其他表被删除,则本工作表的公式结果将会出错。现需将该表公式引用转换成固定数值。

图2.1 引用其他工作表数据之工作表

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub公式转为值()
  Dim Rng As Range            '声明变量
  Set Rng=Application.InputBox("请选取公式单元格区域", "转换为数值", "a1",
      Type:=8) '选择区域
  If Rng Is Nothing Then Exit Sub '若点击取消则退出程序
  Rng=Rng.Value               '公式转为值
End Sub

[4] 使用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮。

[5] 运行程序时将弹出选择区域的窗口,此时可以手工输入待转换的区域,也可以用鼠标选择区域,如图2.2所示。

图2.2 选择区域窗口

[6] 单击“确定”按钮,程序将所选择区域之公式全部转换成数值。可以从编辑栏观察到,公式已变为固定值,如图2.3所示。

图2.3 转换后的工作表

提示

本实例参见光盘样本:..\第2部分\实例28.xlsm。

【相关知识说明】

(1)Application.InputBox函数:本例在输入单元格地址时可以用InputBox函数实现需求,也可以使用Application.InputBox函数。但InputBox只允许手工输入字符,且不带参数校验功能,即输入“ABC”等不规范的区域引用时不给予提示。本例引用区域时为了使用方便,利用Application.InputBox函数的Type参数为8,不仅可以使用鼠标选择区域,还可以通过参数校验功能确保返回值是有效的单元格引用。Application.InputBox的Type参数返回值见表2.1。

(2)Exit Sub:此语句一般用于中途结束程序。在本例中的作用是:如果在选择区域框中单击了“取消”按钮,则退出程序,如果不用“Exit Sub”,程序将中途弹出错误提示。本语句也可以用另一种方式跳出程序的运行——GoTo,即程序改为以下方式将取得同样的效果:

Sub公式转为值二()
  Dim Rng As Range            '声明变量
  Set Rng=Application.InputBox("请选取公式单元格区域", "转换为数值", "a1",
      Type:=8) '选择区域
  If Rng Is Nothing Then GoTo endd '若点击取消则退出程序
  Rng=Rng.Value             '公式转为值
endd:
End Sub

表2.1 Application.InputBox的Type参数

提示

表2.1列出的Type参数中传递的值可以多个套用。例如,对于一个可接受文本和数字的输入框,将Type设置为1+2;而返回逻辑值与数字则用1+4等。

实例29 将当前区域公式转换成数值

【技巧说明】 将当前单元格所在区域的公式一次性转换成固定数值,使之不随引用数据变化而变化。

【案例介绍】 如图2.4所示,“成绩表”中学号栏引用了“学生学号表”之数据,此时仅仅需要将一班成绩区域的公式转换成值,二班维持不变。

图2.4 引用其他工作表数据之工作表

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub公式转为值()
    ActiveCell.CurrentRegion.Copy                        '复制
    ActiveCell.CurrentRegion.PasteSpecial Paste:=xlPasteValues '粘贴数值
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 用鼠标单击一班成绩区域的任意单元格,然后使用快捷键Alt+F8,运行本程序。确定后,程序将所选择之公式全部转换成数值,结果如图2.5所示。

图2.5 转换后的工作表

提示

本实例参见光盘样本:..\第2部分\实例29.xlsm。

【相关知识说明】

(1)ActiveCell是指当前活动单元格,也是光标所在单元格。如果同时选择了一个区域,则ActiveCell是指选区左上角单元格。

(2)CurrentRegion表示当前已用区域,是以空行与空列的组合为边界的区域。如本例中用鼠标点击A1∶C14区域中任意单元格,ActiveCell.CurrentRegion都表示A1∶C14。

(3)PasteSpecial:将剪贴板中的Range对象粘贴到指定区域中。语法如下:

expression.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)

其中,Paste参数表示选择性粘贴的部分,其参数列表见表2.2。

表2.2 Paste参数列表

实例30 将数字转换为文本

【技巧说明】 将指定区域中的数字格式转换为文本格式。

【案例介绍】 输入人事资料时,若员工身份证号超过15位数字,身份证号码将被系统格式化为科学记数,如图2.6所示。此时在单元格中无论如何修改数据都无法正确显示出身份证号码,解决办法就是将区域格式化为文本。

图2.6 显示为科学记数的身份证号码

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub数字转为文本()
  Selection.NumberFormatLocal="@"
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 选择B2∶B3,然后使用快捷键Alt+F8,运行本程序。确定后,程序将所选区域中的数字转换成文本。若再输入18位数字,则已可以正常显示,如图2.7所示。

图2.7 转换后的工作表

提示

本实例参见光盘样本:..\第2部分\实例30.xlsm。

【相关知识说明】

NumberFormatLocal:表示单元格数字格式,@符号即表示文本格式。

实例31 自动将小写转换为大写

【技巧说明】 自动将B列输入的小写字母转换为大写。

【案例介绍】 工作表中有多列数据,第一列需要输入小写字母,第二列必须是大写字母,如图2.8所示。输入时频繁开关大写锁定键显然会降低输入效率。本例代码可将B列字母自动转换为大写。

图2.8 产品编码表

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE环境。

[2] 使用快捷键Ctrl+R,显示工程资源管理器。

[3] 双击左边列表中的“产品编码表”,打开工作表代码窗口。

[4] 在右边代码窗口输入以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
  If IsEmpty(Target) Then Exit Sub
  If Target.Cells.Count > 1 Then Exit Sub
  If Target.Column <> 2 Then Exit Sub
  Application.EnableEvents=False
  Target.Value=UCase(Target.Value)
  Application.EnableEvents=True
End Sub

[5] 关闭VBE窗口返回到工作表。

[6] 在A列输入小写字母将显示为小写状态,在B列输入小写字母则自动转换为大写状态。

提示

本实例参见光盘样本:..\第2部分\实例31.xlsm。

【相关知识说明】

(1)Worksheet_Change:工作表事件的一种。本例中表示当修改工作表中B列某单元格数据时执行相应的程序。

(2)IsEmpty:返回Boolean值,指出变量是否已经初始化。本例中表示单元格为空时不执行后面的代码。

(3)Exit Sub:表示退出程序。

(4)EnableEvents:指定是否启用事件。本例中修改小写字母为大写前禁用事件,否则将进入死循环,在修改完成后恢复。

(5)UCase:将小写字母转换为大写的函数。

实例32 将英文转换为首字母大写

【技巧说明】 将输入的英文单词或者人名转换为首字母大写。

【案例介绍】 在单元格中输入英文单词时,根据国外习惯,应首字母大写。但输入时不断手工切换将影响输入效率,利用本例代码可自动转换。

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE环境。

[2] 使用快捷键Ctrl+R,显示工程资源管理器。

[3] 双击左边列表中的“产品编码表”,打开工作表代码窗口。

[4] 在右边代码窗口输入以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Target=WorksheetFunction.Proper(Target.Text)
End Sub

[5] 在任意单元格输入单词后,首字母转换为大写,其余字母则小写。

提示

本实例参见光盘样本:..\第2部分\实例31.xlsm

【相关知识说明】

Proper:将英文单词首字母大写、其余字母小写的函数。因为是工作表函数,需要添加前缀“WorksheetFunction”。如果不用工作表函数,也可以用以下VBA方式实现:

Private Sub Worksheet_Change(ByVal Target As Range)
Target=StrConv(Target, vbProperCase)
End Sub