2017-03-16 56 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已經懷疑已經準備好了一個不依賴於已經「完美」的數據的答案,但是我還在等待看到你的評論,並認爲這是... –