吳云霞+陳麗芳+黃新平
摘 ?要:隨著信息化的不斷發(fā)展,計(jì)算機(jī)早已成為日常辦公的工具。其中Microsoft Office Excel有著強(qiáng)大的數(shù)據(jù)處理、統(tǒng)計(jì)分析和制圖等功能,可方便繪出各種專業(yè)圖表,實(shí)現(xiàn)圖、文、表的完美結(jié)合。VBA編程可將各種操作集成起來(lái),使復(fù)雜的操作簡(jiǎn)單化、批量化,使處理速度大大地提高,可以開(kāi)發(fā)出非常具有實(shí)用價(jià)值的應(yīng)用程序。文章旨在探索在Excel中應(yīng)用VB編輯器編寫大斷面測(cè)量計(jì)算程序,完成大斷面測(cè)量的分析計(jì)算自動(dòng)繪制大斷面圖的任務(wù)。
關(guān)鍵詞:VBA;大斷面測(cè)量;計(jì)算
中圖分類號(hào):TP391.72;U172 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A ? ? ?文章編號(hào):1006-8937(2016)03-0051-02
1 ?VBA簡(jiǎn)介
VBA(Visual Basic for Applications)基于Visual Basic for Windows發(fā)展而來(lái),可用于開(kāi)發(fā)Windows環(huán)境下的各類應(yīng)用程序,是一種可視化的、面向?qū)ο蟮摹⒉捎檬录?qū)動(dòng)方式的結(jié)構(gòu)化高級(jí)程序設(shè)計(jì)語(yǔ)言。它具有高效率、簡(jiǎn)單易學(xué)及功能強(qiáng)大的特點(diǎn)。用戶可以輕易把日常工作利用VBA程序代碼,高效、快速地編制出Windows環(huán)境下功能強(qiáng)大、圖形界面豐富的應(yīng)用軟件系統(tǒng),使重復(fù)任務(wù)自動(dòng)化,提高工作效率。
?在Excel中,由于VBA可以直接應(yīng)用Office套裝軟件的各項(xiàng)強(qiáng)大功能,所以用Excel作為開(kāi)發(fā)平臺(tái),對(duì)于程序設(shè)計(jì)人員的程序設(shè)計(jì)和開(kāi)發(fā)更加方便快捷,只需要直接使用,減少了很多編程工作。
2 ?大斷面測(cè)量
? 傳統(tǒng)大斷面測(cè)量工作,首先是進(jìn)行岸上部分的水準(zhǔn)測(cè)量和水下部分的水深測(cè)量。岸上部分采用四等水準(zhǔn)引測(cè),實(shí)測(cè)前應(yīng)清除雜草和障礙物,在地形的轉(zhuǎn)折點(diǎn)打入有編號(hào)的木樁作為高程的測(cè)量點(diǎn)。水下部分采用有效的測(cè)深方法測(cè)得水體水面到河床面得水深。
2.1 ?大斷面測(cè)量計(jì)算
以某站某年汛前大斷面測(cè)量計(jì)算為例,采用VBA編程在Excel平臺(tái)中實(shí)現(xiàn)岸上部分的水準(zhǔn)測(cè)量計(jì)算工作。相關(guān)情況見(jiàn)表1。
利用ExcelVBA編程實(shí)現(xiàn)計(jì)算工作,計(jì)算的部分代碼如下:
………
aa = [d65536].End(xlUp).Row
For i = 5 + 2 To aa Step 2 '有間視平均高差
a1 = Cells(i, 6)
b1 = Cells(i + 1, 6)
If Cells(i, 6) <> "" And Cells(i + 1, 6) <> 0 Then
If Cells(i, 6) - Cells(i + 1, 6) > 0.05 Then
Cells(i, 7) = (a1 + (b1 + 0.1)) / 2
End If
If Cells(i, 6) - Cells(i + 1, 6) < 0.05 Then
Cells(i, 7) = (a1 + (b1 - 0.1)) / 2
End If
If Cells(i, 6) - Cells(i + 1, 6) < 0.02 And Cells(i, 6) - Cells(i +1, 6) > -0.02 Then
Cells(i, 7) = (a1 + b1) / 2
End If
End If
If Cells(i, 6) <> "" And Cells(i + 1, 6) = 0 Then '無(wú)間視平均高差的計(jì)算
Cells(i, 7) = Cells(i, 6)
End If
Next i
…….
......
For i = 5 + 2 To aa Step 2 '有間視平均高差
a1 = Cells(i, 6)
b1 = Cells(i + 1, 6)
If Cells(i, 6) <> "" And Cells(i + 1, 6) <> 0 Then
If Cells(i, 6) - Cells(i + 1, 6) > 0.05 Then
Cells(i, 7) = (a1 + (b1 + 0.1)) / 2
End If
If Cells(i, 6) - Cells(i + 1, 6) < 0.05 Then
Cells(i, 7) = (a1 + (b1 - 0.1)) / 2
End If
If Cells(i, 6) - Cells(i + 1, 6) < 0.02 And Cells(i, 6) - Cells(i + 1, 6) > -0.02 Then
Cells(i, 7) = (a1 + b1) / 2
End If
End If
If Cells(i, 6) <> "" And Cells(i + 1, 6) = 0 Then '
無(wú)間視平均高差的計(jì)算
Cells(i, 7) = Cells(i, 6)
End If
Next i
For j = 5 To aa - 2 Step 2
If Cells(j + 2, 5) <> "" Then ?'高程計(jì)算
Cells(j + 2, 10) = Cells(j, 10) '有間視
Else
Cells(j + 2, 9) = Cells(j, 10) + Cells(j + 2, 7) - Cells(j + 2, 8)
Cells(j + 2, 10) = Cells(j + 2, 9)
End If
If Cells(j + 2, 5) <> "" Then Cells(j + 2, 9) = Cells(j + 2, 10) + Cells(j + 2, 7) - Cells(j + 2, 8)
Next j
......
2.2 ?大斷面測(cè)量分析繪圖
?在每年的汛前大斷面測(cè)量中,利用測(cè)量的數(shù)據(jù)進(jìn)行繁瑣的人工繪制大斷面圖,為了更好的提高工作效率,使重復(fù)工作任務(wù)自動(dòng)化,利用VBA的制圖功能自動(dòng)繪制大斷面圖。
?通過(guò)上面的對(duì)大斷面測(cè)量計(jì)算,利用ExcelVBA編程實(shí)現(xiàn)大斷面的繪圖工作。大斷面繪制示意圖,如圖1所示。
在繪制大斷面圖時(shí),程序通過(guò)提示對(duì)話框,人工給出大斷面的左右岸的標(biāo)志,如圖2所示。
VBA編程實(shí)現(xiàn)大斷面的繪圖工作代碼如下:
Sheets("Sheet2").Select()
bb = [b65536].End(xlUp).Row
a = InputBox("請(qǐng)輸入大斷面成果開(kāi)始岸別:1為右岸,2為左岸")
If a = 1 Then Cells(1, 1) = "右岸" : Cells(bb, 1) = "左岸"
If a = 2 Then Cells(1, 1) = "左岸" : Cells(bb, 1) = "右岸"
Cells(2, 1) = "1"
For i = 3 To bb - 1
Cells(i, 1) = Cells(i - 1, 1) + 1
Next i
......
Sheets("Sheet1").Select()
Selection.AutoFilter()
Charts.Add after:=Worksheets("Sheet1") ?'
在"Sheet1"工作表之后添加新圖表工作表。
ActiveChart.ChartType = xlXYScatterSmooth '
圖表類型為XY平滑線散點(diǎn)圖。
…….
ActiveChart.SetSourceData(Source:=Sheets("sheet2").Range("B:C"), PlotBy:=xlColumns) '
圖表數(shù)據(jù)來(lái)源于"結(jié)點(diǎn)坐標(biāo)"工作表的A1至B69單元格,且按列繪圖。
ActiveChart.Location Where:=xlLocationAsNewSheet
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "大斷面圖" '圖表標(biāo)題"節(jié)點(diǎn)坐標(biāo)"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "起點(diǎn)距(m)" 'x軸標(biāo)題"x"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "河底高程(m)" ?'y軸標(biāo)題"y"
End With
……
上述代碼中有關(guān)變量已在相應(yīng)地方作定義,并賦值。鑒于篇幅,不作詳細(xì)介紹。
利用VBA編程實(shí)現(xiàn)上述分析計(jì)算與繪制大斷面圖。在實(shí)際計(jì)算工作過(guò)程中省去了人為的重復(fù)計(jì)算,有效避免了人工計(jì)算錯(cuò)誤,極大地提高了工作效率。
3 ?結(jié) ?語(yǔ)
?大斷面測(cè)量自動(dòng)的分析計(jì)算繪圖程序已在實(shí)際工作過(guò)程中得到應(yīng)用,經(jīng)檢驗(yàn),計(jì)算成果合理,效率高,成果圖表繪制較規(guī)范,是一款較為實(shí)用的軟件。在許多水文分析計(jì)算的工作中,運(yùn)用ExcelVBA編程,可以解決很多需要重復(fù)、繁雜的統(tǒng)計(jì)計(jì)算工作,并降低錯(cuò)誤發(fā)生率,為水文工作者減輕負(fù)擔(dān),提高工作效率。
參考文獻(xiàn):
[1] 郝安華.Excel VBA在GPS坐標(biāo)轉(zhuǎn)換計(jì)算中的應(yīng)用[J].遼寧科技學(xué)院學(xué) ? 報(bào),2011,(34).