如何根据条件使用Excel VBA复制行

时间:2012-05-16 18:43:12

标签: excel-vba vba excel

我想根据一列中的以下条件将行从一个工作表复制到另一个工作表:

  1. 如果某行在列中包含值“AB”,则将该行复制到工作表中,但如果下一行在同一列中具有相同的值,请忽略此行并继续
  2. 如果某行在列中包含值“NULL”,则将该行复制到工作表中 - 此处没有限制
  3. 我写了一些逻辑,但它没有用 - 这是相关的片段:

    If wks.Range("N" & CStr(LSearchRow)).Value = "NULL" Or Not _
    wks.Range("N" & CStr(LSearchRow)).Value = optionCode Then
    
        'Select row in master to copy
        Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
    
        Selection.Copy
    
        'Paste row into new worksheet in next row
        wksCopyTo.Select
    
        wksCopyTo.Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
    
        wksCopyTo.Paste
    
        optionCode = wks.Range("N" & CStr(LSearchRow)).Value
    
        'Move counter to next row
        LCopyToRow = LCopyToRow + 1
    
        'Remove blank rows
        wksCopyTo.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    
        'Go back to Master Sheet to continue searching
        wks.Select
    End If
    

    有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这是一个小Sub,你可以将你的Range参考和复制工作表上的Row传递给那个应该可以解决的问题。如果您无法弄清楚如何合并它,请稍微吹嘘您的代码,我会告诉您如何将其压缩。

Sub copyrow(rng As Range, LCopyToRow As Long)

If rng = vbNullString Then rng.EntireRow.Copy wksCopyTo.Cells(LCopyToRow, 1)

If rng.Offset(1) <> rng Then rng.EntireRow.Copy wksCopyTo.Cells(LCopyToRow, 1)

End Sub

另外,在上面的代码中,编写VBA时无需使用select。它更慢,效率更低。 上面的第5到14行(计算空白行和注释)可以像这样编写

Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Copy wksCopyTo.Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow))