如下图示,有一份【回访登记表】:
回访登记表
现在希望按”受访人员“每人形成一张表格,如下图示:
回访记录表样式
最简便的方法是使用Word中的邮件合并功能,将上表的Excel表数据作为创建邮件合并的数据源。如何创建邮件合并,可以参见我的头条文章
在这里我们用VBA宏来解决这类问题。创建一个如下图示的“登记表”工作表,并在工作表窗口插入一个圆角矩形作为按钮,然后根据“登记表”中的信息自动填写根据“回访表模板”创建的工作表内容。这类自动生成工作表是一个Excel操作中常见的操作。
基本思想是:从如下图所示的”登记表“中逐行读取数据,复制【回访表模板】工作表为一个新的工作表,并以【受访人员】姓名命名,然后将“登记表”工作表中的数据填入到此相应的工作表中,这样每户信息形成了一张新的工作表。
回访表模板--工作表
我们可以用VBA宏来实现此操作。下面是用VBA宏来实现的的详细步骤,包括如何编写VBA代码来实现这一操作。
一、 打开Excel并启用开发者选项
首先,打开含有需要合并工作表的Excel工作簿。如果“开发者”选项卡未显示,请点击“文件” > “选项” > “自定义功能区”,在右侧勾选“开发者”复选框,然后点击“确定”。
二、 插入VBA模块
转到“开发者”选项卡,点击“Visual Basic”或者直接按【Alt F11】组合键打开VBA编辑器。然后在VBA项目浏览器中(通常位于左侧),右击工作簿名,选择“插入” > “模块”,创建一个新的模块,用于编写VBA代码。
三、 编写VBA代码
在新插入的模块中,粘贴以下VBA代码。
Sub myCopyToSheet()
Dim ws As Worksheet
totalRows = Range("A65536").End(xlUp).Row
For k = 3 To totalRows
'获取户主姓名
mainName = Sheets("登记表").Cells(k, 3).Text
Debug.Print mainName
'复制模板工作表到新工作表,并以户主姓名命名
Sheets("回访表模板").Copy After:=Sheets(Sheets.Count)
Set ws = Sheets(Sheets.Count)
ws.Name = mainName
'复制原表sheet1中相应信息到新添加的工作表中
Loading... = mainName
With Sheets("登记表")
Range("B2").Value = .Cells(k, 3) '受访人姓名
Range("D2").Value = .Cells(k, 4) '联系电话
Range("B3").Value = .Cells(k, 5) '回访人姓名
Range("D3").Value = FormatDateTime(.Cells(k, 2), vbLongDate) '回访时间
Range("B4").Value = .Cells(k, 6) '回访情况记录
Range("B5").Value = .Cells(k, 7) '备注
End With
Next
End Sub
四、运行VBA宏
返回Excel界面,右击按钮,在弹出的快捷菜单中选择“指定宏”,然后在“指定宏”对话框中选择“myCopyToSheet”宏,单击确定返回。鼠标单击按钮,即可得到用“受访人员”姓名命名的工作表,表内信息根据“登记表”中的信息填写。
如果不想要添加按钮,也可以点击“开发者”选项卡,点击“宏”。 在弹出的“宏”对话框中,选择myCopyToSheet,然后点击“运行”,即可得到每位受访者的记录表,效果如下图示:
形成以“受访人姓名”命名的系列工作表。
我是,关注我,持续分享更多的Excel知识与操作技巧。