最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【用實(shí)戰(zhàn)學(xué)VBA】拒絕重復(fù)操作,VBA按固定格式批量輸出,并沒有那么難

2022-06-22 16:01 作者:之了學(xué)吧  | 我要投稿

大家好~我是一分鐘學(xué)Excel,VBA的基礎(chǔ)系列目前到了第三期,前兩期都比較簡(jiǎn)單,今天呢,我們來一些實(shí)際工作或生活中會(huì)涉及到的案例。

老樣子,學(xué)習(xí)時(shí)間~

今天的練習(xí)冊(cè)有兩個(gè)工作表,一個(gè)表格是送貨單,另一個(gè)是數(shù)據(jù)原始表格(銷項(xiàng)發(fā)票)。

(送貨單)
(銷項(xiàng)發(fā)票)

聰明的你一定知道了,我們需要做的便是將銷項(xiàng)發(fā)票中的數(shù)據(jù)填入到送貨單對(duì)應(yīng)的單元格之中。就像這樣:

當(dāng)然,一張是不夠的,原始表格(銷項(xiàng)發(fā)票)中有51行數(shù)據(jù),也就意味著,在不進(jìn)行數(shù)據(jù)匯總的情況下,我們要批量輸出51張。

其實(shí)生活中有許多類似這樣的工作,比如工資單、發(fā)票錄入等等。都同屬于重復(fù)且繁瑣的操作。而使用VBA的好處是,可以通過代碼來一鍵實(shí)現(xiàn)批量處理的操作。


基礎(chǔ)操作

在開始代碼之前,我們先設(shè)想一下,如果不使用VBA,我們的操作會(huì)是什么樣的。最基礎(chǔ)的操作便是復(fù)制粘貼,從原始表格中復(fù)制數(shù)據(jù),然后再粘貼到對(duì)應(yīng)的單元格中??偨Y(jié)下來,便是這幾步。

  1. 選中銷項(xiàng)發(fā)票工作表;

  2. 復(fù)制指定單元格數(shù)據(jù);

  3. 選中送貨單所在工作表;

  4. 粘貼指定單元格數(shù)據(jù)。

而這幾步,如果使用代碼編寫是這樣的

我們?cè)谏弦黄谥袑W(xué)會(huì)了如何去使用變量來存儲(chǔ)數(shù)據(jù)與給數(shù)據(jù)賦值。便不用再對(duì)數(shù)據(jù)進(jìn)行復(fù)制與粘貼。還記得是怎么操作的嗎?我們來試著編寫一下。

首先,先聲明一個(gè)變量,為文本類型。然后開始第一步,選中原始表格數(shù)據(jù)表,將E5單元格的數(shù)據(jù)賦值給變量客戶,最后回到送貨單的工作表中,將客戶的值賦值給B5單元格。這樣一來,便完成來基礎(chǔ)的步驟。而其余的數(shù)據(jù)可以依照這樣的方式進(jìn)行同樣的賦值操作。

  • 代碼

  • 運(yùn)行效果

從運(yùn)行效果中,處于原始數(shù)據(jù)表格(銷項(xiàng)發(fā)票)中的客戶名稱被指定的填入到了送貨單的收獲單位旁的單元格中。在我說下一步之前,我希望你可以先自己練練手,將這一步完成。熟悉vba語句的編寫。

剩下的便是以這樣變量賦值的方式,將每一個(gè)數(shù)據(jù)依次填充到送貨單中。

  • 代碼

  • 運(yùn)行效果

別直接復(fù)制粘貼哦~一定要自己寫一遍,這樣才能記住基礎(chǔ)語句的用法。第一張單子填充完畢后,接下來,便是復(fù)制送貨單,到下面的空白區(qū)域去進(jìn)行粘貼。

  • 代碼

  • 運(yùn)行效果

如果我們需要粘貼51張送貨單的話,就需要粘貼51次,也就是51*2,102行代碼。未免也太多了。這樣一來,還不如手動(dòng)復(fù)制粘貼來的快。像這樣重復(fù)的工作,可以用VBA中的【循環(huán)】來實(shí)現(xiàn)。

循環(huán)

循環(huán),這個(gè)詞語也出現(xiàn)在許多編程語言之中。區(qū)分人類與動(dòng)物的標(biāo)志之一在于:人類懂得制造和使用生產(chǎn)工具從事生產(chǎn)勞動(dòng)。

在生活中,你可能需要去制作很多相似的合同,本來需要一個(gè)一個(gè)手動(dòng)輸入,而計(jì)算機(jī)通過【循環(huán)】,就可以依照某些規(guī)則幫你填寫。你就可以正大光明的“上班偷懶”了。在VBA中,與其他編程語言一樣,有for循環(huán)與while循環(huán)。在今天的案例中,我們主要通過for循環(huán)去解決重復(fù)性問題。

