摘 要:成語接龍是中華民族傳統(tǒng)的文字游戲。“有趣”的成語接龍,就是從“有”這個字做“龍頭”,一直接到“趣”這個字結(jié)尾。在這個過程中,我們綜合運用了搜索引擎的使用、辦公軟件的技巧、流程圖的繪制、軟件的安裝與激活、Excel函數(shù)及VBA編程等諸多知識點。由此可見,在學(xué)習(xí)中探索也是一件很有趣的事。
關(guān)鍵詞:成語接龍;Excel函數(shù)及VBA
成語接龍是中華民族傳統(tǒng)的文字游戲。它有著悠久的歷史,也有廣泛的社會基礎(chǔ),是老少皆宜的民間文化娛樂活動!
“有趣”的成語接龍,就是從“有”這個字做龍頭,一直接到“趣”這個字結(jié)尾。例如:有始有終→終有一別→別有風(fēng)趣。讓我們一起來看看這個用Excel是如何實現(xiàn)的呢。
第一步,找成語詞庫。這個要考驗大家的搜索能力了。幾經(jīng)周折,在百度網(wǎng)盤里找到一個3萬條成語的詞庫,https://pan.baidu.com/s/1xcOCQ。厲害,所有的成語還都帶有拼音和解釋,感謝匿名用戶的分享,向您的辛勤付出致敬。
第二步,把找到的詞庫做成我們想要的樣子。只要四字成語,拼音和解釋都不要。這里要用到Excel的“分列”和“快速給行添加序號”兩個小技巧。對于辦公軟件應(yīng)用老手應(yīng)該說是小菜一碟,在此向新手們小秀一把。
打開下載來的詞庫文件(txt格式),“Ctrl+A”,全選,“Ctrl+C”,復(fù)制。打開Excel,“Ctrl+V”,粘貼,“Ctrl+S”,保存詞庫文件(選擇xlsm格式,因為后面要用到VBA)。關(guān)閉txt詞庫文件。
選中A列的所有內(nèi)容,然后在工具欄依次點擊“數(shù)據(jù)”-“分列”,接著會彈出分列向?qū)υ捒?,選中固定寬度后,點擊下一步。調(diào)整那根黑色箭頭到合適位置(其實excel會智能為你選擇默認(rèn)位置,此例就不需要再調(diào)整了),點擊完成。分列后的A列中就是我們要的四字成語,其他各列的內(nèi)容可以直接刪掉了。
因為下載的詞庫文件中有“隔一行空一行”的特點,所以A列也是一行成語一行空行。刪除多余的空行,要用到給行添加序號的方法。如何快速去除空行,為成語行添加序號,老朽再獻(xiàn)一招。
鼠標(biāo)選任何一個有成語的單元格,同時按“Ctrl+End”鍵,會自動跳到該工作表的表尾,即該工作表有操作過的最右側(cè)最下方的單元格。記下最下方行的行號,如最后一行是61614,在公式編輯欄的左邊顯示單元格地址的地方(學(xué)名:名稱框)內(nèi)輸入B1:B61614,敲回車,這時從B1到B61614所有的單元格都被選中了,我們隨便輸入一個數(shù)字,比如1,同時按“Ctrl+Enter”鍵,選中的單元格將全部填入剛才輸入的內(nèi)容。在B2單元格內(nèi)輸入2,連續(xù)選中“B1:B2”,雙擊“黑十字”,B列就自動填充了序號。選中A1單元格,在菜單欄上點擊圖標(biāo)“A→Z”,所有的成語就排在了一起,按“Ctrl+↓”(方向鍵的向下箭頭),到達(dá)A列的最后一行,按“→”鍵,將光標(biāo)向右平移到B列,按“↓”鍵,將光標(biāo)向下移動一格,按“Ctrl+Shift+↓”,即可選定B列中多余數(shù)據(jù)的所有行,按Delete鍵刪除。我們再把AB兩列互換位置,序號在左,成語在右。A列與B列互換也是有小技巧的喲!首先選中A列數(shù)據(jù)區(qū),然后按住Shift+鼠標(biāo)左鍵往右拖拽,當(dāng)鼠標(biāo)變成“十字型方向鍵”,拖動到B列之后,松開鼠標(biāo)左鍵就完成了兩列對調(diào)互換。用函數(shù)left、right提取成語的“頭”,“尾”。組合“頭尾”,刪除“等效”成語,比如:“深謀遠(yuǎn)慮”與“深思熟慮”在接龍過程中起的作用是一樣的,保留一個就可以。增加標(biāo)題行,詞庫大功告成。
第三步,制作程序流程圖。流程圖的繪制基本上按照編程思路來繪制的,就是用圖形方式反映處理過程的“流水賬”。繪制出這本“流水賬”對于過程中理順和優(yōu)化代碼是很有幫助的。在程序設(shè)計中,最重要的不是寫程序代碼,而是設(shè)計。畫圖的過程就是思考的過程,由于其直觀性,畫圖的過程本身又促進(jìn)了思考。
繪制流程圖的方法很多,老朽采用的是微軟的Visio 2013。安裝后,啟動KMSpico,點擊大的紅色按鈕,稍等一會,即告成功。如果在安裝過程中提示未安裝 .net framework4.0,請按提示進(jìn)行安裝。.net framework4.0是XML Web Services 的內(nèi)部 Windows 組件,很多基于此架構(gòu)的程序需要它的支持才能夠運行。
第四步,著手寫代碼。本例使用Excel工作表作為數(shù)據(jù)庫,VBA編寫代碼。VBA是一種編程語言,它依托于Microsoft Office軟件,不能獨立運行,通過VBA可以實現(xiàn)各種Office軟件操作的自動化。VBA的主要作用有:(1)實現(xiàn)Excel中沒有提供的功能;(2)提高程序運行速度;(3)按要求自定義函數(shù);(4)對大量需要重復(fù)的過程可以實現(xiàn)自動化功能;(5)通過插入窗體做小型管理軟件。VBA存放于VB編輯器中。打開方法為:單擊EXCEL右上角的OFFICE圖標(biāo),找到EXCEL選項,單擊打開;勾選在功能區(qū)顯示“開發(fā)工具”選項卡,單擊確定按鈕完成修改;單擊菜單欄的開發(fā)工具,然后找到Visual Basic選項,單擊打開便可以進(jìn)行相關(guān)的VBA編程。也可以按組合鍵“Alt+F11”進(jìn)入VB編輯器。再或者是鼠標(biāo)放置到工作表表名標(biāo)簽上,單擊鼠標(biāo)右鍵,選擇“查看代碼”,同樣能進(jìn)入VB編輯器。
編碼過程中使用了子過程,變量就要在不同過程中進(jìn)行傳遞,這要用到全局變量,VBA要求在程序開始前,先聲明全局變量。
老朽在這里用到了中國傳統(tǒng)文化中的“家譜”的概念。即龍子、龍孫按“代”記錄其名字dm(d)和父親的名字df(d) ,“代”用變量d記錄,并寫進(jìn)數(shù)據(jù)庫。
為防止進(jìn)入諸如“有求必應(yīng)→應(yīng)有盡有→有求必應(yīng)→應(yīng)有盡有”這樣的死循環(huán),在數(shù)據(jù)庫中增加了一列輔助數(shù)據(jù)Cells(i, 5) = d。如果一條成語被使用,則在輔助列里寫入d的值,只有輔助列內(nèi)Cells(i, 5) = ""值為空時,成語才能被使用,這就限定一個成語只能被使用一次,從而避免了進(jìn)入死循環(huán)的可能。
判斷龍孫中是否有叫“趣”,即是否包括目標(biāo)結(jié)束字。有則退出循環(huán),為zl賦值。
找到“真龍”前,以“龍子”的尾為“龍孫”的頭,不斷進(jìn)行循環(huán)調(diào)用zp
當(dāng)找到符合條件的“真龍”,調(diào)用px子過程:
If zd = 1 Then
Call px
px主要作用是將數(shù)據(jù)庫中已使用到的成語集中在一起,減少遍歷循環(huán)過程讀取數(shù)據(jù)的次數(shù),提高運行效率。
調(diào)用px過程結(jié)束后,提取當(dāng)前行的行號,減少循環(huán)次數(shù)。t
在L2單元格內(nèi)輸出“真龍”,用并彈出對話框的方式加以提示。
至此,成語接龍的代碼就寫完了。讓我們一起來驗證一下它的效果吧:老朽名曰韓有鋒,看看能否實現(xiàn)“由韓到有,由有到鋒”的成語接龍呢?
輸入首尾字:韓有,運行VBA程序,得到結(jié)果:韓信將兵→兵不由將→將門虎子→子虛烏有。輸入首尾字:有鋒,得到結(jié)果:有腳陽春→春暖花開→開路先鋒。最終“韓有鋒”的接龍效果為:【韓】信將兵→兵不由將→將門虎子→子虛烏有→【有】腳陽春→春暖花開→開路先【鋒】。
是不是一個很有趣的成語接龍。在這個過程中,我們綜合運用了搜索引擎的使用、辦公軟件的技巧、流程圖的繪制、軟件的安裝與激活、Excel函數(shù)及VBA編程等諸多知識點,由此可見,在學(xué)習(xí)中探索也是一件很有趣的事。
作者簡介:韓有鋒(1975- ),男,江蘇沛縣人,大學(xué)本科,江蘇省徐州技師學(xué)院信息工程學(xué)院,高級講師,主要從事設(shè)計類、計算機(jī)類教學(xué)研究工作。