文章查询
 请输入查询关键字:
  
    
 
  本期导读>>
 

妙用“宏”解决数据搜索的实践与探索
浙江大学城市学院    郑章财

    一说到宏,人们就自然想到宏病毒。其实,宏与病毒是两回事。在Excel中,宏实际上是一段Visual Basic程序代码,是Microsoft开发的用来和用户进行交流的扩展程序接口。如果在Excel内置的函数中找不到所需要的函数,这时你可以用简单的VB语言来编写一些程序代码——宏,通过运行宏,你会发现,很多问题都可以巧妙地解决。本文所介绍的实例就是通过对宏的编程成功解决了学生奖学金发放中有关的大量数据的搜索。
    笔者一位在学院计划财务部工作的同事,最近为向获奖学生发放奖学金,需根据各系上报的获奖学生名单中学生的学号,到校学生库所在的Excel表中找到对应学生的银行帐号,通知银行按有关银行帐号发放奖学金。这一工作如果用手工完成,对于学院计划财务部来说,工作量非常大,而且很难避免差错。笔者考虑可利用计算机解决这个问题。笔者对工作薄中的两张表格Sheet1,Sheet2的内容及所要解决的具体问题(见图1、图2及其说明)进行了分析,为Sheet2表格编写了一段宏代码,解决了这一问题。                 


    笔者编写的这段宏程序(文件名为macro1)短小精悍,功能强大。程序运行后几秒钟,Sheet2表格中 “银行帐号”这一列的所有单元格均实现了自动填充,其高速、准确非人所能,充分体现了计算机处理数据的优越性。
  现将这段宏程序公布出来,以供共享或参考。
Sub macro1()
   Max2 = 7      'sheet2表格记录数,即获奖的学生人数,依实际可以更改
   Max1 = 13     'sheet1表格记录,即校库中学生记录数,依实际可以更改
   xh2 = "b"     'sheet2表格中“学号”字段所在的列标,依实际可以更改
   xh1 = "a"     'sheet1表格中“学号”字段所在的列标,依实际可以更改
   yh2 = "e"     'sheet2表格中“银行帐号”字段字段所在的列标,依实际可以更改
   yh1 = "d"     'sheet1表格中“银行帐号”字段字段所在的列标,依实际可以更改
      
   i = 1
   While i < Max2
       i = i + 1
       Sheet2.Activate
       Range(xh2 & i).Select
       x = ActiveCell.FormulaR1C1
       Sheet1.Activate
       Range(xh1 & 1).Select
       y = ActiveCell.FormulaR1C1
       j = 1
       While x <> y And j < Max1
           j = j + 1
           Range(xh1 & j).Select
           y = ActiveCell.FormulaR1C1
       Wend
       If x = y Then
          Range(yh1 & j).Select
          yy = ActiveCell.FormulaR1C1
          Sheet2.Activate
          Range(yh2 & i).Select
          ActiveCell.FormulaR1C1 = yy
        End If
    Wend
End Sub
    需要说明的是在运行该程序之前,先要根据实际情况给Max1、Max2、xh1、xh2、yh1、
yh2这6个变量赋初值(6个变量的意义见程序的说明部分)。
    当然,你还可以使程序进一步完善,通过添加程序代码或模块,使这个程序能够自动统计sheet1、sheet2表格中的人数,或者自动判断学号所处的列位置等。这样,就不用修改程序的初值了。
    最后,我想若能够让这个宏程序成为Excel中的内置函数,这样使用起来就更方便了。这还有待于我们去进一步研究。



你的评论   所有评论
昵称:
评论: