久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Excel 善用數(shù)組,,提高程序效率

 L羅樂 2017-05-13
本帖最后由 zorsite 于 2015-6-25 17:35 編輯

在學(xué)習(xí)字典的過程中,,發(fā)現(xiàn)諸多高手都習(xí)慣性的運(yùn)用數(shù)組,,似乎我們?cè)诿恳粋€(gè)運(yùn)用字典的案例中都能發(fā)現(xiàn)數(shù)組的影子。
對(duì)于新手而言,,這種思維模式似乎有些困難,。就像我一直用網(wǎng)銀轉(zhuǎn)賬,忽然有人告訴我用微信轉(zhuǎn)賬吧,,更方便,!一開始我接受不了,但是經(jīng)不住很多人都這樣告訴我,,而我也將信將疑的試用一兩次,,結(jié)果發(fā)現(xiàn):哎,真的呀,,是更方便更快捷,!
那么數(shù)組就是這樣一種更方便更快捷的方式。
我們舉個(gè)很簡(jiǎn)單的例子,,用字典來(lái)查找數(shù)據(jù),。很多初學(xué)者會(huì)說(shuō):我用vlookup就很好,為什么要用字典呢,?哈哈,,不要糾結(jié)這個(gè)問題了,我們只是練練手,。學(xué)會(huì)了字典我們可以處理其他更復(fù)雜的問題,。
22222.png
上圖中,要在第二張表中根據(jù)電話號(hào)碼自動(dòng)到第一張表中查找到聯(lián)系人姓名,。如果用字典,,那么思路如下:
1.將第一張表中的數(shù)據(jù)寫入字典。電話號(hào)碼是關(guān)鍵字key,,姓名是項(xiàng)item,。
2.根據(jù)第二張表中D列的電話號(hào)碼在字典中找到相應(yīng)key的item,寫入E列相應(yīng)單元格,。
這是一種非常簡(jiǎn)單的思路,,至少我的第一反應(yīng)是這樣。
下面是代碼:
  1. Sub 查找()
  2. Dim d As New Dictionary
  3. Dim i As Long

  4. t = Timer
  5. Sheet2.Columns('E').Clear
  6. Sheet2.[E1].Value = '聯(lián)系人' '清空原有聯(lián)系人數(shù)據(jù)

  7. For i = 1 To Sheet1.Cells(1, 1).End(xlDown).Row
  8. d(Sheet1.Cells(i, 1).Value) = Sheet1.Cells(i, 2).Value
  9. Next
  10. '把所有電話和聯(lián)系人讀入到字典中,。


  11. For i = 1 To Sheet2.[d1048576].End(xlUp).Row - 1
  12.     Sheet2.Cells(i 1, 'E').Value = d(Sheet2.Cells(i 1, 'D').Value)
  13. Next
  14. '根據(jù)D列相應(yīng)的數(shù)據(jù),,在字典中找到期聯(lián)系人姓名,然后逐一填寫在E列中相應(yīng)的單元格,。

  15. Set d = Nothing '清空字典
  16. MsgBox '不用數(shù)組時(shí)程序運(yùn)行時(shí)間為' & Format((Timer - t) * 1000, '0.00') & '毫秒'
  17. End Sub
這段代碼只要能搞清d(x)是什么意思就能讀懂,,思路、邏輯渾然天成,,似乎程序就該這樣寫,。直到我發(fā)現(xiàn)了其他人的代碼……
  1. Sub 查找2()
  2. Dim d As New Dictionary
  3. Dim i, n As Long

  4. t = Timer
  5. Sheet2.Columns(5).Clear
  6. Sheet2.[E1].Value = '聯(lián)系人'

  7. arr = Sheet1.[a1].CurrentRegion
  8. For i = 1 To UBound(arr)
  9.     d(arr(i, 1)) = arr(i, 2)
  10. Next '把所有電話和聯(lián)系人讀入到字典中,。

  11. n = Sheet2.[d1048576].End(xlUp).Row - 1
  12. brr = Sheet2.[d2].Resize(n, 2)
  13. '創(chuàng)建一個(gè)n行2列的數(shù)組,放置進(jìn)出貨記錄中的電話和將要聯(lián)系人的聯(lián)系人姓名,。

  14. For i = 1 To n
  15.     brr(i, 2) = d(brr(i, 1))
  16. Next '在字典中找到每個(gè)聯(lián)系電話的聯(lián)系人,,并將結(jié)果寫入數(shù)組。
  17. Sheet2.[d2].Resize(n, 2) = brr '將數(shù)組中的數(shù)據(jù)(n行2列,,包括原有的電話信息)一次性的寫入D,、E列(覆蓋D列原有數(shù)據(jù))。

  18. Set d = Nothing '清空字典
  19. MsgBox '不用數(shù)組時(shí)程序運(yùn)行時(shí)間為' & Format((Timer - t) * 1000, '0.00') & '毫秒'
  20. End Sub
這段代碼讀起來(lái)就有些費(fèi)勁,,它運(yùn)用了兩個(gè)數(shù)組,。
它先把第一張表中的數(shù)據(jù)寫入到了ARR數(shù)組中,然后再寫入到字典,。
查找聯(lián)系人的時(shí)候,,又用了一次數(shù)組。先把字典中找到的數(shù)據(jù)寫入數(shù)組,,然后一次性的將數(shù)組數(shù)據(jù)寫入對(duì)應(yīng)區(qū)域,。
這段代碼與第一段代碼思路上的不同在于:
只要涉及到一系列”的數(shù)據(jù),就用數(shù)組,,或者說(shuō):只要有“整塊”的數(shù)據(jù)區(qū)域,,就用數(shù)組。
第一段代碼運(yùn)行最短時(shí)間為89毫秒,,而第二段代碼運(yùn)行的最短時(shí)間為42毫秒,。
實(shí)踐證明,善用數(shù)組,,比逐一讀取,、寫入單元格的效率要高很多。

電話識(shí)別.rar  (2015-6-25 17:22 上傳)

69.07 KB, 下載次數(shù): 59






分享到新浪微博

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多