2017-03-16 16 views
1

私は1つずつ増やすことができるように、Excelでいくつかのデータを持っています。数値は001のようなテキストです。また、最大数を特定するために考慮する必要のある3つの参照列もあります。ここVBAは条件に基づいて最大数を取得します

は、私は、次のIDは、上記のように基準が常に連続していないこと006注記であることを見つけなければならない基準XXX-I-17に基づくデータ

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 

の一例です。データをフィルタリングすることは最善のアプローチですが、何を把握することはできませんが、最大を見つける方法であれば、私はよく分からない

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、$、$ K $ 1:K2、K2、$ L $ 1:L2、L2)、" 000 ")' –

答えて

1

を見つけることができ、次の式で、あなたはこのようにそれを行うことができます役立ちます

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

私はこれを理解できません。 NextN = Nを取得し続ける – Selrac

+0

@Selracこれらはルーチンのパラメータであり、パラメータ 'a'はカラム' A'で探しているものです。同様に 'k'はあなたが探しているものですn列「K」、同様に「l」(列「L」に取り出す数)である。 –

+0

私が追加したテストの例を見てください。 –

0

Scottのコメントのおかげで、私が探していたものが見つかりました。ケースでは、他の誰かが、私は次の増分のテキスト値をVBAで

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

残念なことに問題を見てみると、列Nの数値が連続していない場合があるため、この解決策は機能しないことがわかりました。 – Selrac

+0

私はこの問題を解決するために、数式を配置します。すでにそれが疑われていて、データがすでに「完璧」であることに頼らない答えを用意していましたが、私はあなたのコメントを見て待っていました... –

関連する問題