2016-03-22 13 views
1

こんにちは、私は列の1つが座席番号であるセルの表を持っています。しかし、座席番号には146Aなどの文字列値と146などのほとんどの数値が含まれていますが、vbaではvlookupに座席番号を使用すると正しい値を見つけることができません。dim seatno as integerエラーと私はdim seat no as string数値が動作しません。私はExcelのテキストに列全体をフォーマットしたが、エラーが続く場合。したがって、1から146Aまでのすべての値を表示する変数をどのように定義できるかについて助けが必要です。 (「 - データシートL12」)間違いなく文字列として答えを宣言し、その後テキストですこれは、シートの列Bがいる場合、私は変数を定義する際のエラー

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 

    Dim answer As Integer 
    answer = TextBox1.Value 
    TextBox2.Value = WorksheetFunction.VLookup(answer, Sheets("L12 - Data Sheet").Range("B:E"), 2, False) 
    TextBox3.Value = WorksheetFunction.VLookup(answer, Sheets("L12 - Data Sheet").Range("B:E"), 3, False) 
    TextBox4.Value = WorksheetFunction.VLookup(answer, Sheets("L12 - Data Sheet").Range("B:E"), 4, False) 

End Sub 
+0

シート( "L12 - データシート")の範囲( "B:B")にハーフ・ナンバーとハーフ・テキストがあるようです。すべてのテキストになるようにデータを修正します。デフォルトでは、テキストはセル内で左揃えになっています。数字は右揃えです。 – Jeeped

+0

'Sheets(" L12 - Data Sheet ")のRange(" B:B ")'がテキストを含むテキスト値(テキストを含む)である場合は、テキスト形式に変換するために列全体を強調表示してもエラーは残る@Jeeped – Niva

+0

-that-like-like-a-number)を使用して、「Dim answer As String」を使用します。 – Jeeped

答えて

1

を行っているコードです。

Dim answer As String 
answer = TextBox1.Value 
TextBox2.Value = WorksheetFunction.VLookup(answer, _ 
        Sheets("L12 - Data Sheet").Range("B:E"), 2, False) 

内の文字列(例えば146A)と真の数字(例えば146)の組み合わせがある場合は「L12 - データシートには、」B:!Bは、文字列としてのTextBox1から値を取得し、それを変換しよう真の数に

Dim answer As String 
answer = TextBox1.Value 
TextBox2.Value = WorksheetFunction.VLookup(Iif(IsNumeric(answer), Int(answer), answer), _ 
        Sheets("L12 - Data Sheet").Range("B:E"), 2, False) 

の値に一貫した値の型が存在しない場合は「L12 - データシートは、」B:!Bは、あなたが利用できる持っているすべてのものとそれを打ちます。

Dim answer As Variant, mtch As Long 
answer = TextBox1.Value 

Select Case True 
    Case Not IsError(Application.Match(CStr(answer), Sheets("L12 - Data Sheet").Columns(2), 0)) 
     mtch = Application.Match(CStr(answer), Sheets("L12 - Data Sheet").Columns(2), 0) 
    Case Not IsError(Application.Match(Int(answer), Sheets("L12 - Data Sheet").Columns(2), 0)) 
     mtch = Application.Match(Int(answer), Sheets("L12 - Data Sheet").Columns(2), 0) 
End Select 

'error control needed here in case mtch is still not a row number 
debug.print mtch 
TextBox2.Value = Sheets("L12 - Data Sheet").Cells(mtch, "C").Value 
TextBox3.Value = Sheets("L12 - Data Sheet").Cells(mtch, "D").Value 
TextBox4.Value = Sheets("L12 - Data Sheet").Cells(mtch, "E").Value 
+0

すべてのコードがanswer = Textbox1.valueでエラーになります。おそらくプログラムは数値であると予想しているが、文字列として出力されている可能性が高いからだ。 – Niva

+0

上記の私の改訂版バリアントのアプローチを参照してください。実際のデータを見るのに役立ちます。サンプルワークブックに編集されたデータへのリンクを投稿します。 – Jeeped

+0

それは完璧に動作します!問題を抱えていただきありがとうございます – Niva

関連する問題