摘 要 利用Excel中的VBA编程平台,可以编写出各种基于Excel的数据处理程序,不仅可以数值计算,还可以进行文本格式处理,本文阐明了一种文本格式处理编程方法,展示了利用Excel 2007 VBA 编程处理文本格式的基本原理与方法。
关键词 VBA编程,Excel,文本格式处理
一、数据处理
如果需要将第三列变成第四列的格式(如表1所示),有括号去掉括号,将括号里的字符变成上脚字符,若无括号,有“折号,将折号后的字符变成上脚,若无括号,无折号,保持原格式不变。数据内容不变。这种情况如果有少数几行可以,手工编辑改变格式就可以,如果数据上万行,手工编辑就不可取了,编程自动改变格式自然成为首选。
表1 列举实例
井名 |
油组 |
层编号1 |
上标位置 |
标志 |
层编号2 |
E双1 |
Ⅵ |
1(1-2) |
2 |
1 |
11-2 |
E双1 |
Ⅵ |
1-3 |
2 |
2 |
13 |
E双1 |
Ⅵ |
2(1-2) |
2 |
1 |
21-2 |
E双1 |
Ⅵ |
3 |
0 |
|
3 |
…… |
…… |
…… |
…… |
…… |
…… |
二、基本算法
求取上脚起始位置,即有括号为“(”的位置;没有括号,有折号,刚找折号的位置;既无括号,又无折号为零。
利用Microsoft Excel 中的 Visual Basic 编程,使用 Range 对象,核心语句是:Range(tt).Characters(Start:=temp, Length:=3).Font.Superscript = True
it为范围变量,temp为位置变量,关键点是生成位置参数,然后通过循环,生成将目标列的数据格式修改。
标识和处理 Range 对象最常用的方法,如表2所示。用 A1 样式记号引用单元格和单元格区域,
可使用 Range 属性来引用 A1 引用样式中的单元格或单元格区域。下述子程序将单元格区域 A1:D5 的字体设置为加粗。
Sub FormatRange() Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") .Font.Bold = True End Sub
表2 Range引用处理区域的方法
引用 |
含义 |
Range("A1") |
单元格 A1 |
Range("A1:B5") |
从单元格 A1 到单元格 B5 的区域 |
Range("C5:D9,G9:H16") |
多块选定区域 |
Range("A:A") |
A 列 |
Range("1:1") |
第一行 |
Range("A:C") |
从 A 列到 C 列的区域 |
Range("1:5") |
从第一行到第五行的区域 |
Range("1:1,3:3,8:8") |
第 1、3 和 8 行 |
Range("A:A,C:C,F:F") |
A 、C 和 F 列 |
要引用一个对象,可以使用很多不同的方法。您可以根据程序运行所处的实际环境,以方便和易于理解为原则,确定具体使用何种方法。 本文主要采用使用 Range 属性的 A1 样式引用法。
三、数据处理
1.启用宏
窗口左上角的office按钮—Excel选项—信任中心--信任中心设置---宏设置—启用宏
2。首先如何进入宏编辑状态,
在Excel工具菜单中视图—单击宏(或)ALT+F8查看宏窗口,
3.创建宏
在宏窗口的宏名文本框中输入将创建的宏名,然后点击宏窗口里的“创建”按钮,便进入Visual basic编辑窗口,
4.生成用户窗体
接下来在这个窗口中插入用户窗体,再向用户窗体添加按钮,为新添加的按钮增加响应代码。运行程序。
5.编写代码
6.运行程序
四、Excel对象模型
要完成这个编程任务,须得深刻理解Excel对象模型,Excel的对象模型是通过层次结构很有逻辑地组织在一起的,一个对象可以是其他对象的容器,可以包含其它的对象,而这些对象又包含其它的对象。位于顶层的是Application对象,也就是Excel应用程序本身,它包含Excel中的其它的对象,如Workbook对象;一个Workbook对象包含其它一些对象,如Worksheet对象;而一个Worksheet对象又可以包含其它对象,如Range对象等。这就是Excel的对象模型。
例如:Range对象在Excel对象模型中的位置为:
Application对象
Workbook对象
Worksheet对象
Range对象
可以使用“对象浏览器”查看Excel对象模型的方法,快速浏览工程中的所有组件及特定过程的详细信息。
知道了某对象在对象模型层次结构中的位置,就可以用VBA代码方便地引用该对象,从而对该对象进行操作,并以特定的方式组织这些对象,使Excel能根据您的需要自动化地完成工作任务。因此,要熟练掌握Excel VBA编程,必须理解Excel的对象模型。
集合是对象,是一组属于同一类型的对象或相关的对象的集,作为它们的容器。例如,Workbooks对象是当前打开的所有Workbook对象的集合,Worksheets是包含在某个Workbook对象中的所有Worksheet对象的集合。
在Excel中,Application对象代表Excel应用程序本身,其它的对象都从它开始。每个对象都有自已的方法和属性,并且某些对象的一些方法和属性是相同的。
在通常情况下,我们认为先需要选择对象,然后再对所选对象进行处理,宏录制器就是这样的。事实上,在不进行选择的情况下,直接在对象上执行动作将会更有效且运行快速。
在大多数情况下,需要通过引用对象所在的集合间接地引用某个对象。例如,Workbooks(“Book1.xls”)在工作簿集合中引用名为Book1的Workbook对象。
属性可以返回对另一个对象的引用,一定要认识到这一点。例如,语句Range(“A1”).Font.Bold=True中,Font属性返回Range对象中所包含的一个Font对象。
五、主要代码
处理代码分如下两个部分。
1. 定位上标字符起始位置,并置标志位,
For i = 2 To 1060
temp = Sheet1.Cells(i, 3) ‘为便于计算,将目标串赋值到变量temp中
t = InStr(temp, "(")‘若temp中有”(“,就将”(“出现的位置序号返到t中
若有括号,则把”(“序号存到同一行的第四列单元格中,且令同行的第五列单元格值为1作为识别标志,否则,如果有”-“,则记下”-“的位置序号到本行第四列单元格中,置标记单元格值为 2。
无括号且无”-“,则记下上脚标记位置为0,
If t > 0 Then
Sheet1.Cells(i, 4) = t
Sheet1.Cells(i, 5) = 1
Else
If InStr(temp, "-") > 0 Then ‘如果
Sheet1.Cells(i, 4) = InStr(temp, "-")
Sheet1.Cells(i, 5) = 2
End If
If InStr(temp, "-") <= 0 Then
Sheet1.Cells(i, 4) = 0
End If
End If
Next i
2.根据既得的上标起始位置,实现目标格式
For i = 2 To 1060
tt = "C" & Trim(Str(i)) ‘生成形如C1的单元格范围值赋到变量tt中,
If Sheet1.Cells(i, 4) > 0 And Sheet1.Cells(i, 5) = 1 Then ‘如果有括号
td = Sheet1.Cells(i, 4)
Sheet1.Cells(i, 3) = Replace(Sheet1.Cells(i, 3), "(", "")‘去掉括号
Sheet1.Cells(i, 3) = Replace(Sheet1.Cells(i, 3), ")", "")
Range(tt).Characters(Start:=td, Length:=3).Font.Superscript = True‘置目标子串为上脚格式
End If
If Sheet1.Cells(i, 4) > 0 And Sheet1.Cells(i, 5) = 2 Then’如果无括号,只有”-“,则去掉串中的”-“并将目标子串置为上脚格式
td = Sheet1.Cells(i, 4)
Sheet1.Cells(i, 3) = Replace(Sheet1.Cells(i, 3), "-", "")
Range(tt).Characters(Start:=td, Length:=1).Font.Superscript = True
End If
Next I
|