彭 强, 何 鹏, 潘荟霖, 李鹏成
(四川大学水利水电学院岩土工程系, 四川成都 610065)
ExcelVBA在比重瓶法测量岩石比重数据处理中的应用
彭 强, 何 鹏, 潘荟霖, 李鹏成
(四川大学水利水电学院岩土工程系, 四川成都 610065)
在用比重瓶法测岩石比重数据处理过程中,以往是手动根据比重瓶编号查询比重瓶基本参数,此过程既费时又保证不了准确性,文章为了提高查询查询基本参数的效率,提出利用OfficeExcelVBA自动根据比重瓶号查询比重瓶基本参数,做到了既准确又方便。
岩石比重; 比重瓶;ExcelVBA
岩样的比重是指岩粉的质量与同体积4℃时蒸馏水的质量之比。数值上等于岩粉颗粒单位体积的质量,即数值上岩粉的比重等于岩粉密度。
岩样比重试验采用的仪器为容积100ml的短颈比重瓶、BL610型电子天平(d=0.01 g)等。首先将制备好的粒径小于0.25 mm的试件岩粉置于105~110℃的恒温下烘干,称量15 g装入烘干比重瓶内,注入蒸馏水至瓶的一半处采用真空抽气法排除气体后,将蒸馏水注入比重瓶至近满,待上部悬液在恒温下澄清后,称量瓶、试液和岩粉的总质量,并量测比重瓶内水温,计算岩粉比重,称量准确至0.01 g。
按下式计算比重:
(1)
式中:Gs为土的比重,计算至0.01;ms为干土质量(g);m1为瓶、水总质量(g);m2为瓶、水、土总质量(g);Gwt为t℃时蒸馏水的比重(水的比重可查物理手册),准确至0.01。
对比重瓶号为70的在水温为10.8℃时进行校正,得到此瓶在不同水温下的瓶液总重量(表1、表2)。
表1 70号比重瓶的数据
表2 比重瓶修正
续表2g 温度(℃)0.00.10.20.30.40.50.60.70.80.916139.881139.880139.878139.877139.875139.874139.872139.871139.869139.86817139.866139.865139.863139.861139.860139.858139.856139.855139.853139.85118139.850139.848139.846139.845139.843139.841139.840139.838139.836139.83219139.832139.831139.829139.827139.825139.823139.821139.819139.818139.81620139.814139.812139.810139.808139.806139.804139.802139.800139.798139.79621139.794139.792139.790139.788139.786139.784139.782139.780139.777139.77522139.773139.771139.769139.767139.765139.762139.760139.758139.756139.75323139.751139.749139.747139.744139.742139.740139.740139.735139.733139.73124139.728139.726139.724139.721139.719139.716139.714139.712139.709139.70725139.704139.702139.699139.697139.694139.692139.689139.687139.684139.68226139.679139.677139.674139.672139.669139.667139.664139.661139.659139.65627139.653139.651139.648139.645139.643139.640139.637139.635139.632139.62928139.626139.624139.621139.618139.615139.613139.610139.607139.604139.60129139.599139.596139.593139.590139.587139.584139.581139.578139.576139.57330139.570139.567139.564139.561139.558139.555139.552139.549139.546139.54331139.540139.537139.534139.531139.528139.525139.522139.519139.516139.51232139.509139.506139.503139.500139.497139.494139.491139.487139.484139.48133139.478139.475139.471139.468139.465139.462139.458139.455139.452139.44934139.445139.442139.439139.435139.432139.429139.426139.422139.419139.41535139.412139.409139.405139.402139.399139.395139.392139.388139.385139.381
根据此方法,对每一个比重瓶进行校正得到不同水温下的瓶液总重量,将这些数据记录下一个Excel工作簿下,并以瓶号命名工作表,将不同瓶号记录的不同水温下的瓶液总重量放在所对应的瓶号工作表下。
实验需要事先准备好表3。在试验过程中,先称量15 g岩粉装入干比重瓶,此后,需要记录每组的比重瓶号、瓶、干土重,还有最后比重瓶内的温度,瓶、液土总重。
表3 实验记录
根据测得实验时对应的水温度查物理手册得到水的比重Gwt,再查事先准备好的不同比重瓶修正表,得到对应温度下的瓶和瓶液总重。
再通过比重计算公式(1)进行计算。
完成表格,最后就能求得每组的岩样的比重。
用比重瓶法测比重实验者应该都知道在测量比重的过程中需要记录瓶号、温度、瓶和干土重、瓶和液体和土总重,但为了方便起见,我们已经把不同温度下对应的瓶重,瓶液总重做在了一个电子表格下了,我们称这个为比重瓶修正值表。如果做的实验组数很少,也就是说的用的比重瓶很少,查表的话也是很方便的,但是如果做的实验组数很多,这样需要去查表就很不方便了,很费时间,而且容易出错,但是如果观察比重瓶修正表,就会发现,格式是一模一样的。所以笔者想过用程序自动查表,这样就可以提供很大的方便,做到了既准却又方便。通过研究发现,在电子表格中有宏这个功能,而宏正是在可以实现自动化的功能, Excel VBA(Visual Basic for Applications)。
2.1 Excel VBA
Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic Script,Excel VBA是Excel基于Visual Basic一种编程自动化。
2.2 通过VBA自动查询表格得到所需要的数据
通过观察可以发现,不同温度下,瓶重是不变的,所以我们只要取出不同温度下的瓶液总重就行了,但是很明显可以发现,温度是有整数部分和小数部分组成,而我们所制作的修正值表行所对应是的温度的整数部分,列所对应是的小数部分,而行列的交点也就是对应的单元格,就是我们所要查的温度对应的瓶液总重。所以我们在制作每个比重瓶修正值的工作表时最一定要做到不同温度的整数部分和小数部分所对应的行号和列号一定要相同,以便进行程序自动化。
拥有一定的VB基础编写这个程序应该不是很难的,下面进行思路的探讨。
Option Explicit
Sub Auto()
Application.DisplayAlerts = False '关闭提示信息
Application.ScreenUpdating = False '关闭屏幕刷新
Dim Wb As Workbook '定义Wb为工作簿对象型变量
Dim MyPth As String '定义MyPth为文本型变量
Dim Sht As Worksheet '定义Sht为工作表变量
Dim a, i, j, m, n, t, k, z As Integer 'i,j,m,n,,t,k用来循环的整型变量,a用来得到比重工作表的瓶号,z用来得到温度的整数部分
Dim b, c, x, y, p As Double 'b用来存储数据源工作表的名字,c用来存储数据源中找到的瓶重,x和y用来得到温度值的小数部分,p用来存储瓶和液体一起的重量
Dim MyRow, MyColumn As Integer '用来存储温度所对应行列整型变量
Dim add As String '用来存储不存在瓶号所对应的单元格地址
MyPth = ThisWorkbook.Path & "比重瓶校正_修正版.xls" '把数据源工作簿路径赋给MyPth
Set Wb = GetObject(MyPth) '把返回路径上的文件引用且赋值给Wb
Set Sht = ThisWorkbook.Worksheets("比重") '将工作表比重赋给变量
z=Int(Sht.Cells(2, "C").Value): x = Val(Sht.Cells(2, "C").Value) - z: y = Val(Format(x, "0.0")) '得到温度整数和小数部分
k = Sht.Cells(Rows.Count, 2).End(xlUp).Row '得到表格最后一行数
If Sht.Cells(2, "C") = "" Or z + y < 5 Or z + y > 35 Then
MsgBox "请在单元格C2内输入你测量时的温度," & vbCrLf & "温度必须在5~35°之间且保留到一位小数"
Exit Sub
End If
For i=2 To k
a=Sht.Cells(i, "B").Value
For j=1 To Wb.Worksheets.Count
b=Val(Wb.Worksheets(j).Name)
If b=a Then
c=Wb.Worksheets(j).Range("B2").Value
Sht.Cells(i, "E").Value = c
GoTo abc
End If
If j = Wb.Worksheets.Count And a <> b Then
add = Sht.Cells(i, "B").Address(0, 0)
Sht.Cells(i, "B").Font.Color = RGB(255, 0, 0)
MsgBox "对不起,不存在单元格" & add & "内的瓶号,请检查是否输错!"
For t = 2 To k
Sht.Range("E2:E" & t) = "": Sht.Range("H2:H" & t) = ""
Next t
Exit Sub
End If
Next j
abc:
For n = 43 To 73
If Val(Wb.Worksheets(j).Cells(n, "A").Value) = z Then
MyRow = n
For m = 2 To 11
If Val(Wb.Worksheets(j).Cells(42, m).Value) = y Then
MyColumn = m
p = Wb.Worksheets(j).Cells(MyRow, MyColumn).Value
Sht.Cells(i, "H").Value = p
GoTo 111
End If
Next m
End If
Next n111:
Next i
Wb.Close'关闭并保存
Set Wb = Nothing '释放内存
Application.ScreenUpdating = True '打开屏幕刷新
Application.DisplayAlerts = True '打开提示信息
End Sub
在这里需要强调的是,需要处理的Excel电子文档和已经备好的比重瓶修正值表应该放置在同一个文件夹下,而且其中加入了两个警告提示,自动查询中,如果发现比重瓶是不存在(或是不小心输错了),会有报错提醒,还会颜色加红提示,另外就是输入的实验温度是在5~35℃。
本文通过实践中发现问题,在发现问题中寻找到简单便捷的方法。介绍了Excel VBA在比重瓶法测量岩样比重数据处理中的应用,实践证明Excel VBA在比重瓶法测量岩样比重数据处理中的应用极大地提高了数据处理的效率,减少了人为的误差。通过深入研究VBA对Excel的操作和功能,可以将这些方法应用于其它需要大量数据处理的领域,将大大加快数据处理的速度,减少错误的发生,提高工作的效率。VBA具有简单易学、句法简单的特点,而且不需要额外安装VB的开发环境,而且,使用VBA可以将多个Excel文档结合进行提取数据,既方便又准确,提高实验处理数据效率。因此无论在实际工程领域,还是日常工作的数据处理方面,都有非常广阔的应用前景。
[1] 高维全,陈丽华,杜彬彬. 比重瓶法测定玄武岩纤维的密度[J].中国纤检, 2010(7):52-53.
[2] 倪成锦. 比重瓶法测物质密度[J]. 鞍山师专学报,1991(3):51-52.
[3] 赵真玉. Excel中VBA开发技术的探讨[J].胜利油田职工大学学报, 2007(4).
[4] 常广炎,杨彬. 基于Excel VBA的数据处理软件开发[J].电脑知识与技术, 2014,10(22).
[5] 王汉雄,乔景顺. Excel VBA在测量数据处理中的应用[J]. 测绘科学,2008,33(2).
[6] 沐士光. Excel中的VBA应用探讨[J]. 王溪师范高等专科学校学报,2000(3):80-83.
彭强(1989~),男,硕士,主要从事岩土工程研究工作。
TU
B
[定稿日期]2015-06-17