Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA根据条件获取最大值_Excel_Vba - Fatal编程技术网

Excel VBA根据条件获取最大值

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

我在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    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