第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