暑假期间,我们针对一些学生进行了一项调查,以表明他们对一些俱乐部的兴趣。通过扫描回答的方式,我们为每个俱乐部提供了一列,并在列中的每个单元格中为表示对该特定俱乐部感兴趣的人(行)分配了一个“1”。第一列是他们的电子邮件地址。
最终目标是过滤数据,以便我们可以获得每个俱乐部感兴趣的人员的电子邮件 - 然后将那些电子邮件以单独的文件形式发送给俱乐部以进行营销。
去年我通过对每个俱乐部进行“过滤”来做到这一点,将电子邮件栏中的所有电子邮件复制到一个新文档中,保存它,然后将文件发送给各自的俱乐部。
使用上面的例子,我们为俱乐部 1 有一个文件,其中包含电子邮件 1、电子邮件 3 和电子邮件 7;为俱乐部 2 有一个文件,其中包含电子邮件 5,等等。有 200 多个俱乐部和 2000 多封电子邮件,你可以想象这是多么耗时。
一位同事建议数据透视表可能会有所帮助,我们对此进行了一些尝试,看看是否有更简单的解决方案......但我们找不到可以显着减少浏览数据所需时间的解决方案。
想知道是否有人有任何想法或建议?也许我的解决方案已经是最快的了?
答案1
您可以使用 VBA 为每个俱乐部创建单独的文件。下面的过程FilterData
为每个俱乐部创建一个文件,该文件位于与包含 VBA 代码的文件相同的目录中,该文件还应包含名为 的工作表中的响应Responses
。
Option Explicit
Sub FilterData()
Dim Responses As Worksheet
Dim Column As Long
Set Responses = ThisWorkbook.Worksheets("Responses")
Column = 2
Do While Responses.Cells(1, Column).Value <> ""
With Workbooks.Add(xlWBATWorksheet)
With .Worksheets(1)
Responses.Cells.Copy .Cells
.Columns(Column).AutoFilter Field:=1, Criteria1:="<>1"
.Rows(2).Resize(.Rows.Count - 1).Delete Shift:=xlUp
.Columns(2).Resize(, .Columns.Count - 1).Delete Shift:=xlShiftToLeft
End With
.Close SaveChanges:=True, Filename:=ThisWorkbook.Path & "\" & Responses.Cells(1, Column).Value
End With
Column = Column + 1
Loop
End Sub