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

注意 在輸出結(jié)果數(shù)組后,還要對(duì)結(jié)果區(qū)域的學(xué)號(hào)列從小到大進(jìn)行排序??! 以上知識(shí)點(diǎn)在VBA175例 194多列求和通用解法 記錄行號(hào)二次循環(huán)法深入講解 詳細(xì)講解 我的天哪 才小一百行了代碼量 就解決了今天的復(fù)雜問(wèn)題,VBA永遠(yuǎn)的神 ! 需要定制VBA表格,可以聯(lián)系我加QQ 3389320399 或微信 fxYYDS3389320399,隨時(shí)歡迎!! 好了,今天有關(guān)在Excel中多子表行列轉(zhuǎn)換 VBA數(shù)組字典高階解法的問(wèn)題便介紹到這,大家趕緊實(shí)際操作練習(xí)一下吧,有不懂的問(wèn)題可以留言問(wèn)小編呦!感謝支持Excel880工作室,還請(qǐng)多多轉(zhuǎn)發(fā),持續(xù)關(guān)注我們呀! 特別推薦使用VBA代碼助手,再也不怕記不住代碼最后,像大家推薦鄭老師的VBA代碼助手(下載地址vbayyds.com) 只需輸入關(guān)鍵字,就能將收藏過(guò)的代碼整個(gè)帶出來(lái),太贊了 比如上面代碼中的字典 數(shù)組輸出之類都只需要打幾個(gè)字就出來(lái) 
我們可以用代碼助手看一下今天這個(gè)案例 我下午寫了多少代碼量 
案例文件下載地址
|