復(fù)制、粘貼,同學(xué)們一定不陌生,大部分的情況下,都可以選中區(qū)域,CTRL+C,CTRL+V搞定。但是如果遇到數(shù)據(jù)有復(fù)制次數(shù)的限制又怎么辦呢?
趕緊來看一看吧!
這是作者的一個朋友問的問題,按照復(fù)制次數(shù)在E:F列中粘貼內(nèi)容,效果圖如下:
這樣的情況,同學(xué)們?nèi)绾翁幚砟兀窟€是CTRL+C、CTRL+V?那也是可以操作的,見動圖:
如果,這份數(shù)據(jù)有幾千行的話,使用快捷鍵就極有可能出錯。
今天就教大家:如何用3種VBA代碼,解決這個問題?
第一種代碼:
Sub 按指定次數(shù)復(fù)制()
Range("E2:F10000").ClearContents
For Each rng In Range("C2:C" & Cells(Rows.Count, "C").End(3).Row)
Range(Cells(rng.Row, "A"), Cells(rng.Row, "B")).Copy
For i = 1 To Cells(rng.Row, "C")
Cells(Cells(Rows.Count, "E").End(3).Row + 1, "E").Select
ActiveSheet.Paste
Next i
Next
End Sub
代碼解析:
''Line1:工程起始語句
''Line2:清空E2:F10000區(qū)域原有的數(shù)據(jù)
''Line3:在“復(fù)制次數(shù)”的C列中,循環(huán)每一個單元格變量rng
''Line4:使用copy方法,復(fù)制對應(yīng)行的AB兩列單元格
''Line5:按照C列中的復(fù)制次數(shù),確定循環(huán)次數(shù)
''Line6:選中E列最后一個沒有值的空單元格
''Line7:使用Paste方法粘貼
''Line8:結(jié)束i變量的循環(huán)
''Line9:結(jié)束對單元格的循環(huán)
''Line10:工程結(jié)束語句
這是典型的把手動操作“直譯”為代碼的過程,遍歷“復(fù)制次數(shù)”,然后就COPY和PASTE,相當(dāng)于就是讓代碼去CTRL+C和CTRL+V。雖然功能上可以達到要求,但是對于代碼的運算效率來說,也只能是解放了雙手的勞動,而不能很好提速。 arr = Range("A2:C" & [A10000].End(3).Row) a = Application.WorksheetFunction.Sum(Application.Index(arr, , 3)) ReDim brr(1 To a, 1 To 2) Range("E2:F10000").ClearContents [E2].Resize(UBound(brr), UBound(brr, 2)) = brr'’Line2:將A~C列裝入數(shù)組arr'’Line3:按照數(shù)組第3列的復(fù)制總次數(shù),確定新數(shù)組brr的行數(shù)'’Line5:循環(huán)數(shù)組arr'’Line7:計數(shù),確定新數(shù)組當(dāng)下要處理的行號'’Line8:將arr第1列的對應(yīng)內(nèi)容賦值給新數(shù)組brr的第1列'’Line9:將arr第2列的對應(yīng)內(nèi)容賦值給新數(shù)組brr的第2列'’Line10:結(jié)束當(dāng)下的復(fù)制過程'’Line11:進行下一列關(guān)鍵字的復(fù)制過程'’Line12:清空E1:F10000的區(qū)域'’Line13:將新數(shù)組賦值給從E1單元格開始的區(qū)域將操作對象的過程,轉(zhuǎn)換成放到內(nèi)存數(shù)組中運算,這樣的操作對于代碼的運行效率是相當(dāng)有效果的。只是這十幾行的統(tǒng)計,大家可以從動圖中感覺到快慢了吧! arr = Range("A2:C" & [A10000].End(3).Row) Set d = CreateObject("scripting.dictionary") d(arr(i, 1) & "|" & arr(i, 2) & "|" & j) = "" Range("E2:F10000").ClearContents Cells(k + 1, 5).Resize(1, 2) = Split(d1, "|")''Line2:將A~C列裝入數(shù)組arr''Line3:創(chuàng)建變量d為字典變量''Line4:循環(huán)數(shù)組arr''Line6:將數(shù)組arr的第1列、第2列、被復(fù)制的次數(shù)序號,用|符號鏈接起來最為新的關(guān)鍵字,賦值到字典中''Line7:結(jié)束當(dāng)下的復(fù)制過程''Line8:進行下一列關(guān)鍵字的復(fù)制過程''Line9:清空E1:F10000的區(qū)域''Line10:在字典d中循環(huán)每一個字典關(guān)鍵字元素''Line11:計數(shù),確定單元格對應(yīng)的行號''Line12:從E2單元格開始逐行賦值,用split函數(shù)按照|符號拆分字符串(相當(dāng)于分列的功能)''Line13:結(jié)束字典變量循環(huán)這第三段代碼,是使用了“字典”功能來處理的。雖然也在使用數(shù)組,但是不得不說,字典的運行效率要比數(shù)組會更快。如果我們要處理一個幾千、幾萬行數(shù)據(jù)的情況,這種方式的處理,效率最高。很多同學(xué)“談V色變”,甚至抵觸,這是不行的!作者E圖表述告訴大家:函數(shù)學(xué)的越多,只會讓你的工作越來越多,因為你的能力強,領(lǐng)導(dǎo)自然讓你多分擔(dān);只有學(xué)會使用VBA,才能讓你真正解放雙手,從眾多統(tǒng)計員中脫穎而出,才有可能升職加薪。所以不要再說學(xué)EXCEL沒用,而是你要學(xué)習(xí)有用且可變現(xiàn)的能力。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。