【for循環(huán)】可以規(guī)定循環(huán)次數(shù),語法是關(guān)鍵字for,意味著for的循環(huán)展開,后跟上循環(huán)的次數(shù),便是x等于多少到多少。

如果【x = 1 to 3】的話,則循環(huán)3次。

第一次:x = 1;第二次:x = 2,第三次:x = 3。

循環(huán)到3的時(shí)候,配上【Next語句】,循環(huán)結(jié)束。

下面,我們?cè)诖a中編寫for循環(huán)語句,來看看它的具體應(yīng)用。首先,定義客戶的變量用于存儲(chǔ)表格中E5單元格的值。然后使用MsgBox打印變量的內(nèi)容。

這里可以看到,MsgBox的彈窗出現(xiàn)了一次,這時(shí)候,我們加上循環(huán),使其循環(huán)三次。

這里暫停一下,可以看到這里我全選了下面的語句,然后按下了鍵盤上的【Tab鍵】,讓這些語句的前方都出現(xiàn)了四個(gè)空格或者一個(gè)tab鍵的距離。為什么要這樣做呢?

縮進(jìn)

我們?cè)谌粘L幚鞼ord文本時(shí),常常說:首行縮進(jìn)2個(gè)字符。在寫文章時(shí),我們?cè)O(shè)置好首行縮進(jìn)能夠幫助我們更好的分清內(nèi)容層次和段落,便于理解。

對(duì)于VBA而言,縮進(jìn)這類固定格式,也會(huì)幫助VBA區(qū)分代碼之間的層次,理解條件執(zhí)行的邏輯和先后順序。比如For語句與Next語句是屬于平行關(guān)系,而縮進(jìn)后的語句與For語句則屬于層級(jí)關(guān)系。

不過需要你注意的是:寫文章時(shí),【首行縮進(jìn)】一般是【兩個(gè)字符】;而在寫代碼時(shí),【縮進(jìn)】代表的是【四個(gè)空格】或【一個(gè)Tab鍵】。

好,回到案例。循環(huán)語句寫完后我們來看看運(yùn)行效果??梢钥吹郊恿搜h(huán)之后,msgbox出現(xiàn)了三次循環(huán)。修改循環(huán)次數(shù)為5,運(yùn)行結(jié)果便出現(xiàn)了5次。這便是循環(huán)的基礎(chǔ)使用。

接下來,我們將循環(huán)加入表格之中,用于復(fù)制整個(gè)送貨單。從表格中可以看出,一共有51條數(shù)據(jù),也就是說,我們需要51個(gè)送貨單。想要循環(huán)復(fù)制粘貼51個(gè)送貨單,很簡(jiǎn)單,只需要寫出【For x = 1 to 51】就可以了。

但是這樣會(huì)有一個(gè)問題,我們先來看看問題所在。為了方便測(cè)試,我先設(shè)置3次循環(huán)。這里可以看出,程序一直在同一個(gè)位置粘貼,與我們想要的效果不同。

我們想要的效果是,粘貼了一個(gè)送貨單后,隔一行再粘貼一個(gè)。導(dǎo)致結(jié)果與預(yù)期不同的原因是,我們?cè)诔绦蛑兄付嗽趩卧馎8處粘貼,所以導(dǎo)致一直重復(fù)在同一個(gè)位置粘貼。那么,如何能讓程序智能的知道隔一行粘貼呢?

觀察一下表格,可以發(fā)現(xiàn)第一個(gè)送貨單一共占了16行,隔一行粘貼的話,便是在第18行開始粘貼。也就是說,我們的循環(huán)粘貼每一次都要留出17行的空間才能不發(fā)生錯(cuò)位的情況。

明白了一個(gè)送貨單需要17行的空間后,我們需要做的便是讓程序知道,完成一次粘貼后,隔17行再進(jìn)行粘貼。這時(shí)候,我們就可以使用變量。

變量中的數(shù)據(jù)可以是一直變化的,這里,我們創(chuàng)建一個(gè)變量a。設(shè)置變量的初始值為a = 1,變量的值可以根據(jù)循環(huán)的每一次次數(shù)發(fā)生改變。每一次循環(huán),我們讓變量, + 17。

這樣一來,第一次循環(huán),a的值是18,第二次循環(huán),變量a的值是33。以此類推。然后我們將變量a的值,用連接符號(hào)【&】與單元格連接起來。這樣開始循環(huán)的話,第一次循環(huán),單元格A18區(qū)域被選中,第二次循環(huán),單元格A33區(qū)域被選中,以此類推來解決之前出現(xiàn)的重復(fù)位置粘貼的問題。

