VBA实现根据姓名拆分工作表
时间: 2024-02-01 22:14:26 浏览: 25
假设你有一个名为“原始数据”的工作表,其中包含所有员工的姓名和其他详细信息。现在你想要根据员工姓名将数据拆分成不同的工作表,每个工作表包含同一姓氏的所有员工信息。以下是一个简单的VBA代码实现这一操作:
```vb
Sub SplitDataByLastName()
Dim ws As Worksheet
Dim lr As Long, i As Long
Dim lastName As String
Set ws = ThisWorkbook.Worksheets("原始数据") '原始数据工作表名称
lr = ws.Cells(Rows.Count, 1).End(xlUp).Row '获取最后一行
For i = 2 To lr '从第二行开始循环
lastName = Split(ws.Cells(i, 1).Value, " ")(1) '获取姓氏
If Not WorksheetExists(lastName) Then '判断工作表是否存在,不存在则新建一个工作表
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = lastName
ws.Rows(1).Copy Destination:=ActiveSheet.Range("A1") '复制第一行标题到新建的工作表
End If
ws.Rows(i).Copy Destination:=Worksheets(lastName).Range("A" & Rows.Count).End(xlUp).Offset(1) '将该行数据复制到对应的工作表的最后一行
Next i
End Sub
Function WorksheetExists(shtName As String) As Boolean '判断工作表是否存在
WorksheetExists = False
On Error Resume Next
WorksheetExists = (Worksheets(shtName).Name <> "")
On Error GoTo 0
End Function
```
这段代码将逐一遍历原始数据工作表中的每一行,获取员工的姓氏,并将该行数据复制到以姓氏为名称的新工作表中。如果该姓氏的工作表不存在,则会创建一个新的工作表并将标题行复制到该工作表。最后,你将在工作簿中看到多个工作表,每个工作表包含同一姓氏的所有员工信息。