微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA Subtotal(9,"range") 基于另一个列值

如何解决VBA Subtotal(9,"range") 基于另一个列值

我想使用一些宏来使用公式 subtotal(9,"range") 填充单元格,该公式是基于单元格长度的动态范围。 sample

我需要根据列“B”中的值在“C”行中填充公式小计(9;范围)。 它必须检查 B 列上的值,并与下面的行进行比较。如果下一行的值等于或低于,则必须为“空白”,否则,将创建一个公式 =subtotal(9,range),范围将从下面的行开始,直到找到等于或低于的长度.

我做这本手册,但有时我有超过 1000 行。 非常感谢。

解决方法

在您提到的问题中,仅当当前行低于或等于下一行时才使用小计函数填充行,但在您的示例中,您仅在低于时填充。所以我是这样编码的。可以通过将 > 中的 If .Range("B" & next_row) > .Range("B" & r) Then 替换为 >=

来更改
Sub populate()

Dim r As Long,r2 As Long,last_row As Long
Dim next_row As Long,current_len As Long,test_len As Long
Dim rng As String

With ActiveSheet

last_row = .Cells(Rows.Count,1).End(xlUp).Row

For r = 2 To last_row
    next_row = r + 1

    If .Range("B" & next_row) > .Range("B" & r) Then
       current_len = .Range("B" & r)
       
       'create range
       For r2 = r + 1 To last_row
            test_len = .Range("B" & r2)
            If current_len >= test_len Then
                rng = "C" & r + 1 & ":" & "C" & r2 - 1
                Exit For
            End If
        Next
    
        .Range("C" & r).Formula = "=SUBTOTAL(9," & rng & ")"
    End If
    
Next

End With
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?