VBA 小计(9,"range") 基于另一列值

VBA Subtotal(9,"range") based on another column value

我想使用一些宏来根据单元格的长度使用公式 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