喜欢用Excel的一个原因是函数简单,结果直观,写程序时一些规律性的东西更容易生成。

以南京地铁站信息为例,随便网页上搜了一下,显示站点格式为:迈皋桥、红山动物园、南京站、新模范马路、玄武门,我想把它转化为一个站点一个单元格的形式,一个站一个站的复制粘贴太费劲,而用函数还是很容易实现的呢。

1、计算站点数

我把站点信息拷贝到B1,每个站点名称后面跟一个“、”号,所以提取“、”中间的字符即可。

站点数的统计,这里也有方法,站点后面跟“、”,统计出“、”字符出现的次数再加1就出来了。countif函数只能查单元格某字符出现的次数,一个单元格出现的某字符数就无能为力了,所以我们用另外的方法,统计字符串长度,然后把要查的字符替换成空,再统计长度,两者之差就是需要统计的字符串的长度了。

LEN(B1)查询的是B1单元格字符数,SUBSTITUTE(B1,”、”,)是把B1中的“、”去掉,去掉后再LEN一下,两者差就是“、”出现的次数,再加1就是一号线站点数了,共27站。

2、查找字符位置

琢磨了很久没找到只用一次单元格函数就把每个站点拆分出来的方法,所以我用力二次函数。第一次是找到“、”在单元格的位置,用find函数来找,find函数可以指定开始位置,然后返回找到的第一个字符的位置。

$B$1的意思是固定行列号,Excel有下拉功能,下拉的时候会按照第一个单元格的函数生成,但是涉及单元格位置的地方也会跟着变动,加上$号就固定了。从个B1中查找“、“,起始位置为前一个”、“+1的位置。然后下拉,把所有”、“位置生成。

3、生成列模式

生成列就很简单了,下图是我生成的,MID、LEFT、RIGHT为取值函数,我用MID,从B1中取,取值其实位置为第N个”、“后一位的位置,字符长度为两个”、“位置差减1的位置,要注意第一个和最后一个。

4、转回原来

当然能提取站点信息变成列信息,反过来把列信息变成一行信息呢,这个难不倒我。

先用&把”、“加上,然后把列元素复制一下,选择性粘贴,选数值和转置,数值就是把用函数生成的结果粘贴成字符,否则粘贴出来就是函数,显示就为空了。转置把列转成行了,不然下一步操作后全是换行。

调出剪贴板,把成行的站点信息复制,然后找个空单元格,点击剪贴板里面的全部粘贴,生成的结果可能有空格,SUBSTITUTE(B1,” “,)把空格去掉就OK了。

觉得用的到的同学可以自己试一把。而我也在试着把这些做成宏,这样用起来会更方便些。后面也会不断分享我的方法,主要是Excel,也会有一些其它的工具。觉得不错可以转发