VBA根据条件获得最大数量

时间:2017-03-16 16:29:42

标签: excel excel-vba vba

我在Excel中有一些数据,我必须在列中找到最大数字,以便我可以将其递增1。这些数字与001一样是文本。我还需要考虑三个参考列来识别最大数量。

以下是数据的示例

A    K    L    N   <-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列中找到最大值以便我可以增加它。

有什么想法吗?公式会更好吗?

2 个答案:

答案 0 :(得分:1)

在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)。否则,您也可以将此功能用作用户定义的功能。

您还可以通过将列限制为某个大小(即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

答案 1 :(得分:0)

感谢Scott的评论,我找到了我想要的东西。如果它帮助其他人,使用以下公式我可以找到下一个增量文本值

=TEXT(COUNTIFS($A$1:A2,A2,$K$1:K2,K2,$L$1:L2,L2)+1,"000‌​")