Excel 从筛选范围复制单元格,其中只有一行
我正在尝试从筛选范围内的列复制数据。过滤的行数总是不同的。第一行是标题 我在用这个Excel 从筛选范围复制单元格,其中只有一行,excel,vba,Excel,Vba,我正在尝试从筛选范围内的列复制数据。过滤的行数总是不同的。第一行是标题 我在用这个 ThisWorkbook.Sheets(1).Range("N2:N" & ThisWorkbook.Sheets(1).Range("N" & ThisWorkbook.Sheets(1).Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy 当过滤的行数大于1时,这种方法可以正常工作。但是当只有一个过滤行(应该是N2:
ThisWorkbook.Sheets(1).Range("N2:N" & ThisWorkbook.Sheets(1).Range("N" & ThisWorkbook.Sheets(1).Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy
当过滤的行数大于1时,这种方法可以正常工作。但是当只有一个过滤行(应该是N2:N2)时,它将复制整个使用范围
感谢您的建议。为了正确处理过滤后的数据,您应该遵循以下模式:
Sub FilterRange()
Dim rngTable As Range '//Holds: header + data
Dim rngData As Range '//Holds: only data
Dim rngFiltered As Range '//Holds: filtered range
'// Our range (data + header)
Set rngTable = [N1:N100]
'// Get data only
With rngTable
Set rngData = .Offset(1).Resize(.Rows.Count - 1)
End With
'// Filter range
rngTable.AutoFilter Field:=1, Criteria1:="1"
'// Catch error if no values are filtered
On Error Resume Next
Set rngFiltered = rngData.SpecialCells(xlCellTypeVisible)
'// Check if filtering was successful
If Err = 0 Then
'// Do some actions (for instance, copy to Sheet2)
rngFiltered.Copy Sheets("Sheet2").Cells(1)
Else
'// No filtered range
End If
'// Get back to error raising
On Error GoTo 0
End Sub
在复制范围之前,可以进行测试以确保有比标题行更多的可见行。将范围设置为变量,然后计算范围内可见单元格的数量,以确保有行要复制。此外,正如JvdV指出的,您应该使用
N1
作为开始。在一个范围内复制可见单元格时,应始终使用<代码> Office < /Cord>以确保不复制标题行,以及<代码> Resiths< /Cord>,以确保由于偏移,不会在底部复制空白单元格。下面是一个如何完成任务的基本示例
Dim rng As Range
Set rng = ThisWorkbook.Sheets(1).Range("D1:D" & ThisWorkbook.Sheets(1).Range("D" & ThisWorkbook.Sheets(1).Rows.Count).End(xlUp).Row)
If rng.SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
rng.Resize(rng.Cells.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy
End If
AutoFilter
在没有点击的情况下无法正常工作(您应该从N1
>中进行筛选,假设它是标题)。也许这篇文章给了你们一些启示。但若我只想从一列复制数据呢?(表示一个单元格,因为它将只过滤一行)@sproust如果需要筛选范围中的第一个单元格,则可以调用:Set rngFirstCell=rngFiltered(1)
(如果有一列)。@sproust如果有五列,则需要从第三列中获取第一个单元格,然后:Set rngFirstCell=rngFiltered.Cells(1,3)
。在我的情况下效果更好。也谢谢你。