二維碼 購物車
部落窩在線教育歡迎您!

數(shù)據(jù)有復制次數(shù)限制,如何用VBA來復制內(nèi)容?

?

作者:E圖表述來源:部落窩教育發(fā)布時間:2021-12-10 09:27:13點擊:5723

分享到:
0
收藏    收藏人氣:0人
版權說明: 原創(chuàng)作品,禁止轉載。

編按:

復制、粘貼,同學們一定不陌生,大部分的情況下,都可以選中區(qū)域,CTRL+CCTRL+V搞定。但是如果遇到數(shù)據(jù)有復制次數(shù)的限制又怎么辦呢?趕緊來看一看吧!

 

這是作者的一個朋友問的問題,按照復制次數(shù)在E:F列中粘貼內(nèi)容,效果圖如下:

 

 

這樣的情況,同學們?nèi)绾翁幚砟??還是CTRL+CCTRL+V?那也是可以操作的,詳細見動圖:

 

文本
中度可信度描述已自動生成

 

如果,這份數(shù)據(jù)有幾千行的話,使用快捷鍵就極有可能出錯。今天就讓我們來看看如何用3段VBA代碼來解決這個問題吧!

 

第一段代碼:

Sub 按指定次數(shù)復制()

  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:復制次數(shù)C列中,循環(huán)每一個單元格變量rng

''Line4:使用copy方法,復制對應行的AB兩列單元格

''Line5:按照C列中的復制次數(shù),確定循環(huán)次數(shù)

''Line6:選中E列最后一個沒有值的空單元格

''Line7:使用Paste方法粘貼

''Line8:結束i變量的循環(huán)

''Line9:結束對單元格的循環(huán)

''Line10:工程結束語句


圖形用戶界面, 應用程序
描述已自動生成

 


這是典型的把手動操作“直譯”為代碼的過程,遍歷“復制次數(shù)”,然后就COPYPASTE,相當于就是讓代碼去CTRL+CCTRL+V。雖然功能上可以達到要求,但是對于代碼的運算效率來說,也只能是解放了雙手的勞動,而不能很好提速。

 

第二段代碼:

 

Sub 按指定次數(shù)復制2()

  arr = Range("A2:C" & [A10000].End(3).Row)

  a = Application.WorksheetFunction.Sum(Application.Index(arr, , 3))

  ReDim brr(1 To a, 1 To 2)

  For i = 1 To UBound(arr)

    For j = 1 To arr(i, 3)

      k = k + 1

      brr(k, 1) = arr(i, 1)

      brr(k, 2) = arr(i, 2)

    Next j

  Next i

  Range("E2:F10000").ClearContents

  [E2].Resize(UBound(brr), UBound(brr, 2)) = brr

End Sub

 

代碼解析:

‘’Line1:工程起始語句

‘’Line2:A~C列裝入數(shù)組arr

‘’Line3:按照數(shù)組第3列的復制總次數(shù),確定新數(shù)組brr的行數(shù)

‘’Line4:定義新數(shù)組brr

‘’Line5:循環(huán)數(shù)組arr

‘’Line6:此行判斷需要復制x

‘’Line7:計數(shù),確定新數(shù)組當下要處理的行號

‘’Line8:arr1列的對應內(nèi)容賦值給新數(shù)組brr的第1

‘’Line9:arr2列的對應內(nèi)容賦值給新數(shù)組brr的第2

‘’Line10:結束當下的復制過程

‘’Line11:進行下一列關鍵字的復制過程

‘’Line12:清空E1F10000的區(qū)域

‘’Line13:將新數(shù)組賦值給從E1單元格開始的區(qū)域

‘’Line14:工程結束語句


圖形用戶界面, 文本
描述已自動生成

 

將操作對象的過程,轉換成放到內(nèi)存數(shù)組中運算,這樣的操作對于代碼的運行效率是相當有效果的。只是這十幾行的統(tǒng)計,大家可以從動圖中感覺到快慢了吧!那么還有沒有其他的代碼可以解決“按次數(shù)復制粘貼”的過程呢?答案是肯定的。

 

第三段代碼:

 

Sub 按指定次數(shù)復制3()

  arr = Range("A2:C" & [A10000].End(3).Row)

  Set d = CreateObject("scripting.dictionary")

  For i = 1 To UBound(arr)

    For j = 1 To arr(i, 3)

      d(arr(i, 1) & "|" & arr(i, 2) & "|" & j) = ""

    Next j

  Next i

  Range("E2:F10000").ClearContents

  For Each d1 In d.keys

    k = k + 1

    Cells(k + 1, 5).Resize(1, 2) = Split(d1, "|")

  Next

End Sub

 

代碼解析:

''Line1:工程起始語句

''Line2:A~C列裝入數(shù)組arr

''Line3:創(chuàng)建變量d為字典變量

''Line4:循環(huán)數(shù)組arr

''Line5:判斷需要復制x

''Line6:將數(shù)組arr的第1列、第2列、被復制的次數(shù)序號,用|符號鏈接起來最為新的關鍵字,賦值到字典中

''Line7:結束當下的復制過程

''Line8:進行下一列關鍵字的復制過程

''Line9:清空E1F10000的區(qū)域

''Line10:在字典d中循環(huán)每一個字典關鍵字元素

''Line11:計數(shù),確定單元格對應的行號

''Line12:E2單元格開始逐行賦值,用split函數(shù)按照|符號拆分字符串(相當于分列的功能)

''Line13:結束字典變量循環(huán)

''Line14:工程結束語句


圖形用戶界面, 文本
描述已自動生成

 

這第三段代碼,是使用了“字典”功能來處理的。雖然也在使用數(shù)組,但是不得不說,字典的運行效率要比數(shù)組會更快。如果我們要處理一個幾千、幾萬行數(shù)據(jù)的情況,第四種方式的處理效率,就會立竿見影。

 

【結束語】

很多同學都是“談VBA色變”,甚至是抵觸,但是作者E圖表述在十幾年的實際工作EXCEL操作中總結出一句話,在這里和大家分享:函數(shù)學的越多,只會讓你的工作越來越多,因為你的能力強,領導自然讓你多分擔;只有學會使用VBA,才能讓你真正的解放雙手,從眾多統(tǒng)計員中脫穎而出,才有可能升職加薪。


所以不要再說學EXCEL沒用,而是你要學習有用且可變現(xiàn)的能力。

 

 

本文配套的練習課件請加入QQ群:902294808下載。

Excel高手,快速提升工作效率,部落窩教育《一周Excel直通車》視頻和《Excel極速貫通班》直播課全心為你!

掃下方二維碼關注公眾號,可隨時隨地學習Excel

IMG_256

相關推薦:

將excel中的數(shù)據(jù)按照指定數(shù)量進行重復,非得用VBA才能實現(xiàn)嗎?

如何在特定位置批量插入空行等12種實用辦公技巧

4種刪除excel重復值的小妙招,速收藏

Power Query的數(shù)據(jù)替換技巧比Excel函數(shù)更萬能!

版權申明:

本文作者E圖表述;同時部落窩教育享有專有使用權。若需轉載請聯(lián)系部落窩教育。