- ベストアンサー
VBでLOOKUP機能
テキストボックス(TextBox1)にコード番号を入力して ボタンを押すとメッセージボックスにコード番号に合った 名前を表示させるプログラムを作っているのですが、 こういうエクセルでいうLOOKUP機能がVBでできるのでしょうか?可能であれば教えて頂けないでしょうか? (例) 名前データが以下です。 code name 0 東 1 斎藤 2 大西 テキストボックスに1を入力してボタンを押すと メッセージボックスに斎藤と表示させる。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 1000件ほどなら、データはcsv(カンマ区切りテキスト)ファイルにしておくといいと思います。エクセルで編集することも出来ますし。普通にopenして、Input #で、#1の方のような配列に、読み込みます。 --- こんなファイル 0,東 1,斎藤 2,大西 --- 厳密にいうと、コードは前にゼロが付いたりしないかどうか(0012とか)、全角で間違えて入れないかどうか、また、名前データ内にカンマが入らないようにする、などの考慮が必要かもしれません。 --- ボタンを押したあとは、やはり#1の方のロジックでいけると思います。
その他の回答 (3)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
私の勝手な見解を書きますが、題意には添わないかもしれないので、違うと思ったら無視してください。 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
- imogasi
- ベストアンサー率27% (4737/17069)
次に考えるべき易しい方法は、コード-名前の対応を、テキストファイルで持ち、フィールド長を固定とし、いわゆるランダムファイルとして、持つ。100人程度分を 1レコードとする。(約10レコードに1000人分)。 そして処理が始まるときに、10レコードを読んで、メモリの配列に読みこむ。 そして名前を検索する時、配列を約1000要素総なめして探す。 他の方法では、VBからエクセルへ行くプログラム例は、手許にありますが、エクセルを開いたまま待たせて(終わらせないで次の氏名検索まで、もっといえばVBが終わるまで開いたままで)、VB側で処理する方法が、私には判らないです。 また他の方法で、検索の都度、1回1回CreateObject(("Excel.Application)して、エクセルへ渡って行くことが、適当なのかどうかも判らない。済みません。
- imogasi
- ベストアンサー率27% (4737/17069)
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件ありまして、配列で個々に定義するのは結構大変なのでもしできれば、別のワークシートで名前と番号の 定義してそこからデータを取ってくる形にしたいのですが 可能でしょうか?