VBA应用之二——石油地质研究数据整理专用.docVIP

VBA应用之二——石油地质研究数据整理专用.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VBA应用之二——石油地质研究数据整理专用.doc

油田开发的过程中有很多的数据,在应用不同的软件工具的时候需要整理成不同的格式!各个油田的数据格式不同,各个软件工具的输入要求不同,这也就是至今为什么没有一个能应用很广泛的进行数据格式转换的工具的原因!但是很多技巧我们自己却能很快掌握,让工作效率提高N倍! 例子: 注释:我编写这段代码只用了十几分钟,可是写这篇技术文章却花了半天,哈哈!为人民服务了! 这里有某油田的数据一份,数据保存在一个Excel表中,打开Excel后浏览数据,Excel中有三个Sheet表,分别是Sheet1、Sheet2和Sheet3,其中数据存放在Sheet1中。数据主要是每口井的单砂体分层情况以及单砂体的物性数据。 数据如下图所示: 数据一共9列,从A列到I列,分别是井名、顶深、底深、砂厚、有效厚度、孔隙度、渗透率、含油饱和度、解释结论; 数据共8605行,一共有1百多口井,具体井数没有计算(如果想知道数数也行,不过太浪费时间,自己能计算出来,,稍候便知)。 最终想得到每口井一个的文本文件,而且是用空格分隔的,要求第二列不仅是顶深,还要加上底深,也就是把第三列的底深,插入到第二列中,使第二列形成顶深底延续的数据,而且底深对应的物性也要复制过来;同时,层和层之间的隔层段也要加进来!这么说太麻烦,看看最后形成的文件就知道了: 这就是最后形成的文件。 开始工作了,我们要在Excel中打开一个VB编辑器:Excel菜单栏==〉工具==〉宏==〉Visual Basic编辑器,界面如图: 在编辑器的菜单栏中选择“插入”==〉模块,界面变成如下情况: 这样我们就可以在界面的主编辑窗口开始编写我们的程序了。 首先我们统计有多少口井,同时确定,每口井的开始行号和结束行号: Sub macro1() 统计相同井名字的对应行号 从第几行到第几行是一口井 Dim i As Integer Dim j As Integer j = 1 ’把统计好的数字放在第一行开始 For i = 2 To 8605 ’确定循环从Sheet1的第2行到第8605行,也就是全部数据的范围 If Sheet1.Cells(i, 1) Sheet1.Cells(i + 1, 1) Then Sheet2.Cells(j, 2) = i ‘每口井结束的行号放到Sheet2中的第2列 j = j + 1 End If Next i End Sub 编写好后如图: 运行后得到Sheet2终得数据,能确定共115行,也就是共115口井 我们把每口井的开始行号也添加进取,很简单,就是上一口井的结束行号加上1就是下一口井的开始行号,第一口井的开始行号当然是2,因为在Sheet1里就是从第二行开始的,得到每口井的开始和结束的行号如下图: 然后我们要建立和井名字一样多的Sheet表,这样才能把每口井的数据从Sheet1里面复制出来,同样在编辑器里我们开始编写一个新的宏代码(代码是以Sub 宏名字()开始,以End Sub结束): Sub macro2() 添加空白的Sheet表 根据井数添加 Dim i As Integer For i = 3 To 117 ‘因为一共有115口井Sheet1和Sheet2已经占用,所以要添加到117 Sheets(i).Select Sheets.Add Sheets(i + 1).Select Sheets(i + 1).Move After:=Sheets(i) Next i End Sub 添加代码后编辑器应该如下: 继续在编辑器中填写代码: Sub macro3() 将每口井单独放到一个Sheet表里 Dim i As Integer Dim r As Integer Dim c As Integer Dim j As Integer j = 3 For i = 1 To 115 r = Sheet2.Cells(i, 1) c = Sheet2.Cells(i, 2) Sheet1.Select Sheet1.Activate Range(A r : I c).Select Selection.Copy Sheets(j).Select Sheets(j).Activate Range(A1).Select ActiveSheet.Paste Sheets(j).Name = Sheets(j).Cells(1, 1) j = j + 1 Next i End Sub 这段代码的意思就是将Sheet1中每口井的数据复制到相应的sheet表中,而且每个Sheet标的名字不再是SheetX,而是对应的井名字,如果学过V

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档