使用VBA将小计复制到Excel中的新工作表

时间:2017-06-30 18:05:16

标签: excel vba excel-vba

我正在我的工作簿中的第一张工作表上过滤大型数据集,然后我在工作簿中为主数据集的第一列中的每个唯一名称创建一个单独的工作表。

在我过滤给定名称的主数据集后,我试图对特定的过滤列进行小计(比如列C),例如:

Sub CreateSheets()

    Dim wsCurrent As Worksheet
    Dim wsNew As Worksheet
    Dim iLeft As Integer
    Dim length As Long

    Set wsCurrent = ActiveSheet
    Application.ScreenUpdating = False

    'Copy list of all players and remove duplicates
    Range("A2", Range("A2").End(xlDown)).Copy Range("AY1")
    Range("AY1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes

    'Iterator
    iLeft = Range("AY1").CurrentRegion.Rows.Count - 1

    'For each player
    Do While iLeft > 13
        Set wsNew = Worksheets.Add
        With wsCurrent.Range("A2").CurrentRegion
            'Player name from copied list
            .AutoFilter Field:=1, Criteria1:=wsCurrent.Range("AY1").Offset(iLeft).Value

            'Hits
            .AutoFilter Field:=3, Criteria1:="1"
            length = .Range("C" & Rows.Count).End(xlUp).Row
            wsNew.Range("A1") = "=SUBTOTAL(9," & wsCurrent.Name & "!C2:C" & length & ")"

            'Turn off filters
            '.AutoFilter
        End With
        'Name player sheet and move onto next
        wsNew.Name = wsCurrent.Range("AY1").Offset(iLeft).Value
        iLeft = iLeft - 1
    Loop

    'Clear player names in copied region
    wsCurrent.Range("AY1").CurrentRegion.Clear
    Application.ScreenUpdating = True

End Sub

这里的主要问题是小计函数调用不再在主工作表上找到引用的单元格。非常感谢任何帮助。

编辑:

以下提供了正确的小计。

length = .Range("C" & Rows.Count).End(xlUp).Row
wsNew.Range("A1") = "=SUBTOTAL(9," & wsCurrent.Name & "!C2:C" & length & ")"
wsNew.Range("A1").Value = wsNew.Range("A1").Value

最后一行确保在删除过滤器时,保留可见单元格的原始总和(而不是在现在删除过滤器的情况下获取可见单元格的总和)。

1 个答案:

答案 0 :(得分:1)

您是否尝试将原始工作表名称作为参考包含在小计公式中?

wsNew.Range("A1") = "=SUBTOTAL(9," & wsCurrent.Name & "!C2:C" & length & ")"

我将9,C2:C替换为9, " & wsCurrent.Name & "!C2:Cstd::copy应正确引用它。