Excel VBA根据条件获取最大值
我在Excel中有一些数据,我必须在列中找到最大值,这样我就可以将它增加1。数字为001等文本。也有三个参考列,我必须考虑,以确定最大数。< /P> 下面是一个数据示例Excel VBA根据条件获取最大值,excel,vba,Excel,Vba,我在Excel中有一些数据,我必须在列中找到最大值,这样我就可以将它增加1。数字为001等文本。也有三个参考列,我必须考虑,以确定最大数。< /P> 下面是一个数据示例 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
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
我不确定过滤数据是否是最好的方法,但我不能弄清楚的是如何在N列中找到最大值,以便我可以增加它
有什么想法吗?使用公式会更好吗?感谢斯科特的评论,我找到了我想要的东西。如果它对其他人有帮助,使用以下公式,我可以找到下一个增量文本值
=TEXT(COUNTIFS($A$1:A2,A2,$K$1:K2,K2,$L$1:L2,L2)+1,"000")
在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
等)来加快速度
使用worksheetfunction.Countifs在遍历范围时只进行查找。因此,除非您需要vba,否则一个简单的Countifs()函数将满足您的需要。将其放入N2并向下复制:
=TEXT(Countifs($a$1:A2,A2,$K$1:K2,K2,$L$1:L2,L2),“000”)
谢谢Scott。我只需要添加一个:=TEXT(COUNTIFS($A$1:A2,A2,$K$1:K2,K2,$L$1:L2,L2)+1,“000”)。太好了@斯科特·克兰纳:你或许应该把这当作一个答案,而不是一个评论。。。Selrac-函数的实现方式不需要添加1?不幸的是,在查看该问题后,我发现该解决方案不起作用,因为存在N列中的数字不连续的情况。我怀疑已经存在这种情况,并准备了一个不依赖于数据已经“完美”的答案。但我一直在等着看你的评论,我想这是…我想不出来。我想我需要用a来代替“XXX”,用k来代替“I”,用l来代替“17”吗。我不断得到下一个=N@Selrac这些是例行程序的参数。参数a
是您在列a
中查找的参数。同样地,k
是您希望在k
列中查找的内容,同样地,l
(在l
列中获取的数字)。请看一看我添加的测试示例。@Selrac我明白了,这是因为(我刚刚意识到)您的N
列是文本。我希望列L
也不是这样。我修改后将其转换为整数…@Selrac太好了,如果列L
被格式化为文本,它似乎仍然有效,前提是它实际上包含可转换为整数的字符串。:)
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
Sub ExampleTest()
dim n as long
n = NextN("XXX", "I", 17)
Debug.Print n ' Should print 6 with your OP's data
End Sub