今日的內(nèi)容是“VBA之EXCEL應(yīng)用”的第七章“循環(huán)在VBA中的利用”,。這講是第四節(jié)“利用VBA實(shí)現(xiàn)數(shù)據(jù)的隨機(jī)排序”,。這套教程從簡(jiǎn)單的錄制宏開(kāi)始講解,一直到窗體的搭建,,內(nèi)容豐富,,案例眾多。大家可以非常容易的掌握相關(guān)的知識(shí),,這套教程面向初學(xué)人員,,共三冊(cè),十七章,,都是我們?cè)诶肊XCEL工作過(guò)程中需要掌握的知識(shí)點(diǎn),,希望大家能掌握利用。 第四節(jié) 利用VBA實(shí)現(xiàn)數(shù)據(jù)的隨機(jī)排序大家好,,我們這講的內(nèi)容是隨機(jī)排序的實(shí)現(xiàn),。什么是隨機(jī)排序呢?就是不按大家主觀意愿的排序,,比如相同級(jí)別的6個(gè)人參加一個(gè)會(huì)議,,在會(huì)議主辦方發(fā)布的公示中把哪個(gè)人名排在前面呢,?如果我們按照主觀意愿去排列的話,,勢(shì)必引起不必要的糾紛。這個(gè)時(shí)候我們可以引入隨機(jī)排序,。 1 隨機(jī)排序的應(yīng)用場(chǎng)景如下工作表界面,,在A列有若干個(gè)人名,要實(shí)現(xiàn)這些人名不按某人主觀意愿的排序,。換一種說(shuō)法,,如果我們點(diǎn)擊旁邊的運(yùn)行按鈕可以運(yùn)行的話,那么我們要實(shí)現(xiàn)每次點(diǎn)擊排序是不一樣的,。這種順序是不以某人的意志為轉(zhuǎn)移的,。 如果我們?cè)诎才磐?jí)別的與會(huì)人員座位的時(shí)候,以上述的排序方法來(lái)安排順序的話,,大家肯定不會(huì)有什么意見(jiàn)了,。 2 隨機(jī)排序的思路分析如何實(shí)現(xiàn)數(shù)據(jù)的隨機(jī)排序呢,?這里提供一個(gè)簡(jiǎn)單的思路,首先在要實(shí)現(xiàn)隨機(jī)排序的數(shù)據(jù)旁邊插入一列隨機(jī)數(shù),,然后我們對(duì)隨機(jī)數(shù)進(jìn)行排序,,排序的同時(shí)同步實(shí)現(xiàn)要隨機(jī)排序的數(shù)據(jù)。最后我們刪除插入的隨機(jī)數(shù)即可,。 由于隨機(jī)數(shù)的特點(diǎn)就是隨機(jī)產(chǎn)生,,不以某人的意志為轉(zhuǎn)移,這正是我們要利用的地方,,在排序的時(shí)候以隨機(jī)數(shù)為基準(zhǔn),,這樣的排序結(jié)果也是隨機(jī)的結(jié)果,你無(wú)法預(yù)知到這種結(jié)果是什么,。我們希望實(shí)現(xiàn)的也正是這一點(diǎn),。 在我的其他教程中,對(duì)隨機(jī)數(shù)的原理和擴(kuò)展應(yīng)用有十分詳細(xì)的講解[1],。大家可以參考,。我們這講的內(nèi)容只是就實(shí)現(xiàn)某些數(shù)據(jù)的隨機(jī)排序來(lái)講解。 如何實(shí)現(xiàn)要隨機(jī)排序的數(shù)據(jù)和隨機(jī)數(shù)同步呢,?只要關(guān)聯(lián)到同一行即可,。 3 隨機(jī)排序的代碼及代碼解讀我們看下面的代碼: Sub mynzD() '隨機(jī)排序的實(shí)現(xiàn) Dim myStr As String Sheets('Sheet4').Select '第二列填入隨機(jī)數(shù) For i = 1 To Range('A1').End(xlDown).Row Cells(i, 2).Value = WorksheetFunction.RandBetween(0, 1000) '工作表隨機(jī)函數(shù) Next For i = 1 To Range('A1').End(xlDown).Row For j = i + 1 To Range('A1').End(xlDown).Row If Cells(j, 2).Value < Cells(i, 2).Value Then '隨機(jī)數(shù)交換位置 myStr = Cells(i, 1).Value Cells(i, 1).Value = Cells(j, 1).Value Cells(j, 1).Value = myStr '字符串交換位置 UU = Cells(i, 2).Value Cells(i, 2).Value = Cells(j, 2).Value Cells(j, 2).Value = UU End If Next Next Range('B1:B' & Range('A1').End(xlDown).Row).ClearContents MsgBox 'ok!' End Sub 代碼截圖: 代碼講解: 1) 上述代碼實(shí)現(xiàn)了A列人名的隨機(jī)排序。排序的實(shí)現(xiàn)方式和上節(jié)的冒泡排序一樣,。這個(gè)過(guò)程我就不再講解了,。 2) '第二列填入隨機(jī)數(shù) For i = 1 To Range('A1').End(xlDown).Row Cells(i, 2).Value = WorksheetFunction.RandBetween(0, 1000) '工作表隨機(jī)函數(shù) Next 以上代碼在第二列插入隨機(jī)數(shù),隨機(jī)數(shù)的產(chǎn)生是WorksheetFunction.RandBetween(0, 1000) ,,這個(gè)函數(shù)是工作表函數(shù),,產(chǎn)生一個(gè)介于0和1000間的隨機(jī)數(shù)。 3) '隨機(jī)數(shù)交換位置 myStr = Cells(i, 1).Value Cells(i, 1).Value = Cells(j, 1).Value Cells(j, 1).Value = myStr '字符串交換位置 UU = Cells(i, 2).Value Cells(i, 2).Value = Cells(j, 2).Value Cells(j, 2).Value = UU 以上代碼是冒泡排序中兩個(gè)更換位置的操作,,一個(gè)是隨機(jī)數(shù)的交換位置,,一個(gè)是要隨機(jī)排序的數(shù)據(jù)交換位置。這種同步是靠行數(shù)i來(lái)實(shí)現(xiàn)的,,因?yàn)檫@兩個(gè)數(shù)據(jù)是同一行數(shù)的數(shù)據(jù),。 4)Range('B1:B' & Range('A1').End(xlDown).Row).ClearContents 最后把隨機(jī)數(shù)刪除。 4 實(shí)現(xiàn)隨機(jī)排序代碼的實(shí)現(xiàn)效果我們看一下上述代碼的實(shí)現(xiàn)效果,,點(diǎn)擊運(yùn)行: 再次點(diǎn)擊運(yùn)行: 這個(gè)時(shí)候排序的順序發(fā)生了改變,,當(dāng)我們反復(fù)點(diǎn)擊,每次排序都是不同的,,從而達(dá)到了隨機(jī)的目的,。 [1]關(guān)于隨機(jī)數(shù)的講解及擴(kuò)展應(yīng)用在我的第六套教程《VBA信息獲取與處理》中第二專題:隨機(jī)數(shù)(Random)在EXCEL工作表及VBA中的應(yīng)用中有詳細(xì)的介紹,大家可以參考。 今日內(nèi)容回向: 1) 實(shí)現(xiàn)隨機(jī)排序的思路是怎樣的,? 2) 如何實(shí)現(xiàn)排序數(shù)據(jù)和隨機(jī)數(shù)據(jù)的關(guān)聯(lián),? 本講內(nèi)容參考程序文件:工作簿07.xlsm 分享成果,隨喜正能量 VBA的應(yīng)用及學(xué)習(xí)方法:VBA是利用Office實(shí)現(xiàn)個(gè)人小型辦公自動(dòng)化的有效手段(工具),。這是我對(duì)VBA的應(yīng)用界定,。在取代OFFICE新的辦公軟件沒(méi)有到來(lái)之前,誰(shuí)能在數(shù)據(jù)處理方面做到極致,,誰(shuí)就是王者,。其中登峰至極的技能非VBA莫屬! 我記得20年前自己初學(xué)VBA時(shí),,那時(shí)的資料甚少,,只能看源碼自己琢磨,真的很難。20年過(guò)去了,,為了不讓學(xué)習(xí)VBA的朋友重復(fù)我之前的經(jīng)歷,,我根據(jù)自己多年VBA實(shí)際利用經(jīng)驗(yàn),推出了七部VBA專門(mén)教程,。 第一套:VBA代碼解決方案 是VBA中各個(gè)知識(shí)點(diǎn)的講解,,教程共147講,覆蓋絕大多數(shù)的VBA知識(shí)點(diǎn),,提供的程序文件更是一座不可多得的代碼寶庫(kù),,是初學(xué)及中級(jí)人員必備教程;目前這套教程提供的版本是修訂第二版,,程序文件通過(guò)32位和64位兩種OFFICE系統(tǒng)測(cè)試,。 第二套:VBA數(shù)據(jù)庫(kù)解決方案 數(shù)據(jù)庫(kù)是數(shù)據(jù)處理的專業(yè)利器,教程中詳細(xì)介紹了利用ADO連接ACCDB和EXCEL的方法和實(shí)例操作,,適合中級(jí)人員的學(xué)習(xí),。目前這套教程提供的是修訂第一版教程,程序文件通過(guò)32位和64位兩種OFFICE系統(tǒng)測(cè)試,。 第三套:VBA數(shù)組與字典解決方案 數(shù)組和字典是VBA的精華,,字典是VBA代碼水平提高的有效手段,值得深入的學(xué)習(xí),,是初級(jí)及中級(jí)人員代碼精進(jìn)的手段,。目前這套教程提供的版本是修訂第一版,,程序文件通過(guò)32位和64位兩種OFFICE系統(tǒng)測(cè)試,。 第四套:VBA代碼解決方案之視頻 是專門(mén)面向初學(xué)者的視頻講解,可以快速入門(mén),,更快的掌握這門(mén)技能,。這套教程是第一套教程(修訂一版)的視頻講解,視頻更易接受。 第五套:VBA中類的解讀和利用 這是一部高級(jí)教程,,講解類的虛無(wú)與肉身的度化,,類的利用雖然較少,但仔細(xì)的學(xué)習(xí)可以促進(jìn)自己VBA理論的提高,。這套教程的領(lǐng)會(huì)主要是讀者的領(lǐng)悟了,,領(lǐng)悟一種佛學(xué)的哲理。目前這套教程提供的版本是修訂第一版,,程序文件通過(guò)32位和64位兩種OFFICE系統(tǒng)測(cè)試,。 第六套教程:VBA信息獲取與處理,這是一部高級(jí)教程,,涉及范圍更廣,,實(shí)用性更強(qiáng),面向中高級(jí)人員,。教程共二十個(gè)專題,,包括:跨應(yīng)用程序信息獲得、隨機(jī)信息的利用,、電子郵件的發(fā)送,、VBA互聯(lián)網(wǎng)數(shù)據(jù)抓取、VBA延時(shí)操作,,剪切板應(yīng)用,、Split函數(shù)擴(kuò)展、工作表信息與其他應(yīng)用交互,,F(xiàn)SO對(duì)象的利用,、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數(shù)等等內(nèi)容,。程序文件通過(guò)32位和64位兩種OFFICE系統(tǒng)測(cè)試,。 第七套教程:VBA之EXCEL應(yīng)用 這是一部初級(jí)教程這部教程共三冊(cè),從從創(chuàng)建宏,、對(duì)話框,、工作簿和工作表對(duì)象、單元格對(duì)象等基礎(chǔ)內(nèi)容講起,,到循環(huán)結(jié)構(gòu),、錯(cuò)誤處理、字符串操作,、日期和時(shí)間,、事件、數(shù)組應(yīng)用,,函數(shù)過(guò)程等方面,,一直講解到控件和窗體對(duì)象的應(yīng)用都是我們提高自己EXCEL水平的必須,。 以上各教程學(xué)習(xí)順序:7→1(或者4)→3→2→6→5。其中第四套是對(duì)第一套的視頻講解,,所以第一和第四只選其一即可,。 |
|
來(lái)自: 滿泉ca85upjdlw > 《Excel知識(shí)》