一起學(xué)習(xí),一起進(jìn)步~~
word的郵件合并功能,相信大家都非常的熟悉了,一些固定模板的批量打印功能都會(huì)用到這樣的操作,但是很多時(shí)候我們的數(shù)據(jù)是Excel中的,那么我們是否能夠在Excel中實(shí)現(xiàn)類似于word中這種數(shù)據(jù)b合并的功能呢?
代碼區(qū)
其實(shí)這樣的話,就有點(diǎn)類似于我們之前學(xué)過的Excel的數(shù)據(jù)匯總的逆推,數(shù)據(jù)的拆分了,按照計(jì)劃,我們很快就會(huì)接觸到更多類型的數(shù)據(jù)的拆分了,我們這里就先熱個(gè)場,提前接觸下數(shù)據(jù)的拆分,之所以在這里說數(shù)據(jù)拆分,主要還是因?yàn)樗牟僮饕差愃朴谠诙鄠€(gè)工作表中同時(shí)進(jìn)行數(shù)據(jù)填充,和我們之前的章節(jié)又有一點(diǎn)關(guān)系,所以正好有承上啟下的作用
來看看我們的場景
現(xiàn)在我們手上的這個(gè)工作表里面有兩個(gè)表,一個(gè)就是成績總表,一個(gè)就是模板,類似于我們通知的模板,
我們現(xiàn)在需要將總成績的表中所有的同學(xué)的成績按照模板中指定的樣式進(jìn)行填充,并且形成一個(gè)人一個(gè)工作表的樣式來進(jìn)行打印,并交給學(xué)生查看。如果手動(dòng)復(fù)制粘貼,這個(gè)工作量就非常的大了,因?yàn)椴粌H僅是復(fù)制粘貼,還要找到正確的位置,所以這里我們需要使用VBA來幫助我們實(shí)現(xiàn)這樣的功能。
Sub sssss()
Dim rng As Range, sth As Worksheet, sthn As Worksheet
Set rng = Application.InputBox("請選擇數(shù)據(jù)源,不含表頭", "數(shù)據(jù)源的確定", , , , , , 8)
For i = 1 To rng.Rows.Count
arr = rng.Rows(i)
Worksheets("模板").Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = arr(1, 1)
Set sthn = ActiveSheet
sthn.Cells(4, 3) = arr(1, 1)
sthn.Cells(4, 5) = arr(1, 2)
sthn.Cells(6, 4) = i
sthn.Cells(8, 4) = arr(1, 3)
sthn.Cells(9, 4) = arr(1, 4)
sthn.Cells(10, 4) = arr(1, 5)
sthn.Cells(11, 4) = arr(1, 6)
sthn.Cells(12, 4) = arr(1, 7)
sthn.Cells(13, 4) = arr(1, 8)
Next i
End Sub
看著代碼挺長,請示非常的簡單,中間一大段都是理解之后就非常的簡單了。
先來看下效果
首先我們需要選擇好數(shù)據(jù)源的范圍,這里的數(shù)據(jù)源我的設(shè)計(jì)是不含表頭的,因?yàn)樵谶@里表頭并沒有任何的用處,我們可以根據(jù)實(shí)際的需要進(jìn)行調(diào)整數(shù)據(jù)的位置
確定了數(shù)據(jù)源的范圍之后,程序就可以開始運(yùn)作了,我們來看看最終的結(jié)果
我們選擇最后一個(gè)A22的成績來對比下,看看是否正確
完全是沒有問題的,非常的完美。
代碼分析
雖然說今天的代碼比較的長,但是理解之后就會(huì)覺得非常的簡單,我們來看看代碼的操作流程
Set rng = Application.InputBox("請選擇數(shù)據(jù)源,不含表頭", "數(shù)據(jù)源的確定", , , , , , 8)
首先我們確定數(shù)據(jù)源的范圍,這里前面也說明了不需要選擇表頭,大家可能比較的疑惑,不是應(yīng)該對著表頭來填入數(shù)據(jù)嘛
我們來看看模板終端這些字段,我們都能夠在內(nèi)容中找到數(shù)據(jù)源中找到具體的位置,并且格式都是固定的,這個(gè)時(shí)候我們反而不需要那么麻煩去通過表頭來選擇,直接通過固定的位置來選擇反而更加的快,而且代碼簡單
然后我們將數(shù)據(jù)源的每一行,裝入數(shù)組中,這樣每一行都是一個(gè)數(shù)組,我們只需要將數(shù)組中的內(nèi)容填入新建的工作表中對應(yīng)的位置就可以了。
可以看出來,數(shù)組中每個(gè)元素的順序正好就是每一行數(shù)據(jù)的順序,我們有了這個(gè)順序之后就可以根據(jù)字段在模板中的位置,來進(jìn)行一一對應(yīng)了。
姓名是在模板中的cells(4,3)的位置,而姓名在數(shù)組中是第一個(gè),所以是arr(1,1)
最終結(jié)果就是
sthn.Cells(4, 3) = arr(1, 1)
其他的都是按照這個(gè)標(biāo)準(zhǔn)依次類推,就算是這個(gè)過程中出現(xiàn)了某些字段沒有按照這個(gè)順序來的,也不要緊,我們直接在代碼中進(jìn)行更改就可以了。 更改成對應(yīng)的位置
假設(shè)我們這里講化學(xué)和物流的位置更換下
我們也僅僅是需要更換下代碼中的順序就可以了
=============================
好了,明晚21:00,準(zhǔn)時(shí)再見!
聯(lián)系客服