999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談VBA在工作中的應用

2014-03-20 07:38:40郝光前周立新
山東國土資源 2014年8期
關鍵詞:程序

郝光前,周立新

(山東省物化探勘查院,山東 濟南 250013)

Visual Basic for Application(VBA),可以認為VBA是非常流行的應用程序開發語言VISUAL BASIC(簡稱VB)的子集[1]。它與VB的主要區別在于VB具有自己的開發環境,而VBA必須寄生于已有的應用程序中,如Office家族中的組件等,在Office 2000及其更高版本中,VBA已嵌入其所有應用程序,包括Word,Excel,PowerPoint,Access,Outlook以及Project等。并在各自應用程序中,新增了Visual Basic編輯器。這樣,用戶無論是在Excel中,還是在Word中以至是在Access中都可以使用VBA編寫程序代碼,達到想要的結果,該文就以Excel中的VBA語言應用為主題[2],淺談一下VBA在實際工作中的應用。

1 幾個應用實例

1.1 物探數據整理

在物探數據處理過程中,由于不同軟件對數據的格式要求不同,有時需要將以矩陣格式存貯的數據轉換為以X,Y,Z三列形式的存貯格式,如表1(a)部分和(b)部分所示。手工轉換起來比較繁瑣,尤其是數據量比較大的時候,但是通過VBA程序,幾行代碼就可以解決問題。

k=1

For i = 2 To 15

For j = 2 To 9

Sheet2.Cells(k, 1) = Sheet1.Cells(i, 1)

Sheet2.Cells(k, 2) = Sheet1.Cells(1, j)

Sheet2.Cells(k, 3) = Sheet1.Cells(i, j)

k=k+1

Next j

Next i

表1 同一數據的不同存貯格式

還有一種情況是假設在一個幾千行幾百列的矩陣數據集中存在有“空區”,所謂“空區”就是野外工作無法進行數據采集的地方,比如:河流內部、村莊等,這些“空區”所填寫的并非數字,而是漢字的名稱或空白,這種情況在程序處理中是不允許的,必須把“空區”填上空區特征值,這時以手工方式來查找,既費時費力,還容易出錯,若通過VBA程序來處理,一兩分種就可以解決。

1.2 復雜數據的修改與排序

有些軟件在應用的過程中會產生一些Excel格式的數據報表,但這些報表僅僅是數據結果的一個集合,有些地方并不符合人們使用的習慣,比如在城鎮地籍測量中的CASS軟件,它廣泛應用于地形圖、地籍成圖、工程測量3大領域[3],使用CASS軟件生成的界址點成果表(圖1),幾千個宗地都是以Sheet1,Sheet2……形式表示,既不直觀也無次序,若把宗地號的關鍵幾位作為Sheet的表名,然后再按順序進行排序,大大提高了報表的可讀性,通過手工方式來修改將會耗費大量的時間,且出錯率高,但通過編制VBA程序極短時間內就可整理出圖2所示的結果。

圖1 整理前界址點成果表

圖2 整理后界址點成果表

1.3 大量數據的分析與處理

在第二次土地調查中,需要對穿過每一個村的國有土地編制獨立的權屬代碼,一般的大型公路、河流、鐵路,部分地區還有油田、油井等都是國有土地,這類用地往往會穿過許多村莊,就一個中小市(縣)來說總圖斑數得上萬條,手工從其中挑出其國有單位再單獨編碼很不現實,而通過編制VBA程序,在十幾分鐘內即可完成國有單位權屬編碼,大大提高了工作效率。圖3最右側一欄即為單獨編碼后某某縣國有單位權屬代碼。

圖3 某某縣國有單位權屬代碼

2 VBA在潛力評價中的應用

2.1 問題的提出

全國礦產資源潛力評價,是我國礦產資源方面的一次重要的國情調查[4],該工程涉及面廣,要求對以往的資料進行全面的研究和分析,通過物、化、遙和自然重砂等手段為各種礦產資源的儲量預測提供翔實可告的依據,而現存的一些20世紀90年代以前的資料只有紙介質,沒有“電子版”,如圖4,對非數字化的磁測資料進行數字化、矢量化,形成電子版圖件,通過MapGIS矢量化后進行轉換、用數字化儀進行數字化等[5,6],而MapGIS矢量化后進行轉換并不能直接應用,還需要用程序進行一系列的計算。

圖4 航空磁測平面剖面圖

2.2 問題解決思路

從測線上的拐點(如A點)向基線做垂線,其垂足坐標(x,y)和垂線長度h,即B(x,y,h)便是要從平剖圖中取得的數據,如圖5所示。要獲取B點的數據需要以下幾個步驟:

圖5 平剖圖中數據的提取

(1)在MapGIS中用不同的顏色對基線和測線進行矢量化,并且兩兩配對的基線和測線賦以相同的屬性值,將來的數據處理時即可以通過顏色區分出基線和測線又可以通過屬性找到相對應的基線或測線,為了保證數據的提取精度在矢量化測線時宜多加一些點。

