Excel获取单元格批注

来源:互联网 发布:nginx教程 编辑:程序博客网 时间:2024/04/29 16:55

 Microsoft Office中的Excel软件有着强大的数据统计分析功能,最近自己碰到一个问题,需要将一列单元格中的批注提取到另外的一列中去。如果数量比较少大可以通过“Ctrl+C”和“Ctrl+V”来实现,但是面对成百上千行数据的就出现麻烦了。自己就在网上搜索了一些关于此方面的资料,发现Excel有两个方面的应用非常实用:VBA和宏表函数,这里只是举出其中两个简单的例子,如有兴趣可以深究。

一、获取单元格批注

    VBA全称为:Visual Basic for Applications,是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。虽然这种语言较为古老,但在Microsoft Office软件风靡全球的情形下还是有很大的应用价值,特别是一些用户非常熟悉了Excel的操作界面之后就对它有着非常大的依赖性,通过Excel自带的VBA程序来对数据进行处理可以带来极大的方便。

    下面就讲讲如何通过VBA获取单元格的一个小例子,主要参考了http://club.excelhome.net/forum.php?mod=viewthread&tid=938019中5楼“xinhunter”发的帖子来实现的。

    如下图所示,A列中有多行带有批注的单元格,如何将A列中的单元格都提取到对应的E列中来呢?通过如下的几个步骤可以成功地获取单元格批注。

1、  打开VBA,新建模块,创建用户自定义函数,如下图所示:

2、  编写自定义函数GetComment()

    Function GetComment(myRange As Range) As String

        GetComment = myRange.Comment.Text

      End Function

    如下图所示:

 

 

3、  调用自定义函数GetComment()。在E1的编辑框中输入:=GetComent(A1),选定之后按“F9”,就会变成如下的情况:

 

 

  按“F9”调用GetComment()函数之后,成功获取批注如下:

 

 

4、  调用SUBSTITUTE()函数,去掉多余文本

从上图可以看出,E1单元格中已经成功地将A1中的批注获取到了,但是包含了当前编辑者的姓名,如上图中的“ZKH:”,可以通过调用如下函数去掉多于的用户名文本。如下图所示:

 

 

 

    5、拖拽填充柄,依次获取单元格批注  

    

 

二、获取某路径下文件名

    除了Excel自带的函数以及通过VBA自定义的函数之外,我们在Excel中有可能用到的一种函数叫做“宏表函数”,以下也通过一个具体的应用小例子来简单演示。

    在应用过程中,也许会碰到将一堆文件的名字加以统计起来的需求,如果文件数较多的时候是个麻烦的事情,Excel中自带的宏表函数可以很轻松地解决类似这样的问题,主要以下操作步骤:

1、  定义新名称

    通过“公式→定义新名称”,定义一个“myfile”的宏表函数,其中名称myfile调用了Excel中自带的“FILES()”的函数,如下所示:

2、  调用myfiles(),在C1输入“=myfile”按“F9

路径文件如下:

  运行效果如下:

3、  调整效果

    如上图所示,将“D:\新建文件夹\”路径下的4个文件名都获取到C1的单元格中,能否将文件名逐个地依次获取到单元格呢?答案是可以的,我们还可以对指定的文件类型加以获取:

调用INDEX()函数,如下:

  拖拽填充柄如下:

4、  加条件判断

如上图所示,下拉的单元格数超出了文件数的时候,容易出现错误乱码如“#REF!”,可通过IF条件函数加以判断如下:

5、  指定文件类型获取

如在myfiles名称中指定文件类型,所定义的宏表函数可只获取指定的文件名列表,如下指定.xls文件类型:

结果如下:

 2014-10-27,为了每次使用方便,通过代码创建以上名称以及调用:

//VBA,运行宏创建名称:

Sub myFile()
' 获取路径下所有文件名'
  ActiveWorkbook.Names.Add Name:="myfile", RefersToR1C1:= _
    "=FILES(""C:\Users\ZKH\Desktop\2014-10-20\*.*"")"
  ActiveWorkbook.Names("myfile").Comment = ""
End Sub

 

//调用

=IF(ROW()>COUNTA(myfile),"",INDEX(myfile,ROW()))

0 0
原创粉丝点击