道歉这是经典的新手问题,但我找不到具体的答案。
我对Excel VBA和一般的编程都很陌生。我要做的是从一个大的excel表中选择一个大致采用这种格式的数据子集:
Name Data One Data Two Data N ---------------------------------------------------- Person One x x x Person One x x x Person One x x x Person Two x x x Person Two x x x Person Three x x x
每隔几天我会有一张新的表格来处理,但我不知道会有多少人会被列入其中,或者每个人的参赛人数会有多少。
我的最终目标(现在......)是获取Person One的所有数据并将其复制到名为Person One的新工作表(在同一工作簿中),将Person Two的所有数据复制到新工作表叫做Person Two,等等。
如果我对SQL的基本理解是正确的,我将能够以SELECT data FROM table WHERE Person = Person One的形式使用命令。
但是,我无法在Excel中找到一种简单的方法。我可以看到有一些方法可以通过使用循环遍历行来记录数据从“Person One”变为“Person Two”然后定义这些范围的点。
我还看到我可以使用AutoFilter功能选择我想要的数据 - 我可以在第二张纸上过滤第一列的唯一记录,然后在AutoFilter设置中循环显示每个人的名字。
我还想到,我可以使用循环来遍历第一列中的条目,并在每个条目下插入一个空白行,因此表选择函数将为每个人选择每个数据块。
有没有更好的方法来完成我的目标?我本来以为这种情况很常见,但要么它不是,要么我正在寻找错误的东西。
干杯!
斯蒂芬
答案 0 :(得分:4)
您可以使用ADO:
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
strFile = ActiveWorkbook.FullName
''Note HDR=No, then F1,F2 etc is used for column names
''If HDR=Yes, the names in the first row of the range
''can be used.
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
'Case sensitive
strSQL = "SELECT [Name],[Data One],[Data Two],[Data N] FROM [Sheet1$] " _
& "WHERE [Name]='Person 1'"
rs.Open strSQL, cn, 3, 3
Worksheets("Sheet2").Cells(2, 1).CopyFromRecordset rs
请注意,您可以选择不同的[名称]并在结果记录集中循环以获取每个人的工作表。