希望Excel在满足条件时剪切和粘贴一行信息

时间:2017-03-09 14:00:48

标签: excel excel-vba vba

我为我的合作伙伴的家庭企业设置了excel电子表格,她可以输入与加入业务的人员相关的数据。我希望将该行中的数据剪切并粘贴到单独的工作表中,具体取决于其中一个单元格中的条件。主要表格称为"工作区"。

如果第6行的人已同意加入该业务,那么"是"将被放置在单元格V6中。一旦输入了Yes,我的目标是将A:G列切割并粘贴到纸张上,然后加入#34;以及该行的其余部分被删除,最好是下面的行向上移动一行(如果可能的话)。数据将被粘贴到"加入"上的下一个空行。片材。

另一方面,如果第6行上的人表示他们不感兴趣,那么“不感兴趣”#34;将被放置在单元格H6中。一旦输入了不感兴趣的内容,我的目标是将A:G列切割并粘贴到工作表上并且#34;不感兴趣"以及该行的其余部分被删除,如上所述。

每次添加新名称时,是否也可以按字母顺序排列电子表格?数据的起始行是6。

我希望这一切都有意义,真的希望有人能够提供帮助。当涉及到公式时,我非常好,但不知道从哪里开始关于宏。

到目前为止,这是我的代码:

Sub Test()
For Each Cell In Sheets("Workspace").Range("V:V")
If Cell.Value = "Yes" Then
    matchRow = Cell.Row
    Rows(matchRow & ":" & matchRow).Select
    Selection.Copy

    Sheets("Joined").Select
    ActiveSheet.Rows(matchRow).Select
    ActiveSheet.Paste
    Sheets("Workspace").Select
End If
Next
End Sub

Current Spreadsheet

1 个答案:

答案 0 :(得分:1)

这是一个很好的起点。我在代码中添加了注释,以便您可以看到每行的内容。

此子项在第V列中搜索“是”,并将带有“是”的列的范围A:G复制到工作表中。然后它删除找到“是”的整行。

我想从这里你可以自己做第二部分“不接受”。

Sub Test()
    Dim MatchRow As Long, FirstRow As Long, LastRow As Long
    Dim Destination As Range

    Dim ws As Worksheet
    Set ws = Sheets("Workspace") 'define ws as sheet workspace (shortcut)

    FirstRow = 6 'First row with data below headline
    LastRow = ws.Cells(ws.Rows.Count, "V").End(xlUp).Row 'Get last used row in column V (so we don't need to go through the full column)

    Dim i As Long
    i = FirstRow
    Do While i <= LastRow 'start searching for "Yes" in FirstRow and end in LastRow
        If ws.Range("V" & i).Value = "Yes" Then
            MatchRow = ws.Range("V" & i).Row 'remember matched row number

            'find last free row in column A of sheet Joined and remember in Destination
            With Sheets("Joined")
                Set Destination = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0)
            End With

            'Copy range A:G from matched row to destination found above
            ws.Range("A" & MatchRow & ":G" & MatchRow).Copy Destination

            'Delete copied entire row
            ws.Rows(MatchRow).EntireRow.Delete

            'reduce LastRow by one (because we deleted one row)
            LastRow = LastRow - 1
        Else
            'go to next row
            i = i + 1
        End If
    Loop
End Sub