設(shè)想完畢后,我們編寫代碼來測(cè)試效果。

首先我們聲明變量a為數(shù)字類型,然后設(shè)置變量a的初始值為0,在循環(huán)中讓變量a隨著循環(huán)的次數(shù)實(shí)現(xiàn)變量a的增值,每一次增加17。最后,將變量a與單元格區(qū)域用連接符號(hào)進(jìn)行連接【&】。編寫完畢后,把循環(huán)次數(shù)加大到51次,看看運(yùn)行效果,測(cè)試程序效果。

  • 代碼

  • 運(yùn)行效果

從運(yùn)行效果可以看出。目前程序已經(jīng)完成了我們想要的送貨單的粘貼效果。那么,現(xiàn)在只剩下了一個(gè)問題,那便是,如何讓程序判斷原始數(shù)據(jù)表格,自動(dòng)填充數(shù)據(jù)?

帶著這個(gè)問題,我們來觀察一下原始數(shù)據(jù)表格。在表格中,我們想要的是,程序可以自動(dòng)從第一行往下讀取每一行的數(shù)據(jù),從而填充到每一張送貨單之中。

仔細(xì)觀察表格,以客戶名稱為例,程序?qū)?huì)從E5單元格出發(fā),依次向下,從E5到E6。再從E6到E7。這時(shí)候你會(huì)發(fā)現(xiàn)一個(gè)規(guī)律,那便是列不變,行在變。且每一次行的變化是在原先的單位上+1。

發(fā)現(xiàn)規(guī)律之后,解決問題就簡(jiǎn)單了許多。同樣的,我們可以用變量來解決這個(gè)問題。設(shè)置一個(gè)【變量b】。

這里,我們也可以將它放置于循環(huán)之中,每一次循環(huán),變量便根據(jù)循環(huán)的次數(shù)進(jìn)行遞增。代入到單元格中,便是,第一次循環(huán),單元格B5被選中,第二次循環(huán)單元格B6被選中。以此類推。

根據(jù)這種設(shè)想,我們來編寫代碼。先聲明變量B為整數(shù)類型。然后,將b放入循環(huán)之中,每一次的循環(huán),b的值都會(huì)根據(jù)循環(huán)遞增。以客戶名稱為例,代入變量b。根據(jù)這種設(shè)想,我們來編寫代碼。

先聲明變量客戶為文本類型,變量b為整數(shù)類型。然后,將b放入循環(huán)之中,每一次的循環(huán),b的值都會(huì)根據(jù)循環(huán)遞增。以客戶名稱為例,代入變量b。再將客戶的值賦值給送貨單對(duì)應(yīng)的區(qū)域即可。運(yùn)行程序,看看效果。

  • 代碼

  • 運(yùn)行效果

從運(yùn)行結(jié)果可以看出,程序完成了我們預(yù)期的效果,將原始數(shù)據(jù)(銷項(xiàng)發(fā)票)表格中的數(shù)據(jù)填入送貨單并批量生成了51份。在這個(gè)程序之中,我們使用的每一套語句都是基礎(chǔ)語句,并沒有任何高級(jí)的語法,所以代碼量偏多。

目前的程序并不完美,因?yàn)樗拓泦坞m然批量生成,但未進(jìn)行匯總,最終的效果應(yīng)該是根據(jù)每一個(gè)客戶的公司名,而產(chǎn)出一張送貨單。關(guān)于這一部分的操作因?yàn)闀?huì)涉及到VBA中一些復(fù)雜的語法,希望在掌握循環(huán)語句后再進(jìn)行學(xué)習(xí),所以在下期會(huì)詳細(xì)講解。

我們下期再見啦~記得下載表格文檔,然后跟著做一遍,掌握基礎(chǔ)哦~

練習(xí)表格下載地址:https://share.weiyun.com/WzIXUE7Q













【用實(shí)戰(zhàn)學(xué)VBA】拒絕重復(fù)操作,VBA按固定格式批量輸出,并沒有那么難的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
哈巴河县| 林口县| 筠连县| 武功县| 老河口市| 湾仔区| 岳池县| 阿拉善盟| 全南县| 天等县| 岐山县| 天峨县| 顺义区| 云南省| 靖安县| 高安市| 宁强县| 北安市| 舞钢市| 宁德市| 白城市| 金湖县| 双柏县| 龙岩市| 正宁县| 桂平市| 安仁县| 成安县| 扎鲁特旗| 黔江区| 昭觉县| 黄梅县| 灌云县| 眉山市| 宁南县| 嘉鱼县| 六枝特区| 静乐县| 临漳县| 沈丘县| 惠东县|