从已过滤的表中复制/粘贴整列

我写了一个macros,它将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的每个单元格填充(即理论数据)时工作得很好。 但是,使用真实世界的数据时,这些单元格中的一些将是空白的。 在这种情况下,macros将正确复制和粘贴x值,但只会复制并粘贴第一个y值。 我认为这些空白是造成这个问题的原因,但是为什么如果它们被过滤掉?

比以下可能需要更多的细节:
有问题的数据是发动机振动。 列C是频率,E是振幅,F是类别(“NFR”是指振动频率与发动机速度匹配)。 我们使用的FFT软件将原始数据(以CSV格式)作为等距(线性比例)频率及其幅度的列表进行分析。 我的macros的第一部分按频率按倍频带(对数尺度)sorting。 取决于采样率,可能有更多的频带比低频率的原始数据点; 这就是为什么有些行是空白的。 我希望我的macros能够忽略空白,以便它可以在任何采样率下logging的任何数据集上工作。

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