2017-01-03 4 views
0

真であるように私のワークシートに見える:私のユーザーフォームは、私が探しています1名前を記入することができ、テキストボックス、姓などVBA:引数x行を特定し、y、zは

が含まれてい

A  B    c 
1 Name  Surname  Weight 
2 Pete  Smith   91 
3 Pete  Johnson  81 

RowNumber = (textbox_Name == (A:A)) & (textbox_Surname == Range(B:B)) 

説明は簡単ではありませんが、あなたがそのアイデアを得ることを願っています。

1つの列で検索する方法はわかっていますが、2つでもこの作業はできますか?

答えて

2

@Absintheが掲載されているので、Forループは完全に+1可能です。たくさんの行があり、ループが遅くなる場合は、Match関数を使用して複数の条件を評価することを検討してください。

Sub findMatchedRow() 
    Dim matchedRow, wks, Criteria1, Criteria2 

    Set wks = Worksheets("Sheet1") 

    Criteria1 = wks.Cells(2, 7).Address(False, False) 
    Criteria2 = wks.Cells(3, 7).Address(False, False) 

    matchedRow = wks.Evaluate("MATCH(" & Criteria1 & "&" & Criteria2 & ",A2:A5&B2:B5,0)") 

    If Not IsError(matchedRow) Then 
     wks.Range("G6") = matchedRow 
    Else 
     wks.Range("G6") = "Not Found" 
    End If 
End Sub 

enter image description here


行番号は範囲に基づいて、ヘッダ行が含まれていなかったので、あなたが説明できる3.それは代わりに、実際の行の行2を示していることに注意してくださいそれが実際に行1にある場合はヘッダー行を含めてください。

+0

ありがとうポートランドランナー! – DataAdventurer

2

、シートを下に行くと、あなたに必要な値については、各セルをチェックするforループのようなものを使用します。これは、Rangeクラスの細胞のproperyを使用して、構文はセル(行、列である

Dim lastRow as long 
Dim sName, surname, weight as string 

sName = MyForm.MyControl.text ' etc etc - pick up the other form controls and put them to variables too 

lastRow = Range("A1000000").End(xlUp).Row 

For x = 2 to lastRow 

    If cells(x, 1) = sName And cells(x,2) = surname And cells(x,3) = weight Then 
     ' you've found a match 
    End if 

Next x 

を)ので、セルA1 =セル(1,1)、セルC10 =セル(10,3)などとなります。 forループは反復ごとにXをインクリメントし、次の行に移動します。

関連する問題