晚上正在做“天马行空”的《统计研究》的作业,宿舍的同学跑过来了问了个问题。问题的内容大致如下,有一个 Excel 表格,如下图
图中的每个单元格里,以空格为连接符,包含了一个或多个公司的名称。我们的目的是把这些公司的名称提取出来,然后分别统计公司的频数。看到问题后,我想了一下,这里面大概是有两个问题,首先是要以空格为分割符,将公司的名称先提取出来。这时会碰到第二个问题,即有些公司的名称中,本身是包含空格的,比如上面的Infinity Venture,这样的公司会被分解为两个公司。第一个问题还好解决,我想出了两种方法。
第一种,迂回完成。先将Excel中的内容复制到记事本中,然后再导回到Excel中,这样公司的名称就自然被分开了。这里遇到一个小问题,当把Excel中的内容复制到记事本中后,原本整齐的数据,突然间莫名地出现了许多“?”号,想来可能是编码问题。也好解决,用Word打开记事本,将所有的“?”号替换成为空格,然后再导入到Excel中,得到了想要的效果。
第二种,用VBA。用第一种方法做完后,我就想用VBA来做一下试试。尽管对于这个问题,VBA并没有前一种方法直观,但是我想趁机复习一下VBA的语法,还有字符串函数的用法,于是就“杀鸡用牛刀”了。坦白地讲,作为一个统计专业的学生,我的Excel水平是不过关的,对于里面的函数、作图,都不熟悉,遇到问题总喜欢自己DIY个宏来解决。有时候可能费了半天的劲写出个程序,别人用一个函数就可以搞定同样的工作。但是我个人认为自己写的东西,能使人有一种成就感,在看到结果的一刹那,那种感觉只用一个词来形容——Fantastic。
于是几分钟后,下面这个程序就出现在了电脑里。
Option Explicit
Sub Split_Space()
Sheet3.Activate
Dim i, j, k, n, u As Integer
Dim rng As Range
Set rng = Range("A65536").End(xlUp)
n = rng.Row
j = 0
For i = 1 To n
u = UBound(Split(Cells(i, 1), ","))
For k = 0 To u
j = j + 1
Cells(j, 3) = Split(Cells(i, 1), ",")(k)
Next
Next
End Sub
但是程序写完后,总是运行出错。逐句检查,发现问题大概是出现在split函数上,然后纠结了半天,总是找不出具体的问题所在。有一个奇怪的症状是,split函数本来应该返回单元格中的字符串数(默认以空格为分割符),但是在这个程序中它的返回值竟然一直是0!这说明函数压根就没起作用……正在疑惑中,突然想起刚才把单元格内容复制到记事本中,出现了许多的“?”号,莫非是这些问号在作怪?于是把所有的分割符都替换成了“,”号,然后再运行程序,成功通过。
经过这个事例,我总结出了一句话。我小的时候,喜欢看一部新加坡电视剧,《力克千年虫》。里面有一句台词,给我留下的印象很深,“你所看到的事实,不一定是事实”。套用到这里就是,你所看到的空白,不一定都是空格。
最新评论