(2)通過VBA程序無法對MapGIS格式文件進行處理,必須把矢量化的線文件所有拐點坐標全部導出該文件轉到Excel中進行處理。通過MapGIS的文件轉換功能可以將線劃的拐點坐標轉城WAL格式(文本格式),再在Excel中轉存成xls文件,屬性值可以直接導成xls文件。

(3)建立求取B(x,y,h)點數據的數學模型,再根據第(2)步轉換后的2個.xls文件進行VBA程序代碼編寫。

2.3 數學模型建立及問題解決方案

2.3.1 數據模型的建立

由于所求的數據需要由測線上的拐點向基線做垂線,而根據測線和基線的相對位置大體上有3種情況:基線水平(圖6)、基線垂直(圖7)、基線傾斜(圖8),其中基線傾斜時在具體算法實現上傾角大于45°和小于45°還有所區別,大同小異,該文只以一種常見的情況加以說明。

圖6 基水平時

當基線水平時,B點的值很容易求得:

x=x0;y=y1;h=y0-y1

圖7 基線垂直

當基線垂直時,B點的值也很容易求得:

x=x1;y=y0;h=x0-x1

圖8 基線傾斜

當基線傾斜時,為求得B點的值需要進行幾步三角函數計算:已知坐標的點為J1(x1,y1),J2(x2,y2),C(x0,y0),∠α=∠β;由圖8可知,通過J1,J2可求得α的4個三解函數值sinα,cosα,tanα,ctanα。進而給出所求點B的x,y,h三值的算法:

L0=(y1-y0)*ctanα

x3=x1-L0

h=(x3-x0) sinβ

L1=(x3-x0)cosβ*cosβ

L2=(x3-x0)cosβ*sinβ

x=x3-L1

y=y3-L2

即可求得B點的值(x,y,h)。

通過以上描述已經建立了剖面圖取數的數學模型。需要說明的是,有些情況基線并不是一條直線,需要分段計算三角函數,如圖9,∠α≠∠β,所以要以折點C為分界點分別求取三角函數。

圖9 基線分段情況

2.3.2 問題的解決方案

通過以上討論,就可以對經矢量化以后轉換到Excel的數據進行整理,先根據基線與測線的顏色特征將基線坐標和測線坐標拆分到2個Sheet表中,在基線坐標的SHEET表中計算出某條基線或某條基線不同分段的三角函數,然后再根據屬性值來確定某條基線所對應的測線,把三角函數值及端點坐標值添加到測線坐標值的后面,最后通過數學模型中的算法用VBA程序計算所求的數據。

2.4 VBA程序編寫

由于把矢量數據轉換到Excel中后,包括數據格式的整理、錯誤檢查、基線測線的分離、求取三角函數、形成最終結果整個過程都是用程序實現的,篇幅過長,下面僅給出求取三解函數和B點數據的關鍵代碼,僅供參考:

三角函數計算:

sinα=(Sheet2.Cells(i, 2) - Sheet2.Cells(i + 1, 2)) / Sqr((Sheet2.Cells(i, 2) - Sheet2.Cells(i + 1, 2)) * (Sheet2.Cells(i, 2) - Sheet2.Cells(i + 1, 2)) + (Sheet2.Cells(i, 1) - Sheet2.Cells(i + 1, 1)) * (Sheet2.Cells(i, 1) - Sheet2.Cells(i + 1, 1)))

cosα= (Sheet2.Cells(i, 1) - Sheet2.Cells(i + 1, 1)) / Sqr((Sheet2.Cells(i, 2) - Sheet2.Cells(i + 1, 2)) * (Sheet2.Cells(i, 2) - Sheet2.Cells(i + 1, 2)) + (Sheet2.Cells(i, 1) - Sheet2.Cells(i + 1, 1)) * (Sheet2.Cells(i, 1) - Sheet2.Cells(i + 1, 1)))

求取B點數據關鍵代碼:

If direct = "xia" Then

If Sheet1.Cells(i, 4) >= Sheet2.Cells(j, 2) Then

sinα= Sheet2.Cells(j, 4)

cosα= Sheet2.Cells(j, 5)

xvalue=Sheet2.Cells(j,1)

yvalue=Sheet2.Cells(j,2)

flag=1

Exit For

End If

If Sheet1.Cells(i, 4) <=Sheet2.Cells(j,2) And Sheet1.Cells(i, 4) >= Sheet2.Cells(j + 1, 2) And Sheet2.Cells(j, 3) = Sheet2.Cells(j + 1, 3) Then

sinα=Sheet2.Cells(j + 1, 4)

cosα=Sheet2.Cells(j+1,5)

xvalue=Sheet2.Cells(j+1,1)

yvalue=Sheet2.Cells(j+1,2)

'處理水平線

If sinα=0 Then

flag=1

Exit For

End If

sinα=Abs(sinα)

cosα=Abs(cosα)

x0=Sheet1.Cells(i,3)

y=Sheet1.Cells(i,4)

tx=-(yvalue-y)*cosα/sinα

x=xvalue-tx

h=(x0-x)*sinα

mx=(x0-x)*cosα*cosα+x

