我正在开展一个大型项目,但对VBA来说还是个新手。我想要做的部分工作要求我将预过滤数据集中的数据复制到新工作表中。从我在网上找到的,似乎最好的方法是使用.SpecialCells(xlCellTypeVisible).Copy
。不幸的是,这似乎对我没用。
目前,当代码运行时,它会将所有单元格值复制到新工作表,甚至是过滤或空白单元格。我的目标是让可见细胞复制。
这是我到目前为止的相关代码......
Sheets(dataSheetName).Range(yColumn & periodStart & ":" & yColumn & periodEnd).SpecialCells(xlCellTypeVisible).Copy
Sheets(VBASheetName).Range(ySourceColumn & VBAheaderRow + groupCount(groupIndex) + 1).PasteSpecial xlPasteValues
编辑:人们要求提供更多背景信息。此代码的目标是基于多个系列向图表添加趋势线。从我能找到的唯一方法是将数据合并到一个工作表中,然后可以使用斜率和截距公式来求解趋势线。当数据源未经过滤时,这似乎有效,但我希望用户能够过滤具有正确趋势线的数据。希望这是有道理的。
以下是我正在处理的数据的一小部分。有数百列和数千行,但数据是从这里拉出的:
数据集进一步细分为时间段,每个时间段都在不同的“组”中。用户可以以基本上无限的方式对其进行过滤,然后我希望将过滤后的数据复制到新工作表中,并将其添加到相应的组列中。源表的标题如下所示。
这最终将对用户隐藏,但数据将被复制到黄色单元格,然后斜率,截距和系列值被“保存”(复制到汇总表)并用于绘制趋势线。我之前的代码处于循环中,该循环遍历每个时间段并将数据(y源列和x源列)复制到“粘贴位置”图像中的正确列。对于每个创建的图形,也会重复此操作。
这是一段更大的代码。再次,这是一个巨大的子的一部分,我不想发布整个事情(除非有人真的想要它),但这里是代码的更大部分:
For periodIndex = 1 To 10
If graphPeriod = "Yes" Then
If XYShowTrendlines = "Yes" Then
'copies the values into the VBA worksheet to graph trendlines as series
Sheets(dataSheetName).Range(yColumn & periodStart & ":" & yColumn & periodEnd).SpecialCells(xlCellTypeVisible).Copy
Sheets(VBASheetName).Range(Split(Cells(1, (groupIndex * 2)).Address, "$")(1) & VBAHeaderRowXYGroupData + groupCount(groupIndex) + 1).PasteSpecial xlPasteValues
Sheets(dataSheetName).Range(xColumn & periodStart & ":" & xColumn & periodEnd).SpecialCells(xlCellTypeVisible).Copy
Sheets(VBASheetName).Range(Split(Cells(1, (groupIndex * 2) - 1).Address, "$")(1) & VBAHeaderRowXYGroupData + groupCount(groupIndex) + 1).PasteSpecial xlPasteValues
Worksheets(VBASheetName).Calculate
'copies the calculated x and y values to the summary table
Dim index As Integer
For index = 1 To 12
If IsError(Sheets(VBASheetName).Range(Split(Cells(1, ((index + (index Mod 3)) / 3) + 4).Address, "$")(1) & "3")) = False Then
If index Mod 3 = 0 Then
'slope and r-squared
Sheets(VBASheetName).Range(Split(Cells(1, (index / 3) + 4).Address, "$")(1) & "3:" & Split(Cells(1, (index / 3) + 4).Address, "$")(1) & "4").Copy
Else
'values
Sheets(VBASheetName).Range(Split(Cells(1, index - ((index - (index Mod 3)) / 3)).Address, "$")(1) & "10:" & Split(Cells(1, index - ((index - (index Mod 3)) / 3)).Address, "$")(1) & "11").Copy
End If
Sheets(VBASheetName).Range(Split(Cells(1, index * 2 + 9).Address, "$")(1) & VBAHeaderRowXYGroupData + graphIndex & ":" & Split(Cells(1, index * 2 + 10).Address, "$")(1) & VBAHeaderRowXYGroupData + graphIndex).PasteSpecial xlPasteValues, Transpose:=True
End If
Next index
Worksheets(XYSheetName).Activate
End If
End If
Next periodIndex