2017-03-16 51 views
1

我在Excel中有一些数据,我必须在列中找到最大数字,以便我可以将其增加1。这些数字与001中的文字一样。我还必须考虑三个参考列来确定最大数量。VBA根据条件获得最大数量

这里是数据

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

使用worksheetfunction.Countifs你通过范围仅仰视迭代。 –

+2

所以,除非你需要它,一个简单的COUNTIFS()函数将做你想做的事情。 –

+1

把它放在N2中,并抄下来:'= TEXT(COUNTIFS($ A $ 1:A2,A2,$ K $ 1:K2,K2,$ L $ 1:L2,L2),“000”) –

回答

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 
+0

我无法弄清楚,我是否需要更换'XXX',k代表'I',l代表'17'我猜我一直在获取NextN = N – Selrac

+0

@Selrac这些参数是例程参数'a'就是你要查找的列'A'同样'k'就是你想要找的我n列'K',对于'l'也是类似的(在'L'列中取数字)。 –

+0

请看看我添加的测试示例。 –

0

感谢斯科特评论我找到了我正在寻找的东西。在情况下,它可以帮助别人,用下面的公式,我可以找到下一个增量文本值

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

不幸的是,在查看问题后,我发现这个解决方案不起作用,因为有N列数不连续的情况。 – Selrac

+0

I已经怀疑已经准备好了一个不依赖于已经“完美”的数据的答案,但是我还在等待看到你的评论,并认为这是... –