从第二列开始将行从一个工作表传输到另一个工作表

时间:2015-11-21 03:49:31

标签: excel-vba vba excel

我有一个会员名单,我正在为俱乐部的一章保留。我没有删除那些不再在章节中的成员,而是决定尝试创建一个宏来查看A列中的章节名册主表(仍在章节中?)中的“是”值,然后传输所有行将yes值改为另一张名为“Chapter Roster Actual”的表格。

宏工作但我只想将列B转移到O而不包括列A.

我意识到一行实际上告诉宏复制“整行”并且我试图让它只复制一个范围但是在这样做时,它忽略了只复制行A的行的请求'价值。我也有范围线,所以你可以看到我尝试过的。

我还需要弄清楚如何不将行附加到先前复制的行。所以,我想它应该清除之前填充的行,然后写下新的行。

这是宏:

Sub ActualRoster()
  Dim myRow, LastRow
  myworksheet = "Chapter Roster Master"
  LastRow = Sheets(myworksheet).Range("A" & Rows.Count).End(xlUp).Row

  For myRow = 3 To LastRow
    If Sheets(myworksheet).Cells(myRow, "A").Value = "Yes" Then
      Sheets(myworksheet).Cells(myRow, "A").EntireRow.Copy Destination:=Sheets("Chapter Roster Actual").Range("A" & Rows.Count).End(xlUp).Offset(1)
      'Sheets(myworksheet).Range("B3:O32").Copy Destination:=Sheets("Chapter Roster Actual").Range("A3:O32").End(xlUp).Offset(1)*
    End If
  Next myRow
End Sub

2 个答案:

答案 0 :(得分:0)

在您尝试的内容中,您正在复制从3开始直到32的所有行,即使当前行只有'是'

以下工作正常

Sub ActualRoster()
    Dim myRow, LastRow
    myworksheet = "Chapter Roster Master"
    Sheets("Chapter Roster Actual").Range("A3").CurrentRegion.Offset(2,0).ClearContents
    Sheets(myworksheet).Activate
    LastRow = Sheets(myworksheet).Range("A" & Rows.Count).End(xlUp).Row

    For myRow = 3 To LastRow
        If Sheets(myworksheet).Cells(myRow, "A").Value = "Yes" Then

            Sheets(myworksheet).Range(Cells(myRow,"B"),Cells(myRow,"O")).Copy Destination:=Sheets("Chapter Roster Actual").Range("A" & Rows.Count).End(xlUp).Offset(1)

        End If
    Next myRow
End Sub

根据评论中的建议,您还可以尝试过滤主数据并一次性复制所有必需的数据。作为一个起点,记录一个宏,您将感受到如何做到这一点。回来改进录制的代码。

答案 1 :(得分:0)

您可以使用以下代码如果您想尝试使用过滤器而不是迭代所有记录。您可以检查哪种方法最适合您并使用。

Sub ActualRoster()
    Dim myRow, LastRow
    myworksheet = "Chapter Roster Master"
    LastRow = Sheets(myworksheet).Range("A" & Rows.Count).End(xlUp).Row

    Range("A2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.AutoFilter
    Range("A2").Select
    ActiveSheet.Range("A2", Range("A2").End(xlToRight)).AutoFilter Field:=1, Criteria1:="Yes"
    Range("A2").End(xlToLeft).Select
    ActiveCell.Offset(1, 0).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy Destination:=Sheets("Chapter Roster Actual").Range("A" & Rows.Count).End(xlUp).Offset(1)
End Sub

注意:此方案可能还有更优化的代码 提示:您可以通过打开VBA和Excel(并排模式)来了解宏的工作原理,记录宏并观察生成的代码。

相关问题