關於如何實現表間查詢並提取班號的再研究 字典功能

2022-08-27 03:51:08 字數 2039 閱讀 6391

3月6日發表的同題的文章,現在想想其實只能算是小兒科,因為那個程式一方面太繁瑣,另一方面還有著更致命的問題:如果遇到查不到的專案,那麼很容易就會引起錯誤,從而得到錯誤的結果.

現在可以借助字典功能來實現更科學的查詢,更嚴謹的結果.

分析如下:

表一為"一中二中資訊總表.xls"示意圖:

此表儲存著所有學生的班級/姓名/學籍號.此為需要查詢的目的表.

表二是需要填入班級號(行政班)的"第6學段模組學習成績表.xls"的樣表:

此表為需要填入班級號,假設其中已填寫的班級號為教學班班級號,現在需要按註冊學籍號從表一中提取對應原班級號,並填入表二中相應位置.

以前都是利用查詢功能,但明顯的速度太慢.現在可以利用字典功能來實現(忍不住有點小得意啊.

基本的思路是:

①先根據表一建立乙個陣列(動態),讀取表一中的班級/姓名/學籍號,即建立乙個三維陣列:三列n行,第1列為班級/第2列為姓名/第3列為學籍號.注意一點:該動態陣列的起始上標是從1開始的,不是從0開始的.

②建立乙個字典物件,並通過乙個迴圈結構,將該字典物件的關鍵字定義為①中所建陣列中的第3列(學籍號),對應值為①中所建陣列的第1列/班級,但要注意上標要從2開始,因為1對應著欄位名(即純粹的班級/姓名/學籍號),為節省空間,此時完全可以把①中所建陣列清空了,因為它所起的作用已經結束.為第③步做準備.

③由於要在表二中填入班級號,這裡最好把班級列與學籍號列相鄰,這樣可以便於操作.此時就可把清空後的陣列用來儲存表二中的班級號(此時為空)/學籍號,即建立乙個二維陣列:二列n'行,第1列為班級/第2列為學籍號.同樣的要注意此動態陣列的上標是從1開始的,不是從0開始的.

④建立好陣列後,就可以在字典中逐一查詢陣列中的每乙個數值,並把與之相對應的班級號,放到陣列中的第一維,即班級號中.

⑤第④相當於把原來的為空的陣列的中的班級列進行了填空.這樣就儲存下了表二中所有在表一可以查到的學籍號所對應的班級號了.為下一步的直接賦值做好了準備.

⑥最後一步就是定位到表二中的相應位置,然後直接賦值就可以了.注意行數的定位.

最終源程式如下:

sub 驗證字典功能()

dim i as integer, arr()

dim dic as object, wb as object

set wb = getobject(thisworkbook.path & "\20110124最終確認學生名單.xls")

with wb.sheets("畢業證學生資訊")

i = .range("a65536").end(xlup).row

arr = .range("a1").resize(i, 2).value

end with

wb.close false

set dic = createobject("scripting.dictionary")

for i = 2 to ubound(arr)

dic(arr(i, 1)) = arr(i, 2)

next i

erase arr

with thisworkbook.sheets("sheet1")

i = .range("a65536").end(xlup).row

arr = range("a1").resize(i, 2).value

for i = 2 to ubound(arr)

arr(i, 2) = dic(arr(i, 1))

next i

i = .range("a65536").end(xlup).row

.range("a1").resize(.range("a65536").end(3).row, 2).numberformatlocal = "@"

.range("a1").resize(i, 2).value = arr

end with

end sub

最終的效果即如表二所示.

反思:實際上字典的功能肯定遠遠不止這些,但光這些,就已經讓我心服口服了.excel真的是無止境啊.微軟說今後10-15年不會取消vba看來是有道理的,就現在這些功能也不是大部分人都掌握啊.更沒必要開發更新的功能了.

今天你菊子曰了麼?

MyBatis Plus 如何實現連表查詢

gitee github 在專案中新增依賴 com.github.yulichanggroupid mybatis plus joinartifactid 1.1.8version dependency 或者clone 到本地,執行mvn install,再引入以上依賴 注意 mybatis plu...

關於C C 程式裡如何實現模糊查詢

相信學過c c 的都應該了解如何在陣列裡面去查詢資料,利用for迴圈便能很容易實現查詢的功能,但若陣列裡的資料是字串型別,而你又恰好需要實現的是根據關鍵字進行查詢的話,那麼按部就班對陣列裡的字串進行乙個個字元的對比是很難實現的,這時候就要想其他的辦法了,c裡面有乙個函式便可以從側面實現模糊查詢,它就...

簡單鍊錶如何實現查詢隨機位置。

原題 簡單的鍊錶結構擁有很好的插入,刪除節點效能,但隨機定位 獲取鍊錶第n個節點 操作效能不佳,請你設計一種改進型的鍊錶結構優化隨機定位操作的效能,給出設計思路及其改進後隨機定位操作的時間複雜度。解答 可以增加乙個與之對應的陣列,裡面存放相應位置的指標。這樣就可以真正的隨機訪問。但是這樣有幾個不便 ...