会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Excel技巧 > 编程 > 正文

用Excel制作公交向导

时间:2005-02-11 09:27 来源:excelhome 作者:闻欧 阅读:
Lupo网友提供了上海公交、地铁等交通路线表,要求在确定起始与目的站后能查找到乘车路线。本文试图用EXCEL函数来求解。由于数据量很大,第一步只涉及公交线路的查找,为叙述方便下面简称为公交向导。Lupo提供的上海公交共有509条线路,2069个车站(重复计算即所有路线的车站总和,则有9270个车站),这2069个车站由于原公交线路路线表中的站名输入时不规范,如同音字、包含各种空格等使计算机不能分辨,这不但增加了车站的数量,而且减少了可查找到的直达或经一次转车能达到目的站的可能。下述为制作公交向导的步骤。

一、给所有站名和线路名编码
1、把公交路线表复制到一工作簿(下称预处理工作簿)的Sheet1工作表,该公交线路表中的站名间是用符号“—”连接的,所以可用“数据”菜单中的“分列”选项使每一路线的所用站名相继占用同一行中的一个单元格,然后对所有路线都进行上述操作。在路线名和站名间插入一列,给每个路线名赋予一个3位数的代码。
2、在预处理工作簿Sheet2工作表对上述所有站名筛选出不重复的站名,再对这些站名中的汉字名规范化,即去掉各种空格,再篩选出不重复的站名。给每个站名赋予一个4位数的代码。

二、建立数字化公交路线表
根据站名代码和路线名代码把在预处理工作簿Sheet1工作表的各路线的路线名和站名在Sheet3转化为用数字化路线表。

三、创建数字化经过各车站所有公交路线表
1、把Sheet3中每一路线的站名代码与路线名代码用CONCATENATE()函数连接起来,放在Sheet4中,然后对所这些由CONCATENATE()函数连接起来的7位数按大小进行排序。
2、Sheet4中经排序后的数字列放在Sheet5的A列,把Sheet2的篩选出的不重复的站名的代码复制到B列,A列中前4位数相等的所有单元格的后3位数所代表的路线即为所有经过前4位数所代表的站的路线。这样对B列中的每一站可用MATCH、RIGHT等函数列出所有经过每一车站公交路线代码。这些代码分别排列在C列及C列后。

四、建立公交向导工作簿
公交向导工作簿设4张工作表,工作表名分别为1、2、3、4。
1、把预处理工作簿Sheet1路线名复制到公交向导工作簿的表1的B列,路线名的代码复制到A列和C列。
2、把预处理工作簿Sheet2站名复制到公交向导工作簿的表1的E列,站名的代码复制到D列和F列。
3、把预处理工作簿Sheet5数字化经过各车站所有公交路线表复制到表2。
4、把预处理工作簿Sheet3数字化路线表复制到表3。
5、表4根据表1到表3数据查询起始站和到达站查询乘车路线或换乘路线。

五、查询表的设计
1、直达路线的查询
表4的AL列为所有车站的站名,A3和A5单元格为经“有效性”处理上下车车站的站名。I2、I3单元格为A3和A5单元格内站名的代码。J、K列为所有经过上下车车站的各公交路线的代码。L列是J、K列数据按大小排列成一列,M列是对L列各路线出现次数进行计数,如某一路线出现两次,则该路线必定通过起始站和到达站即起始站和到达站间有直达路线。N列为查找所有直达路线所在表中的行数,O列则为相应的路线的代码,因此,O列中大于零的个数即为起始站和到达站间可直达的路线数。
2、经一次转车能到达的路线的查询
经一次转车能到达的路线就是要找到两条路线,其中一条经过起始站一条经过到达站且这两条路线要相交,这交点即为换车站。查找的途径是:列出所有经过上下车车站的各公交路线(其代码代码在J、K列)所经过的全部车站,AG、AH两列分别为经过按大小排列的上下车站的代码。AI列为AG、AH两列共有的车站,即换车站。换车站可能不止一个。P列为经过这换车站的所有公交车的路线的代码,Q、R列分别为经过上下车站的公交车的路线的代码。因此Q、R列中每一对代码即代表了通过上下车站且有交点的两条公交路线。
3、得到了无论是直达的还是通过一次转车达到目的站的公交路线的代码后可从表1和表3得到包含上下车站的该公交路线所经车站,列在表4的B到H列,并用条件格式以不同的颜色显示上下车车站和换车站。
要从有几种可能直达或经一次转车能达到目的站的线路中选取最优线路,或要查询必须经过两次或两次以上转车才能到达目的站的线路,必须知道各车站的坐标。
请参考公交向导

(责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: