彭 強, 何 鵬, 潘薈霖, 李鵬成
(四川大學水利水電學院巖土工程系, 四川成都 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 比重瓶修正
續(xù)表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)進行計算。
完成表格,最后就能求得每組的巖樣的比重。
用比重瓶法測比重實驗者應該都知道在測量比重的過程中需要記錄瓶號、溫度、瓶和干土重、瓶和液體和土總重,但為了方便起見,我們已經把不同溫度下對應的瓶重,瓶液總重做在了一個電子表格下了,我們稱這個為比重瓶修正值表。如果做的實驗組數很少,也就是說的用的比重瓶很少,查表的話也是很方便的,但是如果做的實驗組數很多,這樣需要去查表就很不方便了,很費時間,而且容易出錯,但是如果觀察比重瓶修正表,就會發(fā)現,格式是一模一樣的。所以筆者想過用程序自動查表,這樣就可以提供很大的方便,做到了既準卻又方便。通過研究發(fā)現,在電子表格中有宏這個功能,而宏正是在可以實現自動化的功能, 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自動查詢表格得到所需要的數據
通過觀察可以發(fā)現,不同溫度下,瓶重是不變的,所以我們只要取出不同溫度下的瓶液總重就行了,但是很明顯可以發(fā)現,溫度是有整數部分和小數部分組成,而我們所制作的修正值表行所對應是的溫度的整數部分,列所對應是的小數部分,而行列的交點也就是對應的單元格,就是我們所要查的溫度對應的瓶液總重。所以我們在制作每個比重瓶修正值的工作表時最一定要做到不同溫度的整數部分和小數部分所對應的行號和列號一定要相同,以便進行程序自動化。
擁有一定的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用來循環(huán)的整型變量,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電子文檔和已經備好的比重瓶修正值表應該放置在同一個文件夾下,而且其中加入了兩個警告提示,自動查詢中,如果發(fā)現比重瓶是不存在(或是不小心輸錯了),會有報錯提醒,還會顏色加紅提示,另外就是輸入的實驗溫度是在5~35℃。
本文通過實踐中發(fā)現問題,在發(fā)現問題中尋找到簡單便捷的方法。介紹了Excel VBA在比重瓶法測量巖樣比重數據處理中的應用,實踐證明Excel VBA在比重瓶法測量巖樣比重數據處理中的應用極大地提高了數據處理的效率,減少了人為的誤差。通過深入研究VBA對Excel的操作和功能,可以將這些方法應用于其它需要大量數據處理的領域,將大大加快數據處理的速度,減少錯誤的發(fā)生,提高工作的效率。VBA具有簡單易學、句法簡單的特點,而且不需要額外安裝VB的開發(fā)環(huán)境,而且,使用VBA可以將多個Excel文檔結合進行提取數據,既方便又準確,提高實驗處理數據效率。因此無論在實際工程領域,還是日常工作的數據處理方面,都有非常廣闊的應用前景。
[1] 高維全,陳麗華,杜彬彬. 比重瓶法測定玄武巖纖維的密度[J].中國纖檢, 2010(7):52-53.
[2] 倪成錦. 比重瓶法測物質密度[J]. 鞍山師專學報,1991(3):51-52.
[3] 趙真玉. Excel中VBA開發(fā)技術的探討[J].勝利油田職工大學學報, 2007(4).
[4] 常廣炎,楊彬. 基于Excel VBA的數據處理軟件開發(fā)[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