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