土工试验报告整理中利用Excel VBA程序解决电子数据批量“输入”问题
2017-03-12张永辉
张永辉
(河北省水文工程地质勘查院 石家庄 050021)
在土工试验报告整理中,包括常规、粘粒分析、三轴(UU、CU)、直接剪切、渗透、湿陷等多项试验数据,这些单项试验在各自数据处理后,往往都是采用人工输入的方法,先输入再让人校对,工作量之大可想而知,既浪费大量人力,又容易出错。现在各试验多采用计算机生成电子版结果,笔者在工作中利用Excel VBA程序将生成的电子版数据通过查找、替换相同样号后数据,以完成数据的修改即输入问题。
1 用Excel VBA开发程序的重要性
Excel VBA是一门强化及改造Excel的程序语言,利用VBA可以完成两大类任务:解决自己的工作问题及开发通用软件,如果非仅仅处理个人面临的工作问题,而是编程适用群体需求,则更为重要。笔者利用Excel VBA编写的程序还可作为通用程序,延伸到其他工作、领域及日常生活中完成数据输入问题。
2 Excel VBA运行环境
将VBA宏安全性设置为中或低(在安装了防病毒软件或检查了所有要打开的文档安全性时),以便创建运行环境,正常启动VBA程序。
3 用Excel VBA开发程序批量输入电子数据
用VBA编写程序及应用的步骤为:首先新建Excel工作簿,改名为“数据读取程序”,将Sheet1重命名为“各试验项源数据”,将Sheet2重命名为“检查同号并读取”,从工具栏中调出“控制工具箱”,在“各试验项源数据”工作表中添加“CommandButton1”,双击进入VBA编辑器界面,则自动打开“工程资源管理器窗口”中的“Sheet1(各试验项源数据)”,在代码编辑区输入编写的以下批量读取电子数据代码(输入主程序,首尾语句已自动生成):
Private Sub CommandButton1_Click()
Dim n As Integer, i As Integer, j As Integer, m As Integer, k As Integer
Dim num As Integer, x As Integer
n = Sheet1.Range("B65536").End(xlUp).Row '-----原始表格的范围
m = Sheet2.Range("B65536").End(xlUp).Row '-----对比表格的范围
x = 1
For i = 2 To n
For j = 2 To m
If Sheet2.Cells(j, 2) = Sheet1.Cells(i, 2) Then
For k = 3 To 100
If Sheet2.Cells(j, k) <> Sheet1.Cells(i, k) Then
Sheet2.Cells(j, k).Interior.ColorIndex = 3
Sheet2.Cells(j, k) = Sheet1.Cells(i, k)
End If
Next k
End If
Next j
Next i
For j = 2 To m
num = 0
For i = 2 To n
If Sheet2.Cells(j, 2) = Sheet1.Cells(i, 2) Then
num = num + 1
End If
Next i
If num = 0 Then
Sheet1.Cells(1, x) = Sheet2.Cells(j, 2)
x = x + 1
End If
Next j
End Sub
打开VBA编辑器界面的属性窗口,将“CommandButton1”caption标题改为“读取数据”且根据实际情况和个人爱好更改命令按钮大小、颜色、字体。
在工作表 “各试验项源数据”中,将各单项试验土样编号及电子结果粘贴到以B2为起始的区域;将土工试验总体报告的实验室编号粘贴到工作表“检查同号并读取”中以B2为起始的该列。点击“读取数据”按钮,则自动查找穿插单项结果到工作表“检查同号并读取”中,顺序为报告土样编号顺序。
这个程序还有两个亮点:一是工作表 “各试验项源数据”中首行会显示另一工作表多余的土样编号;二是在工作表“检查同号并读取”中可以将数据加底色红色,以便作样品数据检查时看是否数据修改过。
该程序可将其存为模板,将VBA程序加密码锁定,将模板改为只读格式。如果已经点击了命令按钮发现问题需重新处理可将工作表“检查同号并读取”中读取的数据删除处理后再运行命令。
以下三个图(图1、图2、图3)为Excel工作簿和VBA程序编辑界面:
在试验工作中运用此程序有效地解决了输入、校对繁重的工作量问题,提高了工作效率,防止报告出错,点击命令按钮,做到了一蹴而就,多快好省。
图1 Excel工作簿试验土样编号及电子结果粘贴
图2 Excel工作簿中各试验项源数据检查
图3 Excel工作簿中VBA程序编辑界面
4 用Excel VBA开发程序批量输入电子数据作为通用软件的意义
笔者利用Excel VBA不但可以解决土工试验工作中的数据输入问题,而且可以作为通用程序,完成其它工作中的数据输入问题,只要是工作表“各试验项源数据”中B列中有和 工作表“检查同号并读取”中B列有相同的内容(包括如人名类的文本、数据类的数字编号),运行程序就可以按照工作表“检查同号并读取”中B列的顺序替换后面列中的内容,从而完成数据输入。利用该程序,有助于工作的开展,提高效率,有效避免数据出错,对于电子数据的“输入”具有重要的意义。
[1]罗刚君.Excel VBA程序开发自学宝典.电子工业出版社