VBA根据条件获得最大数量
我有一些在Excel中的数据,我必须find列中的最大数量,以便我可以增加一个。 这些数字是像001那样的文本。为了识别最大数量,还需要考虑三个参考列。
这是一个数据的例子
AKLN <-These are the columns Ref1 Ref2 Ref3 ID <-These are the headers xxx I 17 001 <-Column N is also text xxx I 17 002 yyy J 15 001 xxx I 17 005 <-The numbers might not be consecutive. Instead of 003 jumps to 005
根据参考文献XXX-I-17,我必须发现下一个ID是006.注意,参考并不总是如上所述的连续的。
我正在做的是首先过滤数据,如:
LastRow = ActiveSheet.Range("A1").Offset(ActiveSheet.Rows.Count - 1, 0).End(xlUp).Row ActiveSheet.Range("A1:L" & lastRow).AutoFilter Field:=1, Criteria1:="xxx" ActiveSheet.Range("A1:L" & lastRow).AutoFilter Field:=11, Criteria1:="I" ActiveSheet.Range("A1:L" & lastRow).AutoFilter Field:=11, Criteria1:="17"
我不确定过滤数据是否是最好的方法,但是无法弄清楚的是如何在列N中find最大值,以便我可以增加它。
有任何想法吗? 用公式会更好吗?
在VBA中,你可以这样做:
Function NextN(a As String, k As String, l As Long) As Long NextN = 1 + Application.Evaluate("MAX(IF((A:A=""" & a & """)*(K:K=""" & k & """)*(L:L=" & l & "),INT(N:N)))") End Function
你也可以直接在excel中使用这个公式,在一些语法调整后,将它用作数组公式 (CSE)。 否则,您也可以使用此function作为用户定义的function。
你也可以通过限制列的大小来加快速度(例如A1:A1000
而不是A:A
等)。
Sub ExampleTest() dim n as long n = NextN("XXX", "I", 17) Debug.Print n ' Should print 6 with your OP's data End Sub
感谢斯科特的评论,我发现我在找什么。 如果它帮助别人,用下面的公式我可以find下一个增量文本值
=TEXT(COUNTIFS($A$1:A2,A2,$K$1:K2,K2,$L$1:L2,L2)+1,"000")