my=y-(x0-x)*cosα*sinα

If my

If Sheet2.Cells(j+2,3)<>Sheet2.Cells(j+1,3)

Then

sinα=Sheet2.Cells(j+1,4)

cosα=Sheet2.Cells(j+1,5)

xvalue=Sheet2.Cells(j+1,1)

yvalue=Sheet2.Cells(j+1,2)

Else

sinα=Sheet2.Cells(j+2,4)

cosα=Sheet2.Cells(j+2,5)

xvalue=Sheet2.Cells(j+2,1)

yvalue=Sheet2.Cells(j+2,2)

End If

If sinα=0 Then

flag=1

Exit For

End If

sinα=Abs(sinα)

cosα=Abs(cosα)

x0=Sheet1.Cells(i,3)

y=Sheet1.Cells(i,4)

tx=-(yvalue-y)*cosα/sinα

x=xvalue-tx

h=(x0-x)*sinα

mx=(x0-x)*cosα*cosα+x

my=y-(x0-x)*cosα*sinα

End If

Exit For

End If

2.5 處理結果

剖面圖經過矢量化和VBA程序處理后的結果如表2所示。

表2 VBA程序整理后的數據結果

3 結論

該文針對數據處理中所遇到的重復性強、規律性強、數據量大的情況,根據工作的實際需求編寫了各種方式的程序算法,開展了一種新的嘗試,提供了一種新的思維方式。通過VBA集成系統編程,將一系列繁雜的工作簡化為電腦自動處理,計算過程只需一個按鍵就能輕松搞定,提高了工作效率,節約了人力成本。

參考文獻:

[1] 百度百科.VBA[EB/OL].[2010-11-27].http://baike.baidu.com/view/88461.htm.

[2] 孫懷文,齊孔讓,孟煥梅.運用EXCEL及VBA語言快速智能地處理土工試驗數據[J].山東國土資源,2010,26(4):29-31.

[3] 高潔,李云嶺,劉曉慶.CASS格式地籍數據入庫前的編輯與處理研究[J].山東國土資源,2011,27(4):56-59.

[4] 王瑞江.全國礦產資源潛力評價計劃項目2009-2010年總體實施方案[EB/OL].[2008-10-30].http://www.docin.com/p-24256628.html.

[5] 范正國,黃旭釗,熊盛青,等.磁測資料應用技術要求[M].北京:地質出版社,2010.

[6] 張明華,喬計花,劉寬厚,等.重力資料解釋應用技術要求[M].北京:地質出版社,2010.

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 欧美午夜在线播放| 全裸无码专区| AV在线天堂进入| 极品国产一区二区三区| 国产福利拍拍拍| 亚洲欧美另类中文字幕| 伊人国产无码高清视频| 国产欧美精品一区二区| 91香蕉国产亚洲一二三区 | 波多野结衣在线se| 无码国产伊人| 黄色免费在线网址| 久草视频一区| 波多野结衣第一页| 91区国产福利在线观看午夜| 香蕉精品在线| 日韩美毛片| 久草视频精品| 亚洲VA中文字幕| 色呦呦手机在线精品| 亚洲国产成人久久精品软件| 美女扒开下面流白浆在线试听| 日韩无码视频专区| 亚洲第一天堂无码专区| 中文天堂在线视频| 久久免费成人| 国外欧美一区另类中文字幕| P尤物久久99国产综合精品| 亚洲不卡网| 国产国产人成免费视频77777 | 国产精品成人AⅤ在线一二三四| 日韩无码黄色| 国产91特黄特色A级毛片| 国产小视频a在线观看| 青青操国产| 亚洲综合一区国产精品| 伊人久久青草青青综合| 一级不卡毛片| 播五月综合| 高清不卡毛片| 亚洲国产欧美自拍| 免费精品一区二区h| 欧美福利在线播放| 日本午夜影院| 波多野结衣一级毛片| 四虎亚洲精品| 国产精品一区二区无码免费看片| 激情亚洲天堂| 性做久久久久久久免费看| 91精品aⅴ无码中文字字幕蜜桃| 91精品国产无线乱码在线| 欧美视频二区| 无码网站免费观看| 日韩无码真实干出血视频| 最新国产高清在线| 影音先锋丝袜制服| 亚洲人成色77777在线观看| 91视频青青草| 伊人中文网| 手机看片1024久久精品你懂的| 国产成人精品男人的天堂下载| 欧美国产菊爆免费观看| 国产日韩欧美在线视频免费观看| 久操线在视频在线观看| 另类综合视频| 一级香蕉视频在线观看| 亚洲成A人V欧美综合天堂| 国产91成人| 91麻豆精品视频| 国产精品va免费视频| 青青草一区二区免费精品| 全部免费毛片免费播放| 成人午夜天| 亚洲日韩AV无码精品| 成人免费一区二区三区| 在线视频亚洲色图| 视频一区视频二区中文精品| 久热精品免费| 国产成人精品一区二区秒拍1o| 91人妻日韩人妻无码专区精品| hezyo加勒比一区二区三区| 久久久久久久久亚洲精品|