- 締切済み
アクセスでのVLOOKUPの代わりになる関数
今、職場でエクセルで管理しているデータ。 パソコンに強い人が作ったので、 関数もマクロもいっぱい!! 充分機能するのですが、やはり限界も感じるらしく アクセスで作り直してみない?と言われました。 これから、業務の関係で10日ほどはゆとりがあるからです。 6年ほど前に学校で学んだ知識を思い出しながら、 テーブルとフォームを作成しました。 でも、VLOOKUPのような関数はアクセスでは使えないのでしょうか? 金融機関を銀行・支店コードから引っ張ってきたいのです。 それと、郵便番号も地域が限られているので、 町名から引っ張ってきたいのですが、可能でしょうか? この質問をエクセルで作った本人が読んでいたら・・・ 恥ずかしいと思いつつ、できるだけ良いものを作りたいので 質問させていただきました。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
No2です。 「AccessにはDLookUpがあります」の間違いでした。 申し訳ありません。
Access と Excel の重大な相違点の一つは SQL言語を使うことではないでしょうか? <ZipList> ZIP_________Address 1111111__大木町 1111112__天神町 1111113__坂下町 [イミディエイト] ? DBLookup("SELECT ZIP FROM ZIPLIST WHERE ADDRESS='大木町'") 1111111 ? DBLookup("SELECT ZIP FROM ZIPLIST WHERE ADDRESS LIKE '天神%'") 1111112 フォームの[イミディエイト] では、このように関数をテストすることが出来ます。 このテストで判るように、SQL文のSELECT文がVLOOKUPに匹敵すると考えることも出来ます。 クエリは、この機能を利用する仕組みのようなものです。 なお、DBLookup関数は、この回答のために書いたものです。 SQL文に堪能であれば、DBLookup関数で大概のことがやれると思います。 この回答は、現実には意味をなさないとは思います。 軸足は、「SQL文も課題ですよ」にあります。 Public Function DBLookup(strQuerySQL As String) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = DataValue Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function
accessでがvlookupという関数があります。 が私はほとんど使いません。 他の機能を使うことが多いです。 連結フォームやコンボボックス、リストボックスのレコードソースのSQLを書き換えたり、 ADOなどで検索したりすることが多いです。 他のデータベースを参照したり、他のプログラムに書き換えるときにはそのほうが都合がよいと思います。
可能です。様々な実装が考えられますが、少し慣れればエクセルより遙かに手続きは簡単です。一つのポイントは「クエリー」を理解することです。これはリレーショナルデータベースの基本なので、アクセスと限らず、勉強することは大変有効です。 で、「具体的にどうするか」が一番知りたいところとは推察しますが、文字だけで表現するのは辛いものがあります。また実用的なフォームを完成させるためには、他にも色々な知識が必要になると考えます。お奨めしたいのは参考書の購入です。それを利用し、具体的に判らない箇所を質問すれば、具体的な回答が付くことと思います。
お礼
ありがとうございます。 チャレンジしてみます