HI,大家好,我是星光。在「零基礎(chǔ)學(xué)VBA編程」前面的章節(jié)里,先后給大家介紹了如何使用VBA代碼實(shí)現(xiàn)單元格遍歷和刪除、查找與替換、排序與合并等;本章再給大家總結(jié)一下其它常用的套路性代碼,涵蓋了選中、清除、復(fù)制粘貼、設(shè)置格式、去重復(fù)、篩選等。內(nèi)容較多,篇幅較長(zhǎng),目測(cè)非常有利于催眠,所以建議睡個(gè)回籠覺,先馬后看。 1丨 選中或激活 Range('a10').Select Range('a10').Activate 兩條代碼的作用大部分情況下是相同的,所不同的是Activate可以從被選取的單元格區(qū)域中激活指定單元格。 測(cè)試代碼如下▼
代碼運(yùn)行后,系統(tǒng)會(huì)選取A1:C10單元格區(qū)域,并激活A(yù)5單元格。 需要注意的是,不管Select還是Activate都只能在當(dāng)前工作表中選取指定單元格或區(qū)域,如果指定的單元格不是當(dāng)前工作表,會(huì)返回錯(cuò)誤提示。 錯(cuò)誤代碼如下▼ Sub ShtRng() Worksheets('測(cè)試').Range('a1').Select End Sub 正確代碼如下▼
2丨 清除單元格中的信息 相關(guān)代碼都可以通過(guò)錄制宏獲取,不過(guò)最常用的有兩條沒有魚,還是需要花費(fèi)7秒時(shí)間記憶一下。 一條是全部清除單元格的各種信息,包括單元格格式、邊框線等。 Sub CellsClear() Cells.Clear End Sub 另外一條是只清除單元格的內(nèi)容,保留格式等其他信息,常用于清空模版數(shù)據(jù),以待放置新數(shù)據(jù)。
3丨 復(fù)制粘貼 如果我們需要將A1:D5單元格區(qū)域的數(shù)據(jù)復(fù)制到H1:K5區(qū)域,可以使用以下代碼▼ Sub CopyRng1() Range('a1:d5').Copy Range('h1:k5') End Sub 粘貼區(qū)域可以只指定左上角的首個(gè)單元格,系統(tǒng)會(huì)根據(jù)復(fù)制區(qū)域的大小,自動(dòng)擴(kuò)展目標(biāo)區(qū)域,因此以下代碼更為常用。 注意粘貼單元格的變化..▼
Range對(duì)象的Copy方法完整語(yǔ)法格式如下: Range.Copy (Destination) 參數(shù)Destination指定了粘貼單元格的目標(biāo)區(qū)域,可以省略,如果省略Excel會(huì)將單元格對(duì)象復(fù)制到剪貼板中。 使用Range對(duì)象的PasteSpecial方法可以將剪貼板的Range粘貼到指定區(qū)域,并可以選擇性的粘貼對(duì)象的部分屬性——這對(duì)應(yīng)了Excel基礎(chǔ)操作中的選擇性粘貼功能。 我舉個(gè)例子。
第2行代碼將A1:D5區(qū)域復(fù)制到剪貼板。第3行代碼將剪貼板內(nèi)單元格對(duì)象的全部?jī)?nèi)容(xlPasteAll)復(fù)制粘貼到以H1單元格為左上角的區(qū)域。 這種復(fù)制粘貼的方式,源單元格區(qū)域會(huì)出現(xiàn)虛線邊框,因此第4行代碼取消剪切或復(fù)制模式并清除移動(dòng)邊框。 …… 選擇性粘貼對(duì)話框▼ 說(shuō)一下PasteSpecial的完整語(yǔ)法格式▼ Range.PasteSpecial(Paste,Operation,SkipBlanks,Transpose) Range是粘貼的目標(biāo)單元格或區(qū)域。 Paste指定了粘貼的源單元格區(qū)域的屬性,常用的有格式、列寬、公式、值等。對(duì)應(yīng)上圖的區(qū)域1。 SkipBlanks表示是否跳過(guò)空格,默認(rèn)為False,對(duì)應(yīng)上圖的區(qū)域3。 Transpose表示是否進(jìn)行轉(zhuǎn)置,默認(rèn)為False,對(duì)應(yīng)上圖的區(qū)域4。 …… 選擇性粘貼的相關(guān)屬性和代碼均可通過(guò)錄制宏獲取,通常并不需要強(qiáng)行記憶。打個(gè)響指,吃一包好多魚,有幾個(gè)常用的套路性語(yǔ)句大家還是需要深入了解一下。 也許你知道,也許你不知道,但很快你就知道的是,直接使用復(fù)制粘貼,不會(huì)將源單元格的列寬復(fù)制到目標(biāo)區(qū)域——但借助選擇性粘貼列寬,可以解決這個(gè)問(wèn)題。
第2行代碼將源單元格復(fù)制到剪貼板,第3行代碼選擇性粘貼列寬,第4行代碼粘貼全部屬性。 …… 有朋友可能會(huì)想,選擇性粘貼還有一個(gè)比較常用的功能,將公式的計(jì)算結(jié)果粘貼為數(shù)值——但這在VBA編程上并不常用。將公式轉(zhuǎn)換為數(shù)值,更常使用的方式是直接賦值▼ Sub CopyValue() Dim rng As Range Set rng = Range('a1').CurrentRegion rng.Value = rng.Value End Sub 第4行代碼將單元格的值屬性,即去除了公式等其他屬性,寫入單元格區(qū)域中,這和復(fù)制后選擇性粘貼數(shù)值相比……刀郎是這么說(shuō)的,它來(lái)得那么快來(lái)得那么直接,就算我心狂野,也無(wú)法將火熄滅…… …… 4丨 設(shè)置單元格格式 示例代碼如下▼
代碼解析: 第3行代碼將數(shù)據(jù)源存入數(shù)組arr。第4行代碼選中名為'結(jié)果表'的工作表。第5行代碼設(shè)置D列單元格格式為文本,避免證件號(hào)數(shù)據(jù)變形。第6行代碼將數(shù)組arr的數(shù)據(jù)寫入指定區(qū)域。 第5行設(shè)置單元格格式的代碼也可以使用▼ Range('d:d').NumberFormat = '@' NumberFormatLocal是通過(guò)本地用戶語(yǔ)言來(lái)定義單元格格式,NumberFormat是使用通用格式代碼來(lái)定義單元格格式。這在中英文系統(tǒng)下可能會(huì)有差異,比如中文系統(tǒng)常規(guī)格式叫做G/通用格式,但這在英文系統(tǒng)下就不能用了,更推薦使用通用格式General——這點(diǎn)了解一下即可,防止將來(lái)找個(gè)外國(guó)異性朋友嘰里呱啦什么嗯? 不同數(shù)據(jù)類型的格式代碼可以通過(guò)錄制宏獲取,這里不再展開描述。 5丨 刪除重復(fù)項(xiàng) 舉個(gè)例子,刪除C列重復(fù)的人名,獲取唯一值列表,代碼如下▼
Range.RemoveDuplicates(Columns,Header) 有兩個(gè)參數(shù),第1個(gè)參數(shù)表示以區(qū)域中第幾列作為刪除重復(fù)項(xiàng)的依據(jù)列,第2個(gè)參數(shù)表示區(qū)域是否包含標(biāo)題行,默認(rèn)不包含。 第1參數(shù)支持使用數(shù)組指定多列數(shù)據(jù)。比如……刪除A:C列區(qū)域中,B:C兩列記錄同時(shí)重復(fù)的數(shù)據(jù),代碼如下▼
6丨 篩選 最后聊一下篩選……算了,還是不聊了,無(wú)賴臉,關(guān)于篩選咱們放到單元格事件里再說(shuō)吧。 https://pan.baidu.com/s/1kUJEBlZ_z6demPh-onNcEQ 練習(xí)..▼ 1.清空當(dāng)前工作表所有單元格的信息 2.將'數(shù)據(jù)表副本'的數(shù)據(jù)復(fù)制到'數(shù)據(jù)表',并保持列寬和數(shù)據(jù)格式不變 3.將數(shù)據(jù)表A列的公式計(jì)算結(jié)果轉(zhuǎn)數(shù)值 4.獲取數(shù)據(jù)表C列不重復(fù)人名的名單,并放置到結(jié)果表A列 |
|
來(lái)自: 5jia5 > 《Excle & VBA》