使用过滤表中的空白复制/粘贴整个列

时间:2014-12-31 19:12:17

标签: excel vba excel-vba

我编写了一个宏,可以将CSV文件中的数据导入到表格中,过滤除了一个类别以外的所有内容,复制剩下的内容,然后将其粘贴到不同的工作表上。

    Set rNew = NewWS.Range("M2") 'set cell where data will be pasted
    rBand.AutoFilter Field:=6, Criteria1:="NFR" 'in table "rband", filter out all but NFR category
    If WorksheetFunction.Count(rBand.Cells.SpecialCells(xlCellTypeVisible)) <> 0 Then
        Set rData = Generator.Sheets("Fband").Range("E2") 'select first y value
        Set rData = Range(rData, rData.End(xlDown)) 'select range of y values
        rData.Copy
        rNew.PasteSpecial
        Set rData = Generator.Sheets("Fband").Range("C2") 'select first x value
        Set rData = Range(rData, rData.End(xlDown)) 'select range of x values
        rData.Copy
        NewWS.Range("L2").PasteSpecial
    End If

当填写表格中列E和F的每个单元格(即理论数据)时,此代码可以很好地工作。但是,在使用真实世界数据时,其中一些单元格将为空白。在这种情况下,宏将正确复制和粘贴x值,但只会复制并粘贴第一个y值。我认为空白是造成问题的原因,但如果它们被过滤掉,为什么会这样呢?

以下可能需要的详细信息:
有问题的数据是发动机振动。 C列是频率,E是幅度,F是类别(“NFR”表示振动频率与发动机速度匹配)。我们使用的FFT软件将原始数据(CSV格式)吐出为等间距(线性标度)频率及其幅度的列表。我的宏的第一部分通过倍频带(按对数刻度)按频率对这些进行排序。根据采样率,可能存在比低频原始数据点更多的频段;这就是为什么有些行是空白的。我希望我的宏能够忽略空白,以便它可以在任何采样率记录的任何数据集上工作。

1 个答案:

答案 0 :(得分:3)

End(xlDown)将您带到列中的第一个空白处。因此,您不会总是捕获整个列。为此,请尝试以下代码:

Dim LastRow As Long
Set rNew = NewWS.Range("M2") 'set cell where data will be pasted
rBand.AutoFilter Field:=6, Criteria1:="NFR" 'in table "rband", filter out all but NFR category
If WorksheetFunction.Count(rBand.Cells.SpecialCells(xlCellTypeVisible)) <> 0 Then
    LastRow = Generator.Sheets("Fband").Range("E" & Rows.Count).End(xlUp).Row
    Set rData = Generator.Sheets("Fband").Range("E2:E" & LastRow) 'select range of y value
    rData.Copy
    rNew.PasteSpecial
    LastRow = Generator.Sheets("Fband").Range("C" & Rows.Count).End(xlUp).Row
    Set rData = Generator.Sheets("Fband").Range("C2:C" & LastRow) 'select range of x value
    rData.Copy
    NewWS.Range("L2").PasteSpecial
End If