- ベストアンサー
データベースから検索して表示させる方法
os Windows me エクセル2000を使用しています。 VBAマクロを使って、 ある表のA列にコードを入力すると、データベースから検索して同じ行のB列に名前が表示されるという表を作りたいのです。 入力するデータが1ヶ所であれば、IFを使って表示させる方法を本で勉強して作れたのですが、 データが約500件近くあるので、出来れば列単位で設定する方法はないでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1です。 データの持ち方がよくわかってないのですが 別シート等にコード、名前が載ってるってことなんでしょうかね? 上記の仮定でいくと Worksheet_Change で Target が引数として渡されてまさうよね。 それをうまく使ってあげましょう。 入力したセルのひとつ横、に表示してあげればいいわけですから 現状、1ヶ所であればできる、と言っているコーディングがどのようなモノかわからないんですが Range か Cells でセルを指定してますよね? Cells で指定すると仮定して、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then 表示したいデータの検索 Cells(Target.Row, 2) = 表示したいデータ End If End Sub という感じではどうでしょう?
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルの問題です。エクセルVB・VBAでも出来ますが(とくにアクセスの得意分野)エクセルの関数=VLOOKUP()を使います。まずSheet2のA列に番号、B列の同行に対応する名前を入力し表を作成します。 Sheet1のA列に番号を入れるとして、B列のB1に =VLOOKUP(A1,Sheet2!$A$1:$B$500,2,FALSE) といれ、B2以下適当に下へ複写します。 A列に番号を入れるとB列に名前が出ます。 テスト済み。 A列に入力していないB列のエラー#N/Aを出さないことは出来ますが、略します。
お礼
回答ありがとうございました。 おっしゃる通りです。 ただ、VLOOKUP関数を使って出来るのは知っているんですが、あくまでもエクセルVBAでやりたいのです。 すみません… でも、回答いただいて嬉しいです。 ありがとうございました。
- karasumori
- ベストアンサー率28% (6/21)
500件近くあるデータとは、入力するデータ(行)が500件あるのでしょうか?それとも、コードが500種類あるのでしょうか?まあどちらにしろ、何度もデータベースに読みに行くのは時間がかかるので、最初にコードと名前を全部読み込んでおく方がいいと思います。 A列にコードを入力し終わったらマクロを実行して、データベースからコードを名前を取得。その後まず1行目A列を読んで、それにに対応する名前を1行目B列に表示させる、次に2行目・・とやっていって、最終行まで実行するという。 具体的なコーディングは、そのブックや表の構成など(空白行があるのかとか)も書いたほうが回答が得やすいと思いますよ。シートがいっぱいある場合、データベースから取得するタイミングも違ってくることもあると思います。
補足
質問内容が、わかりにくかったようで申し訳ありません。 私が作りたいのは、A列にコードを入力するたびにB列に名前を表示させる…ということなのです。 その表には、C列やD列(同行)にもデータをいくつか入力する表ですので、最後に表示するという形はとりたくないのです。 わかりづらい文章ですみません。よろしくお願いします。
Excelの方で質問したほうがいいように思いますが・・・それはいいとして。 データベースはなにをお使いなのでしょう? > データが約500件近くあるので、出来れば列単位で設定する方法はないでしょうか? Excelのシート関数ではなくて、VBAを使ってるんですよね? 設定というのが何を指しているのかわからないのですが。 a.A列に入力するたびにB列を表示させたい b.A列を一通り入力し終えてから一気に表示させたい a、b、またはもっと別の方法で実現したいのか・・・によって手段が変わってくると思いますが、 aであれば Worksheet_Change イベントで処理をすればいいと思います。 bならボタンを作るか、メニューからマクロの呼び出しをして動く関数を作ればいいと思われます。 質問の意味を取り違えていたらごめんなさい。(^-^;
補足
質問内容が、わかりにくかったようで申し訳ありません。 表示方法は、(a)です。 Worksheet_Change イベントで 例えば、A2にコードを入力してB2に名前を表示させるという 1ヶ所だけの特定のセルに表示させる方法は解るのです。 ただ、500件(行)近くのデータを入力するので、いちいちA2入力→B2表示、A3入力→B3表示、とひとつひとつ設定するわけにもいかず、なんとか列単位でできる構文がないものか…ということなのです。 表現が下手で、わかりにくいかもしれませんが宜しくお願いします。
お礼
回答ありがとうございました。 出来ました。 本当に助かりました。 今後ともよろしくお願いします。