如何通过Excel中的VBA在过滤/可见单元格中复制/粘贴公式

时间:2017-11-09 13:11:44

标签: excel vba excel-vba excel-2010

我正在努力将公式从一列复制并粘贴到另一列中使用另一列中的过滤器。

我有一个包含52列的表(每个月的行数都在变化)。 在AW(#49)栏中,我应用了过滤器。它仅显示CTD。 应用此过滤器后,我需要将公式从AH列复制到AG列。当然,我只需要将其应用于过滤/可见细胞。 我写的代码是将此公式复制/粘贴到AG列中的所有单元格中(它不考虑我在AW列中的过滤器)。 另一个问题是当在列AW中应用滤波器时,第一可见行不需要一直是AH2,但它可以是例如AH2。 AH15或其他什么。我想这可以通过一些动态解决方案来避免。不幸的是,我不知道该怎么做。

之后我想在其他专栏中对过滤器应用相同的内容。

非常感谢任何提示! :)

这是我的代码:

Sub ApplyFilterInColumnAW()

Sheets("DATA").Select
ActiveSheet.ListObjects("tb_DATA").Range.AutoFilter Field:=49, Criteria1:="CTD"
Range("AG2").Select  'dynamic solution?
ActiveCell.FormulaR1C1 = "=[@[Service/Log Formula]]" 'header name of column AH

End Sub

1 个答案:

答案 0 :(得分:3)

Range.CopyRange.Paste仅适用于可见细胞。在我的示例中,我使用Column Header定位列中的单元格。

Sub ApplyFilterInColumnAW()
    Const TagetColumnLabel = "Test"
    Dim tbl As ListObject
    Set tbl = Sheets("DATA").ListObjects("tb_DATA")

    With Sheets("DATA")
        .ListObjects("tb_DATA").Range.AutoFilter Field:=49, Criteria1:="CTD"
        tbl.ListColumns(TagetColumnLabel).DataBodyRange.FormulaR1C1 = "=tb_DATA[[#This Row],[Service/Log Formula]]"
    End With
End Sub