4小時(shí)的工作,1秒完成,中學(xué)體育比賽賽道匯總VBA數(shù)組字典進(jìn)階 ,VBA永遠(yuǎn)的神
投稿作者:凡心之旅 鄭廣學(xué)VBA175例教程首期學(xué)員
需求提出
今天我們來看一個(gè)運(yùn)動會比賽表的整理問題,每個(gè)運(yùn)動項(xiàng)目都有獨(dú)立的小表格,現(xiàn)在要整理成標(biāo)準(zhǔn)的二維表格,方便老師觀看每個(gè)同學(xué)的比賽項(xiàng)目。
原表一共有500多行數(shù)據(jù),幾十個(gè)小表格,是1個(gè)中學(xué)老師來找我定制,他說他每次做這個(gè)做一次要好幾個(gè)小時(shí),我最后給他用Excel VBA代碼一鍵完成,也沒報(bào)高價(jià),200塊,他拿到后驚為天人,一口一個(gè)謝謝,后面又給我單獨(dú)發(fā)了18塊錢的紅包請我喝奶茶!
前置知識
本案例屬于實(shí)戰(zhàn)案例,零基礎(chǔ)有點(diǎn)難,學(xué)習(xí)本案例需要至少有以下VBA基礎(chǔ)
VBA數(shù)組基礎(chǔ)
根據(jù)表格有效區(qū)域獲取數(shù)組
VBA字典基本知識
VBA字典行列號法基礎(chǔ)
以上知識點(diǎn),本人均在鄭廣學(xué)VBA175例教程中學(xué)習(xí)
結(jié)果標(biāo)題列號裝入項(xiàng)目列字典
VBA將學(xué)生號碼的行列號 裝入字典并用固定的分隔符連接
循環(huán)字典中的學(xué)生號碼關(guān)鍵字 取出對應(yīng)的行列號
如數(shù)據(jù)下圖:
解題思路
由于數(shù)據(jù)比較大, 這次我們使用鄭老師教的萬能字典行列號法,使用VBA的行列號定位+數(shù)組循環(huán)來完成,下面就開始我們愉快的學(xué)習(xí)旅程!
對源數(shù)據(jù)循環(huán),VBA將相同學(xué)生號碼的行列號裝入字典,行號用##分隔記錄,列號用$$分隔記錄
循環(huán)字典中的學(xué)生號碼關(guān)鍵字 取出對應(yīng)的行號列號
按逗號拆分行號列號得到行號列號數(shù)組
循關(guān)鍵字?jǐn)?shù)組,從源數(shù)據(jù)依次取出號碼,年級,班級,姓名及比賽項(xiàng)目
結(jié)果放入結(jié)果數(shù)組,寫入結(jié)果區(qū)
看圖中黃色底色廖凱同學(xué) 不管參加什么項(xiàng)目的比賽,他自己的學(xué)生號碼是唯一不變,這時(shí)候我就用 字典 記錄所有003號碼廖凱參加比賽項(xiàng)目的行列號,再通過是否包含男女字樣來鎖定標(biāo)題行,然后就可以提取我們所要的信息。
下面我們講一講重難點(diǎn)
1 、首先需要定義一些變量和字典對象,和大家一樣,最開始這個(gè)字典對象很長,總是記不住,不過還好有工具可以幫助我們快速輸入,安裝VBA代碼助手插件(vbayyds.com)后,在第25行 只需要輸入 dicd四個(gè)字母,然后空格就會得到提示 按下Tab鍵即直接輸入字典的定義, 即使是第一天學(xué)vba的同學(xué),也不怕記不住代碼了!

2、第09行到17行,將結(jié)果區(qū)域crr數(shù)組中的第1行的標(biāo)題作為字典的關(guān)鍵字key,列號作為他對應(yīng)值存入字典dic項(xiàng)目位置,后面在存放比賽項(xiàng)目的結(jié)果時(shí)候可以取出來對應(yīng)項(xiàng)目的列號位置。
3、同理:首先根據(jù)是否包含男女,把每個(gè)小表格的標(biāo)題行存入關(guān)鍵字為“標(biāo)題行”的對應(yīng)字典項(xiàng)目key值item中;然后再講每個(gè)參加比賽的同學(xué)學(xué)號的行列號用不同的分隔符連接起來 存入字典對應(yīng)key的值中(上次案例我們只了行號)
4 、定義一個(gè)結(jié)果數(shù)組brr ,循環(huán)對應(yīng)的號碼數(shù)組keys,取出字典中的所有號碼的行列號,
結(jié)果數(shù)組brr的第一列 放學(xué)生號碼;
結(jié)果數(shù)組brr的第二列 放對應(yīng)比賽項(xiàng)目的標(biāo)題中的年級信息;
結(jié)果數(shù)組brr的第三列 放原數(shù)組arr中的班級信息;
結(jié)果數(shù)組brr的第四列 放原數(shù)組arr中行號定位的姓名信息;
結(jié)果數(shù)組brr的第N列 將標(biāo)題行里的比賽項(xiàng)目,放結(jié)果區(qū)域中dic項(xiàng)目位置列號所對應(yīng)的列上打鉤。
注意 在輸出結(jié)果數(shù)組后,還要對結(jié)果區(qū)域的學(xué)號列從小到大進(jìn)行排序!!
以上知識點(diǎn)在VBA175例 194多列求和通用解法 記錄行號二次循環(huán)法深入講解 詳細(xì)講解
我的天哪 才小一百行了代碼量 就解決了今天的復(fù)雜問題,VBA永遠(yuǎn)的神 !
需要定制VBA表格,可以聯(lián)系我加QQ 3389320399 或微信 fxYYDS3389320399,隨時(shí)歡迎?。?/strong>
好了,今天有關(guān)在Excel中多子表行列轉(zhuǎn)換 VBA數(shù)組字典高階解法的問題便介紹到這,大家趕緊實(shí)際操作練習(xí)一下吧,有不懂的問題可以留言問小編呦!感謝支持Excel880工作室,還請多多轉(zhuǎn)發(fā),持續(xù)關(guān)注我們呀!
特別推薦使用VBA代碼助手,再也不怕記不住代碼
最后,像大家推薦鄭老師的VBA代碼助手(下載地址vbayyds.com)
只需輸入關(guān)鍵字,就能將收藏過的代碼整個(gè)帶出來,太贊了
比如上面代碼中的字典 數(shù)組輸出之類都只需要打幾個(gè)字就出來
我們可以用代碼助手看一下今天這個(gè)案例 我下午寫了多少代碼量
案例文件下載地址
請私信回復(fù)75630