會(huì)員登錄 - 用戶注冊(cè) - 網(wǎng)站地圖 Office中國(guó)(office-cn.net),專業(yè)Office論壇
當(dāng)前位置:主頁(yè) > 技巧 > Excel技巧 > 編程 > 正文

用Excel制作公交向?qū)?/h2>
時(shí)間:2005-02-11 09:27 來(lái)源:excelhome 作者:聞歐 閱讀:
Lupo網(wǎng)友提供了上海公交、地鐵等交通路線表,要求在確定起始與目的站后能查找到乘車路線。本文試圖用EXCEL函數(shù)來(lái)求解。由于數(shù)據(jù)量很大,第一步只涉及公交線路的查找,為敘述方便下面簡(jiǎn)稱為公交向?qū)Аupo提供的上海公交共有509條線路,2069個(gè)車站(重復(fù)計(jì)算即所有路線的車站總和,則有9270個(gè)車站),這2069個(gè)車站由于原公交線路路線表中的站名輸入時(shí)不規(guī)范,如同音字、包含各種空格等使計(jì)算機(jī)不能分辨,這不但增加了車站的數(shù)量,而且減少了可查找到的直達(dá)或經(jīng)一次轉(zhuǎn)車能達(dá)到目的站的可能。下述為制作公交向?qū)У牟襟E。

一、給所有站名和線路名編碼
1、把公交路線表復(fù)制到一工作簿(下稱預(yù)處理工作簿)的Sheet1工作表,該公交線路表中的站名間是用符號(hào)“—”連接的,所以可用“數(shù)據(jù)”菜單中的“分列”選項(xiàng)使每一路線的所用站名相繼占用同一行中的一個(gè)單元格,然后對(duì)所有路線都進(jìn)行上述操作。在路線名和站名間插入一列,給每個(gè)路線名賦予一個(gè)3位數(shù)的代碼。
2、在預(yù)處理工作簿Sheet2工作表對(duì)上述所有站名篩選出不重復(fù)的站名,再對(duì)這些站名中的漢字名規(guī)范化,即去掉各種空格,再篩選出不重復(fù)的站名。給每個(gè)站名賦予一個(gè)4位數(shù)的代碼。

二、建立數(shù)字化公交路線表
根據(jù)站名代碼和路線名代碼把在預(yù)處理工作簿Sheet1工作表的各路線的路線名和站名在Sheet3轉(zhuǎn)化為用數(shù)字化路線表。

三、創(chuàng)建數(shù)字化經(jīng)過(guò)各車站所有公交路線表
1、把Sheet3中每一路線的站名代碼與路線名代碼用CONCATENATE()函數(shù)連接起來(lái),放在Sheet4中,然后對(duì)所這些由CONCATENATE()函數(shù)連接起來(lái)的7位數(shù)按大小進(jìn)行排序。
2、Sheet4中經(jīng)排序后的數(shù)字列放在Sheet5的A列,把Sheet2的篩選出的不重復(fù)的站名的代碼復(fù)制到B列,A列中前4位數(shù)相等的所有單元格的后3位數(shù)所代表的路線即為所有經(jīng)過(guò)前4位數(shù)所代表的站的路線。這樣對(duì)B列中的每一站可用MATCH、RIGHT等函數(shù)列出所有經(jīng)過(guò)每一車站公交路線代碼。這些代碼分別排列在C列及C列后。

四、建立公交向?qū)Чぷ鞑?BR>公交向?qū)Чぷ鞑驹O(shè)4張工作表,工作表名分別為1、2、3、4。
1、把預(yù)處理工作簿Sheet1路線名復(fù)制到公交向?qū)Чぷ鞑镜谋?的B列,路線名的代碼復(fù)制到A列和C列。
2、把預(yù)處理工作簿Sheet2站名復(fù)制到公交向?qū)Чぷ鞑镜谋?的E列,站名的代碼復(fù)制到D列和F列。
3、把預(yù)處理工作簿Sheet5數(shù)字化經(jīng)過(guò)各車站所有公交路線表復(fù)制到表2。
4、把預(yù)處理工作簿Sheet3數(shù)字化路線表復(fù)制到表3。
5、表4根據(jù)表1到表3數(shù)據(jù)查詢起始站和到達(dá)站查詢乘車路線或換乘路線。

五、查詢表的設(shè)計(jì)
1、直達(dá)路線的查詢
表4的AL列為所有車站的站名,A3和A5單元格為經(jīng)“有效性”處理上下車車站的站名。I2、I3單元格為A3和A5單元格內(nèi)站名的代碼。J、K列為所有經(jīng)過(guò)上下車車站的各公交路線的代碼。L列是J、K列數(shù)據(jù)按大小排列成一列,M列是對(duì)L列各路線出現(xiàn)次數(shù)進(jìn)行計(jì)數(shù),如某一路線出現(xiàn)兩次,則該路線必定通過(guò)起始站和到達(dá)站即起始站和到達(dá)站間有直達(dá)路線。N列為查找所有直達(dá)路線所在表中的行數(shù),O列則為相應(yīng)的路線的代碼,因此,O列中大于零的個(gè)數(shù)即為起始站和到達(dá)站間可直達(dá)的路線數(shù)。
2、經(jīng)一次轉(zhuǎn)車能到達(dá)的路線的查詢
經(jīng)一次轉(zhuǎn)車能到達(dá)的路線就是要找到兩條路線,其中一條經(jīng)過(guò)起始站一條經(jīng)過(guò)到達(dá)站且這兩條路線要相交,這交點(diǎn)即為換車站。查找的途徑是:列出所有經(jīng)過(guò)上下車車站的各公交路線(其代碼代碼在J、K列)所經(jīng)過(guò)的全部車站,AG、AH兩列分別為經(jīng)過(guò)按大小排列的上下車站的代碼。AI列為AG、AH兩列共有的車站,即換車站。換車站可能不止一個(gè)。P列為經(jīng)過(guò)這換車站的所有公交車的路線的代碼,Q、R列分別為經(jīng)過(guò)上下車站的公交車的路線的代碼。因此Q、R列中每一對(duì)代碼即代表了通過(guò)上下車站且有交點(diǎn)的兩條公交路線。
3、得到了無(wú)論是直達(dá)的還是通過(guò)一次轉(zhuǎn)車達(dá)到目的站的公交路線的代碼后可從表1和表3得到包含上下車站的該公交路線所經(jīng)車站,列在表4的B到H列,并用條件格式以不同的顏色顯示上下車車站和換車站。
要從有幾種可能直達(dá)或經(jīng)一次轉(zhuǎn)車能達(dá)到目的站的線路中選取最優(yōu)線路,或要查詢必須經(jīng)過(guò)兩次或兩次以上轉(zhuǎn)車才能到達(dá)目的站的線路,必須知道各車站的坐標(biāo)。
請(qǐng)參考公交向?qū)?BR>

(責(zé)任編輯:admin)

頂一下
(0)
0%
踩一下
(0)
0%

發(fā)表評(píng)論
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
評(píng)價(jià):