您的位置:首页 > 其它

Excel获取单元格批注

2016-03-29 18:35 218 查看
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()))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: