根据条件复制某些Excel列

时间:2014-01-14 11:02:35

标签: excel vba button range criteria

我做的第一件事是创建一个按钮,使用此代码复制某些单元格:

  

工作表(" Sheet1")。范​​围(" A:A,B:B,D:D")。复制_   它运作良好。

其次,我发现代码会根据一个标准连续复制所有细节,在这种情况下,如果有一个" A"在"位置"列。

  

Private Sub ENTIREROW_Click()   '子copyrows()

     

Dim i As Range,Cell as Object

     

设置i =范围(" D:D")'用包含您的真/假值的范围替换

     

我的每个细胞

   If IsEmpty(Cell) Then
       Exit Sub
   End If

   If Cell.Value = "A" Then
       Cell.ENTIREROW.Copy
       Sheet2.Select 'Substitute with your sheet
       ActiveSheet.Range("A65536").End(xlUp).Select
       Selection.Offset(1, 0).Select
       ActiveSheet.Paste
   End If
     

下一步

     

End Sub

Spreadsheet data

我的问题是,如何复制指定列(A,B,D)中的所有信息,其中有一个" A"在"位置"在一个按钮。

此外,这是我的示例数据,我将实际使用它的表格有34列要复制。当您不想要整个序列时,是否有更有效的方法来设置范围,除了C列中的数据之外的其他所有内容?

提前感谢并为我的解释技巧道歉。

1 个答案:

答案 0 :(得分:0)

一种方式可能是:

  • 过滤您的来源
  • 隐藏C栏
  • 使用.PasteSpecial xlPasteValues将结果复制到目标
  • 取消隐藏源表上的C列
  • 删除自动过滤器

使用xlPasteValues仅粘贴来自源的可见单元格 - 因此没有列C

然后代码如下:。

Sub CopyRows()
    With Sheets(1).Range([A2], [A2].SpecialCells(xlLastCell))
        [A1].AutoFilter
        .AutoFilter Field:=4, Criteria1:="A"
        [C:C].EntireColumn.Hidden = True
        .Copy
        [C:C].EntireColumn.Hidden = False
    End With
    With Sheets(2)
        If .Cells(Sheets(2).Rows.Count, 1).End(xlUp) = "" Then 'it's a clean sheet
            .Cells(Sheets(2).Rows.Count, 1).End(xlUp).PasteSpecial Paste:=xlPasteValues
        Else
            .Cells(Sheets(2).Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
        End If
    End With
    Application.CutCopyMode = False
    Sheet1.[A1].AutoFilter
End Sub