一起學習,一起進步~~ word的郵件合并功能,相信大家都非常的熟悉了,一些固定模板的批量打印功能都會用到這樣的操作,但是很多時候我們的數(shù)據(jù)是Excel中的,那么我們是否能夠在Excel中實現(xiàn)類似于word中這種數(shù)據(jù)b合并的功能呢?
其實這樣的話,就有點類似于我們之前學過的Excel的數(shù)據(jù)匯總的逆推,數(shù)據(jù)的拆分了,按照計劃,我們很快就會接觸到更多類型的數(shù)據(jù)的拆分了,我們這里就先熱個場,提前接觸下數(shù)據(jù)的拆分,之所以在這里說數(shù)據(jù)拆分,主要還是因為他的操作也類似于在多個工作表中同時進行數(shù)據(jù)填充,和我們之前的章節(jié)又有一點關系,所以正好有承上啟下的作用 來看看我們的場景 現(xiàn)在我們手上的這個工作表里面有兩個表,一個就是成績總表,一個就是模板,類似于我們通知的模板, 我們現(xiàn)在需要將總成績的表中所有的同學的成績按照模板中指定的樣式進行填充,并且形成一個人一個工作表的樣式來進行打印,并交給學生查看。如果手動復制粘貼,這個工作量就非常的大了,因為不僅僅是復制粘貼,還要找到正確的位置,所以這里我們需要使用VBA來幫助我們實現(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ù)源我的設計是不含表頭的,因為在這里表頭并沒有任何的用處,我們可以根據(jù)實際的需要進行調整數(shù)據(jù)的位置 確定了數(shù)據(jù)源的范圍之后,程序就可以開始運作了,我們來看看最終的結果 我們選擇最后一個A22的成績來對比下,看看是否正確 完全是沒有問題的,非常的完美。
雖然說今天的代碼比較的長,但是理解之后就會覺得非常的簡單,我們來看看代碼的操作流程 Set rng = Application.InputBox("請選擇數(shù)據(jù)源,不含表頭", "數(shù)據(jù)源的確定", , , , , , 8) 首先我們確定數(shù)據(jù)源的范圍,這里前面也說明了不需要選擇表頭,大家可能比較的疑惑,不是應該對著表頭來填入數(shù)據(jù)嘛 我們來看看模板終端這些字段,我們都能夠在內容中找到數(shù)據(jù)源中找到具體的位置,并且格式都是固定的,這個時候我們反而不需要那么麻煩去通過表頭來選擇,直接通過固定的位置來選擇反而更加的快,而且代碼簡單 然后我們將數(shù)據(jù)源的每一行,裝入數(shù)組中,這樣每一行都是一個數(shù)組,我們只需要將數(shù)組中的內容填入新建的工作表中對應的位置就可以了。 可以看出來,數(shù)組中每個元素的順序正好就是每一行數(shù)據(jù)的順序,我們有了這個順序之后就可以根據(jù)字段在模板中的位置,來進行一一對應了。 姓名是在模板中的cells(4,3)的位置,而姓名在數(shù)組中是第一個,所以是arr(1,1) 最終結果就是 sthn.Cells(4, 3) = arr(1, 1) 其他的都是按照這個標準依次類推,就算是這個過程中出現(xiàn)了某些字段沒有按照這個順序來的,也不要緊,我們直接在代碼中進行更改就可以了。 更改成對應的位置 假設我們這里講化學和物流的位置更換下 我們也僅僅是需要更換下代碼中的順序就可以了 ============================= 好了,明晚21:00,準時再見! |
|
來自: Excel和VBA > 《Excel和VBA知識》