当第一列中的单元格具有特定文本时,将行复制到新工作表

时间:2018-09-03 04:37:09

标签: excel vba copy-paste

仅当B列中的单元格具有特定值(即字符串)时,我才想从sheet1复制行。我使用了下面的代码,该代码似乎复制了行,但只是将空单元格粘贴到新表中。

我认为问题在于它正在寻找一个值,而不是一个字符串(字符串可以是一个值吗?)。我是否需要将单元格定义为字符串?很抱歉,如果这些是愚蠢的问题-编码新问题。

Sub copy_rows()
    Sheets.Add After:=Sheets(1)
    Sheets(2).Name = "New"
    For Each cell In Sheets(1).Range("B:B")
        If cell.Value = "banana" Then
            matchRow = cell.Row
            Rows(matchRow & ":" & matchRow).Select
            Selection.Copy
            Sheets("New").Select
            ActiveSheet.Rows(matchRow).Select
            ActiveSheet.Paste
        End If
    Next
End Sub

这是工作表1的示例:

apple     1     2     1
banana    1     3     5
carrot    1     1     1
banana    1     2     3

这是新表:

banana    1     3     5

banana    1     2     3

此外,我没有在代码中尝试此操作,但是如果行之间没有空格,那会很好。

谢谢

1 个答案:

答案 0 :(得分:0)

这是我上面编辑的代码,可用于处理您的示例数据。在运行包含工作表的工作簿时,请确保该工作簿处于活动状态。

Sub copy_rows()
'create the new sheet
Sheets.Add After:=Sheets(1)
Sheets(2).Name = "New"

'get the number of rows you need to check
Dim RowCount As Integer
RowCount = WorksheetFunction.CountA(Sheets(1).Range("A:A"))

'iterate over the rows
For r = 0 To RowCount - 1
this_cell = Sheets(1).Range("A1").Offset(r, 0)
    If this_cell = "bananas" Then
        'iterate over the columns and copy cells to new sheet
        For c = 0 To 3
            Sheets(2).Range("A1").Offset(x, c) = Sheets(1).Range("A1").Offset(r, c)
        Next c
    'counter for the offset to next row in new sheet
    x = x + 1
    End If
Next r
End Sub