Excel宏将特定的一行单元格从一个工作表剪切到另一个工作表

时间:2013-06-25 19:16:17

标签: excel excel-vba vba

我有一个标题为CASES-PENDING的工作表,包含许多行数据。我每天将特定行的开始单元格的状态更改为“已完成”(从“待定”更改)。而不是必须削减该行并粘贴我的其他CASES-DONE标题工作表,我想要一个宏来做到这一点。 我想在更改几行数据的状态后运行宏,从“挂起”到“完成”。然后必须将所有这些行剪切并粘贴到另一个工作表上。 那可能吗? 非常感谢你们!

2 个答案:

答案 0 :(得分:0)

这只是在黑暗中刺伤,但我最近一直处理类似的事情。

Dim LastRow As Long
Range("1:1").AutoFilter Field:=(Row you have "Done" in), Criteria1:="Done"
LastRow = Cells(Rows.Count, 3).End(xlUp).Row
Range("CellRangeYouNeedCopied" & LastRow).Copy Destination:=Sheets("SheetX").Range(X,Y)

基本上,这只会过滤掉其中包含DONE的行,并将它们粘贴并粘贴到您决定命名的其他工作表上。只记得替换所有变量。我现在还很新,所以我可能错了,但值得一试!

编辑:您也可以将其记录为宏,然后使用Long变量更改范围以使其变量。

答案 1 :(得分:0)

您也可以这样做。比AutoFilter解决方案更多的代码,但可能更灵活。

Sub MoveDoneRows()
  Dim nStatusCol As Integer
  nStatusCol = 1

  Dim i As Integer
  i = 2

  ' select first row to insert rows into DONE sheet
  Dim nInsertRow As Integer
  Sheets("CASES-DONE").Select
  Range("A1").Select
  Selection.End(xlDown).Select
  nInsertRow = ActiveCell.Row + 1

  ' move rows with status done
  Dim sStatus As String
  Dim sPasteRow As String
  sStatus = Sheets("CASES-PENDING").Cells(i, nStatusCol).Value
  While sStatus <> ""
    If sStatus = "done" Then
      ' cut the current row from PENDING sheet
      sPasteRow = i & ":" & i
      Sheets("CASES-PENDING").Select
      Rows(sPasteRow).Select
      Selection.Cut

      ' paste into DONE sheet
      Sheets("CASES-DONE").Select
      Cells(nInsertRow, nStatusCol).Select
      ActiveSheet.Paste
      nInsertRow = nInsertRow + 1

      ' delete empty row from PENDING sheet
      Sheets("CASES-PENDING").Select
      Rows(sPasteRow).Select
      Selection.Delete Shift:=xlUp
    Else
      i = i + 1
    End If
    sStatus = Sheets("CASES-PENDING").Cells(i, nStatusCol)
  Wend
End Sub