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