電子書籍の厳選無料作品が豊富!

テキストボックス(TextBox1)にコード番号を入力して
ボタンを押すとメッセージボックスにコード番号に合った
名前を表示させるプログラムを作っているのですが、
こういうエクセルでいうLOOKUP機能がVBでできるのでしょうか?可能であれば教えて頂けないでしょうか?

(例)
名前データが以下です。

code  name
0 東
1 斎藤
2   大西

テキストボックスに1を入力してボタンを押すと
メッセージボックスに斎藤と表示させる。

A 回答 (4件)

こんにちは


1000件ほどなら、データはcsv(カンマ区切りテキスト)ファイルにしておくといいと思います。エクセルで編集することも出来ますし。普通にopenして、Input #で、#1の方のような配列に、読み込みます。
--- こんなファイル
0,東
1,斎藤
2,大西
---
厳密にいうと、コードは前にゼロが付いたりしないかどうか(0012とか)、全角で間違えて入れないかどうか、また、名前データ内にカンマが入らないようにする、などの考慮が必要かもしれません。
---
ボタンを押したあとは、やはり#1の方のロジックでいけると思います。
    • good
    • 0

私の勝手な見解を書きますが、題意には添わないかもしれないので、違うと思ったら無視してください。



LOOKUP関数は表計算ソフトのEXCELにしては、極めてデータベース系ソフト似の関数です。それならば、EXCELをデータベースとして扱ってみてはいかがでしょうか?
参考URLにEXCELにDAOで接続するスレがあります。
SQL文で問い合わせたら、すぐに結果が得られると思います。

それと、もし「ISAMドライバ」のエラーメッセージが出た場合はこちらを・・・
http://oshiete1.goo.ne.jp/kotaeru.php3?q=141615
http://oshiete1.goo.ne.jp/kotaeru.php3?q=407289

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=414739
    • good
    • 0

次に考えるべき易しい方法は、コード-名前の対応を、テキストファイルで持ち、フィールド長を固定とし、いわゆるランダムファイルとして、持つ。

100人程度分を
1レコードとする。(約10レコードに1000人分)。
そして処理が始まるときに、10レコードを読んで、メモリの配列に読みこむ。
そして名前を検索する時、配列を約1000要素総なめして探す。
他の方法では、VBからエクセルへ行くプログラム例は、手許にありますが、エクセルを開いたまま待たせて(終わらせないで次の氏名検索まで、もっといえばVBが終わるまで開いたままで)、VB側で処理する方法が、私には判らないです。
また他の方法で、検索の都度、1回1回CreateObject(("Excel.Application)して、エクセルへ渡って行くことが、適当なのかどうかも判らない。済みません。
    • good
    • 0

Form1に2つTextBoxを貼り付ける。


Private Sub Text1_LostFocus()
Text1.Text = findn(Text1.Text)
End Sub
プロジェクト-標準」モジュールをクリックして
Module1に
Function findn(n)
Dim nmc(3), nm(3)
nmc(1) = "1": nmc(2) = "2": nmc(3) = "3"
nm(1) = "東": nm(2) = "斉藤": nm(3) = "大西"
For i = 1 To 3
If nmc(i) = n Then
findn = nm(i)
End If
Next i
End Function
実行して1か2か3を入れて、Text2へフォーカスを
移すと、1なら東、2は斉藤、3は大西がText1に
セットされます。
FormLoadか何かでText1.Text=""を入れておいてください。
但し上例は幼稚です。総なめで探しているからです。
この部分は、ファイルを構造化して検索を少ない比較回数
で行うようにしますが本題では略。

この回答への補足

即答ありがとうございます。実は本番で使う名前の数は1000件ありまして、配列で個々に定義するのは結構大変なのでもしできれば、別のワークシートで名前と番号の
定義してそこからデータを取ってくる形にしたいのですが
可能でしょうか?

補足日時:2002/12/10 21:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!