美文网首页程序员
VBA在Excel处理中的应用

VBA在Excel处理中的应用

作者: Jelif | 来源:发表于2018-05-20 21:12 被阅读100次

    VBA是一种专门用于处理Office文档的编程语言,尤其擅长做重复性的工作,本文专门介绍怎么把VBA用到Excel处理中。Word和PowerPoint也支持VBA,但是一方面它们的文档结构比较复杂(Excel就是单纯的表格),另一方面它们的编辑过程通常是渐进的(Excel有可能是程序生成的),创造性的东西多,套路化的东西少,所以相比于它们,Excel更适合于使用VBA。

    关于VBA的入门介绍,Getting Started with VBA in Office 这篇文章已经写得很好了,有几点值得提一下:1. VBA脱胎于VB,所以编程体验上和VB很像;2. 执行VBA的时候,运行时环境已经由Office准备好了,VBA编程就是通过与一些Office相关对象的交互来达成目标。

    下面通过一个小例子来展示一下怎么用VBA来处理Excel:

    有这样一个Excel工作簿,它由三个工作表(Sheet1、Sheet2、Sheet3)组成,它的Sheet2和Sheet3都是空白。Sheet1中的数据有三列,x这一列是数字1-99,除去5,y这一列是2-198的等差数列,公差为2,除去4和8,坐标这一列只有表头。要求将x和y组合成坐标的形式放到坐标这一列中,如果有为空的,视为0。

    原始数据:

    x y 坐标
    1 2
    2
    3 6
    4
    10
    6 12
    …… ……
    99 198

    生成数据所用的代码:

    Sub prepareData()
        Cells(1, 1).Value = "x"
        Cells(1, 2).Value = "y"
        Cells(1, 3).Value = "坐标"
        For i = 2 To 100
            num = i - 1
            If num <> 5 Then
                Cells(i, 1).Value = num
            End If
            If num <> 4 / 2 And num <> 8 / 2 Then
                Cells(i, 2).Value = num * 2
            End If
        Next
    End Sub
    

    值得注意的有三点:1. Cells就是我们和Excel文档之间交互的接口,可以将它看成是一个包含有所有单元格的二维数组;2. 单元格有许多属性,需要用.value读取或设置它的内容;3. Sub表示这是一个子程序,其实也就是一个宏,Office里宏的本质也就是一个子程序。

    提示:要进入VBA环境,首先需要设置一下Excel,让“开发工具”选项卡显示出来,之后点击这个选项卡下的“Visual Basic”图标,此时就会弹出一个代码编辑窗口,写好了子程序,光标放在子程序内,按一下F5就会执行了。

    根据已有数据生成坐标所用的代码:

    Sub generateCoordinates()
        For i = 2 To 100
            x = Cells(i, 1).Value
            y = Cells(i, 2).Value
            If x = "" Then
                x = "0"
            End If
            If y = "" Then
                y = "0"
            End If
            Cells(i, 3).Value = "'(" & x & "," & y & ")"
        Next i
    End Sub
    

    值得注意的是倒数第三行,最后拼装坐标时,左括号左边有一个单引号,因为我发现没有单引号时,Excel会把(50,100)坐标和以后的坐标都解析为数字,推测和Excel内部的数据表示方式有关。

    本文介绍VBA,但并不推崇VBA,原因有两点:

    1. 无论是编程环境还是语言模型,VBA比其他语言都差太多了,开发效率很低。(同其他语言相比,使用VBA唯一的好处是——背靠大树好乘凉,因为有Office的宿主环境,所以在数据的使用上会方便些。比如数据本身是存在Excel表中的,那么使用VBA,直接用Cells方式拿数据,多方便。如果不这样,需要用别的程序读取Excel文件,经过层层转化才能看到数据,要生成Excel,又得额外费功夫,看看对不对还得用Excel打开看看,多累。)

    2. 相比于学VBA,充分掌握图形界面的功能收益更大。(图形界面符合人的认知,学习成本低,像VBA,可能花很长时间才能找到解决一个问题的方案,而VBA的使用通常是一次性的,这样的代价就太大了。)

    相关文章

      网友评论

        本文标题:VBA在Excel处理中的应用

        本文链接:https://www.haomeiwen.com/subject/hcpzdftx.html