基于列值的行选择自动化

时间:2013-05-22 21:33:26

标签: excel excel-vba vba

我有一个像这样的excel文件:

Key_Col Column Column
A       foo    bar
A       foo    bar
A       foo    bar
B       foo    bar
B       foo    bar
Z       foo    bar
Z       foo    bar
Z       foo    bar
Z       foo    bar

我想选择共享相同Key_Col的所有行,然后将其复制并粘贴到新工作表中。例如,我想选择所有三个' A'行,都是' B'行,以及所有4' Z'行,并将每个行复制到一个单独的工作表中。

我刚用A,B和Z作为例子。实际上,键列中有几个不同的值,每个值可变。我还没有在Google上找到很多优秀的VBA教程。在任何其他编程语言中,我想我只会使用一个双循环,其中内部循环,而current_key等于initial_key,然后继续前进到序列中的下一个唯一键。

1 个答案:

答案 0 :(得分:0)

这应该可以做,有些事情需要注意:

  • StartSelect是您要开始的行。
  • Pastesheet是您要开始粘贴的工作表索引。
  • Sourcesheet是包含您数据的工作表。
  • 它会一直运行,直到它变成一个空单元格。
  • 如果纸张用完,它会创建新的空纸。
  • 我假设你想要第1列,更改它,将(startselect,1)更改为你的列。

    Dim StartSelect As Integer
    Dim EndSelect As Integer
    Dim PasteSheet As Integer
    Dim SourceSheet As Integer
    
    Sub Macro1()
    StartSelect = 1
    PasteSheet = 2
    SourceSheet = 1
    
    While Sheets(SourceSheet).Cells(StartSelect, 1) <> ""
        EndSelect = StartSelect
        While Sheets(SourceSheet).Cells(StartSelect, 1) = Sheets(SourceSheet).Cells((EndSelect+1), 1)
            EndSelect = EndSelect + 1
        Wend
        Sheets(SourceSheet).Rows(StartSelect & ":" & EndSelect).Copy
        If PasteSheet > Sheets.Count Then Sheets.Add After:=Sheets(Sheets.Count)
        Sheets(PasteSheet).Paste
        PasteSheet = PasteSheet + 1
        StartSelect = (EndSelect + 1)
    Wend
    
    End Sub
    
相关问题