Q:我在一個(gè)主工作表中導(dǎo)入并存放數(shù)據(jù),想要將這些數(shù)據(jù)分別轉(zhuǎn)移到不同的工作表中,如所示,在工作表Data中存放著各超市的銷售數(shù)據(jù),現(xiàn)在要將這些數(shù)據(jù)分別移至具有與超市名稱同名的工作表中,即“東區(qū)超市”中的數(shù)據(jù)全部移至工作表“東區(qū)超市”中,對(duì)于“北區(qū)超市”和“西區(qū)超市”也是如此。如何使用VBA代碼實(shí)現(xiàn)一次轉(zhuǎn)移數(shù)據(jù)?
A:可以使用下面的代碼實(shí)現(xiàn),大多數(shù)代碼的功能見代碼中的注釋。
SubCopyDataToWorksheet()
‘聲明代表存放數(shù)據(jù)工作表的變量
Dim strSourceSheet As String
‘聲明代表要接收數(shù)據(jù)的工作表的變量
Dim strDestinationSheet As String
‘聲明代表工作表最后一行的變量
Dim lngLastRow As Long
‘存放數(shù)據(jù)的工作表名
strSourceSheet = “Data”
‘選取數(shù)據(jù)工作表
Sheets(strSourceSheet).Visible = True
Sheets(strSourceSheet).Select
‘選取與接收數(shù)據(jù)的工作表同名的單元格
Range(“B2″).Select
‘選取的單元格不為空,則繼續(xù)循環(huán)
Do While ActiveCell.Value <>””
‘當(dāng)前單元格值賦給工作表名變量
strDestinationSheet = ActiveCell.Value
‘選取當(dāng)前單元格所在的數(shù)據(jù)行
ActiveCell.Offset( , -1).Resize(1,ActiveCell.CurrentRegion.Columns.Count).Select
‘復(fù)制數(shù)據(jù)行
Selection.Copy
‘選取接收數(shù)據(jù)的工作表
Sheets(strDestinationSheet).Visible =True
Sheets(strDestinationSheet).Select
‘獲取當(dāng)前工作表最后一行
lngLastRow =LastRowInOneColumn(“A”)
‘選取工作表最后一行之后的空單元格
Cells(lngLastRow + 1, 1).Select
‘粘貼數(shù)據(jù)
Selection.PasteSpecial xlPasteValues
‘去除復(fù)制后單元格框外的虛線
Application.CutCopyMode = False
‘選取數(shù)據(jù)工作表成為當(dāng)前工作表
Sheets(strSourceSheet).Select
‘將當(dāng)前單元格移至下一個(gè)與接收數(shù)據(jù)的工作表同名的單元格
ActiveCell.Offset(1, 1).Select
Loop
End Sub
‘獲取工作表中最后一行行號(hào)
Public FunctionLastRowInOneColumn(col)
Dim lastRow As Long
With ActiveSheet
lastRow = .Cells(.Rows.Count,col).End(xlUp).Row
End With
LastRowInOneColumn = lastRow
End Function
說明:在示例工作表Data中,我們將各個(gè)超市分別放在一起。在實(shí)際導(dǎo)入數(shù)據(jù)時(shí),如果相同名稱的數(shù)據(jù)不在一起也沒有關(guān)系。當(dāng)然,你可以使用排序功能將它們放置在一起。