2017-06-19 4 views
1

vlookupのvb関数から値が取得される700個のtexbokを作成したいとします。しかし、300に達した後、私は余分な手順を警告することができます。vlookupでvlookupのコマンドを簡略化する必要があります。

Private Sub Extra_Change() 
Dim ycNo As Integer 
If Me.NumberLook.Value = "" Then 
MsgBox "bla..bla..bla!!!", vbExclamation, "some text" 
Exit Sub 
End If 
ycNo = NumberLook.Value 
Me.TextBox1.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 3, 0) 
Me.TextBox2.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 4, 0) 
Me.TextBox3.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 5, 0) 
Me.TextBox4.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 6, 0) 
Me.TextBox5.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 7, 0) 
Me.TextBox6.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 8, 0) 
Me.TextBox7.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 9, 0) 
Me.TextBox8.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 10, 0) 
Me.TextBox9.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 11, 0) 
Me.TextBox10.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 12, 0) 
Me.TextBox11.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 13, 0) 
Me.TextBox12.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 14, 0) 
Me.TextBox13.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 15, 0) 
Me.TextBox14.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 16, 0) 
Me.TextBox15.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 17, 0) 
Me.TextBox16.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 18, 0) 
Me.TextBox17.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 19, 0) 
Me.TextBox18.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 20, 0) 
Me.TextBox19.Value = Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), 21, 0) 
... 
... 
... 
to 700 

たぶん誰かがこの問題を解決することができます。..

+0

からあまりそれらを割り当て、私はそれが少し短く、それ –

答えて

3

だけループを実装:あなたが同じ行に属するフェッチされているすべての項目ので

Private Sub cmbNourut_Change() 
Dim ycNo As Integer 
Dim i  As Long 

If Me.cmbNourut.Value = "" Then 
    MsgBox "bla..bla.bla!!!", vbExclamation, "...." 
    Exit Sub 
End If 
ycNo = cmbNourut.Value 
For i = 1 To 700 
    Me.Controls("TextBox" & i).Value = _ 
     Application.WorksheetFunction.VLookup(ycNo, Worksheets("mapel1").Range("A1:AAX55"), i + 2, 0) 
Next i 
End Sub 
+0

感謝かもしれないと思いますあなたは..問題は終わった。ループ機能から停止するには? –

+0

@YanLimaBenua - どういう意味ですか?どのようにループを止めますか?ループの外に出るために 'Exit For'を追加することができます。それはあなたが意味することですか?だから、条件が私の後でループを止めたいとします。 'For i = 1 ...'ループに 'If i = 500 Then Exit For'と言う言葉を追加することができます。 – BruceWayne

+0

はい、本当です。私は上記の数式をテストし、すべてうまくいった。ありがとうございました –

2

1-、一度それをフェッチし、いけませんVLookupを700回呼びましょう!

2-コントロールのアレイ

3-ループ内のその行の値を取得し、アレイ

Private Sub cmbNourut_Change() 
    ... 
    ycNo = NumberLook.value 

    ' 1- Find the row by matching in column A 
    Dim r: r = Application.Match(ycNo, Worksheets("mapel1").Range("A1:A55"), 0) 
    If IsError(r) Then MsgBox ("not found blablah"): Exit Sub 

    ' 2- Get the array of values from the found row starting at column C 
    Dim ar: ar = Worksheets("mapel1").Cells(r, 3).Resize(, 700).Value2 

    '3- Loop and assign text-boxes from the array 
    Dim i as Long 
    For i = 1 To 700 
    Me.Controls("TextBox" & i).value = ar(i) 
    Next 
End Sub 
+0

あなたの解決策が役立ちます。ありがとうございました –