Excel VBA小计(总和),给出与实际总和相比的一半值

kpbwa7wx  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(205)

这就是我的数据的样子。它实际上到了列K。列N和O是我通过VBA创建的。数据有50,000多行

我尝试做的是通过筛选器找到列E的唯一值,然后通过对列K值求和来找到该值的总时间。
这是我的代码相同:

Sub Test()

    Application.ScreenUpdating = False
    
    Dim lRow As Long
    

    ActiveSheet.Range("E2:E655360").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ActiveSheet.Range("N2"), Unique:=True
    
    lRow = Cells(Rows.Count, 14).End(xlUp).Row
    
    For i = 2 To lRow
    
    ActiveSheet.ListObjects("Table3").Range.AutoFilter Field:=5, Criteria1:= _
        Cells(i, 14).Value

    ActiveSheet.ListObjects("Table3").Range.AutoFilter Field:=11, Criteria1:= _
        "<1:10:00"
        
    Cells(i, 15).Value = Application.WorksheetFunction.Subtotal(109, Range("$K$2:$K$100000"))
    
    ActiveSheet.Range("K2:K999999").SpecialCells(xlCellTypeVisible).Copy
    ActiveSheet.Cells(1, 27).PasteSpecial
    
    'ActiveSheet.ListObjects("Table3").Range.AutoFilter Field:=11
    'ActiveSheet.ListObjects("Table3").Range.AutoFilter Field:=5
      
    Next i

End Sub

除了小计给出的值正好是实际总和的一半之外,一切都正常。我不能使用SUM,因为它也计算隐藏的筛选行的总和。我通过SUM函数测试了这一点,状态栏的总和值也是如此。有趣的是,即使没有应用筛选,它也给出了正好一半的值
为了测试,我检查了状态栏的总和值和SUM(K:K),它们都给出了小计值的两倍值
一个简单的解决方法可能是将答案乘以2,但我想了解实际问题,因为这种快速解决方法可能会在以后产生问题
列K的数字格式为[h]:mm:ss
下面是Subtotal第一个参数的语法,可供快速参考:

也请让我知道,如果我可以使这段代码更有效的方式或改变任何其他东西,使它工作得很好。谢谢提前很多

nhaq1z21

nhaq1z211#

在这种情况下,代码109与函数的9相同:Application.WorksheetFunction.Subtotal
9和109之间的区别将只在您手动隐藏行时,而不是在使用表时。
有关参考,请参见:See the subtitle "Difference in first arguments"
可能的解决方案是创建一个可见单元格区域,然后计算该区域的总和。请参阅solution here

0ve6wy6x

0ve6wy6x2#

我认为发生的事情是,小计是包括一个总和在底部的行。太晚的回应,为业主的职位,但这可能会帮助其他人。

相关问题