我想创建一个用公式填充空白单元格的宏。公式将引用上面的单元格,但仅在我将Subtotal
应用于我的数据之后,以及仅应用Total
的行时(参见下面的示例屏幕截图):
到目前为止,我的宏将应用小计,然后使用总计过滤列,并过滤单元格中Total
的任何内容。然后它计算所有不可见的行并减去2(我不想计算标题和总计)。它需要计数并循环公式应用程序。
那就是说,它在大部分时间里都有效,但是经常会错误地计算2次,我无法弄清楚原因。
数据格式相同,每次都使用相同的列。
我希望我能清楚地解释我的问题,样本和代码段就足够了:
'filling in empty cells on subtotal line
Cells.Select
Selection.AutoFilter
LastRow = Range("G" & Rows.Count).End(xlUp).Row
x = LastRow
ActiveSheet.Range("G1:G" & x).AutoFilter Field:=7, Criteria1:="=*total*", Operator:=xlAnd, Criteria2:="<>Grand Total", Operator:=xlAnd
Set rng = ActiveSheet.AutoFilter.Range
'-2 is to NOT count the header or Grand Total for my loop count
RowCount = rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 2
r = RowCount
答案 0 :(得分:1)
问题是,您的范围不会继续(因为已过滤的单元格)。这会使rows.count停止正常工作。 试试这个:
Number_of_Rows= rng.Resize(, 1).SpecialCells(xlCellTypeVisible).Count
答案 1 :(得分:0)
我注意到你的代码中有些东西是不对的,我不知道这篇帖子上的拼写错误,或者它实际上是否在你的代码中......
ActiveSheet.Range("G1:G" & x).AutoFilter Field:=7, Criteria1:="=*total*", Operator:=xlAnd, Criteria2:="<>Grand Total", Operator:=xlAnd
我会想象如果它正在运行,它可能会在某些时候发生变形。它有2'运算符:= xlAnd'这很奇怪我会发现错误。
这种错误可能是一些事情,如果它不是由这个坏的过滤器部分引起的,它可能只是一些简单的东西被忽略了,
什么是Rows.Count?这可能会将活动单元格(光标,如果你喜欢)放在一个位置,当你使用.End(xlUp)它可能会跳过表格中的几个空白单元格?如果是这种情况,它可能会过滤,但忽略几行,使额外的行保持可见,不应该.......可能
RowCount = rng.Columns(2).SpecialCells(xlCellTypeVisible).Count - 2
这肯定是有意义的,因为你的问题是2行有时错误计算,你明确地在这里取消2行(-2),但我怀疑这是原因虽然它可能是它总是2的原因,所以它必须在上面的代码........
当发生这种情况时,您还需要检查表格中的数据,并在可能的情况下发布,如果没有真实数据,这里确实很难找到最新情况。
如果您可以重新发布问题或发布一些真实数据,只需发回,这将是一个很大的帮助。
答案 2 :(得分:0)
感谢Doktor,但我再看了一遍,发现这个解决方案适用于我的问题,它总是计算正确的数字来循环。
Dim LastRow as interger, x as integer
'add autofilter
Cells.Select
Selection.AutoFilter
'filter for Total
ActiveSheet.Range("G1:G" & x).AutoFilter Field:=7, Criteria1:="=*total*", Operator:=xlAnd, Criteria2:="<>Grand Total", Operator:=xlAnd
'find last row
LastRow = Range("G" & Rows.Count).End(xlUp).Row
x = LastRow
'count visible rows
RowCount = Range("G1:G" & x).Rows.SpecialCells(xlCellTypeVisible).Count - 2
r = RowCount