• ベストアンサー

別ブックのデータベースを検索して表示する。

こんにちは。WINDOWS NTでEXCEL2000を使っています。 BOOK1に伝票No(当然重複なし)・得意先名・件名等のデータベースとなる表があり、これは毎日更新(年間2万件程度)されるものとします。 これを使ってBOOK2で伝票Noを入力すると自動的に得意先・件名等の必要な情報を表示させたいのですがVLOOKUPやDGETではうまくいきませんでした。 このようなことはACCESSでないと無理なのでしょうか?VBAを使って何とか実現できないかと色々本やHPを読み漁っているのですがいい方法が見つかりません。知恵を貸してください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

下の表の時、VLOOKUPで可能でした。 A列、 B列、 C列、 D列 伝票No、 得意先、 件名、 備考、 =VLOOKUP(B2,[BOOK1.xls]Sheet1!A2:D30000,2,FALSE) BOOK1のSheet1を元のデータとして BOOK2のセルB2に入力した「伝票No」から 完全一致するものを表示する。 上の式は、2列目を表示なので得意先を表示します。 件名は、3、備考は4に変えます。 自機で約3万件では、ほとんどすぐに表示されました。 充分な回答でなければ質問ください。

Sheep17
質問者

補足

できました!伝票番号が文字列設定で入力されていたものがあって並べ替えができていなかったようです。BOOK1を閉じてもちゃんとBOOK2のデータは表示されるのもわかって安心しました。 ここでもう1つ質問なのですが、このVLOOKUP関数で表示させた後にコピーして値に変換したほうがよいのでしょうか。(データが重くなるのがちょっと心配です) kenken0001さんが使っていて今まで特に問題はなかったですか? 注意すべき点などあったら教えてください。

その他の回答 (1)

回答No.2

無事うまくいったようで おめでとうございます。 補足の件ですが たしかにデータは重たいですが 計算式とデータではそれほど 変わらないかもしれません。 (計算式を値にしても△) 変わるのは、ちょこちょこ シートを変更することがあるかどうかによります。 変更するたびに再計算の処理をするので 頻繁に開いて更新することがある時は 問題が無ければ、再計算の中止設定をします。 (お手数ですが、不明な場合は再度質問下さい) → データではなく処理の重さについて データについては、 繰り返し出てくるものに関して全てを 実データで表示すると重たくなります。 具体的には「得意先名」です。 限られたものだけなら 出力されるデータを「得意先コード」として出力し エクセルで「得意先名」に変換することで ものによりますが軽くなると思います。 (これも詳しくは質問下さい) ただ、 質問に書かれた内容だけですが 実際のエクセルで作ってみましたが データ数3万件 CPU P200 メモリ 96MB WIN95 Excel97 と、かなりgoodなマシンですが 入力→パタパタ と、結構快適に表示してましたので このままでもわたしとしては そんなには重たくないですね。 どのような表、処理かで違いますが (質問では書かれていない内容があり もう少し複雑とか) その辺がもう少し分かると 何かできることもあるかもしれません。 あまり大したことを書けなくてすいません。 何かありましたら小さなことでも結構です、質問下さい。 がんばって下さい。 ではでは。

Sheep17
質問者

お礼

丁寧な回答ありがとうございました。おかげさまで無事設定を終了することができました。データの重さも処理の速度も問題なさそうです。このままうまく稼動して問題が起きないことを祈るのみです。

関連するQ&A

  • VLOOKUP関数以外によい方法はないでしょうか?

    Excel2002 で売上帳を作成しました。 得意先名は、得意先コード表という別のブックを作成し、「VLOOKUP」関数で「番号」を入力すると得意先名のセルに表示されるようにしたのですが、得意先名が250件を超え、得意先名の番号を捜すのが大変だと言われてしまい、なんとかもっと簡単に得意先名が表示されるようにできないのか。例えば、入力するセルに頭文字の「あ」を入力すると「あ」から始まる得意先名のリストが表示されるようにできないのかと言われたのですが、Excel でそんなことができるのかどうかもわからず、こちらで質問させていただきました。宜しくお願いいたします。

  • [VBA]別ブックにあるシートの終端セル位置の取得

    こんにちは、VBA(EXCEL2000)の質問です。 Book1のSheet1をアクティブにしたままでBook2のSheet1のA列の終端セル位置を取得したいと思っています。 WorkBooks("Book2").WorkSheets("Sheet1").Range("A65536").End(xlUp).Select で、取得できるかと思ったのですが、調べてみたらSelectメソッドは対象シートが アクティブでないとエラーになるとの事でしたので、使えませんでした。 他にこれの代わりになるような書き方があれば教えて頂きたく思います。 また、VBAでは実現不可能だという場合もその旨を教えて頂ければ幸いです。 よろしくお願い致します。

  • 同じフォルダー内の別ブックで計算結果を入力

    Aブックsheet1をActiveしており同じフォルダー内にあるBブックのsheet1の検索値"A2"のVLooKUPで出した計算結果13の値のみをAブックsheet1 セル"A2"に入力したいのですが。Excel関数は解るのですがVBA関数となると難しくどなたか解るかた宜しくお願いします。因みにBブックは閉じています。

  • 他ブックからのデータ検索・コピー(VBA)

    【Book2】(Sheet2)L1に「12-1」を入力 ↓ 【Book1】(Sheet1)で「12-1」をM列、T列、AA列から検索→M4に「12-1」があった ↓ 【Book1】(Sheet1)N4:S4のデータを【Book2】(Sheet2)M1:R1にコピー 各ブックは同一ファイルに保存 検索する文字列の重複はなし 現在は関数≪VLOOKUP≫を使い上記を行っています。 マクロを使った方がスムーズに処理できるのでしょうか。 マクロを使う場合はどのような方法が良いのでしょうか。 データ数は1000行程度、各行の25個のセルに≪VLOOKUP≫関数が入っています。

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • 他のExcelアプリケーション上のbookにアクセス

    今、VBAのプログラミングをしています。 そこで、マクロの含まれているExcelアプリケーション上から、別のExcelアプリケーション上のbook(マクロなし)に対して、何らかのアクセス(指定したbookをCloseさせるなど)を行いたいと思っているのですが、可能なのでしょうか。 もし、可能であればその方法を教えていただけると助かります。 宜しくお願い致します。 例.ExlApplication1      →    ExlApplication2 book1(マクロ含む) →    book2(マクロなし)   この状況において、book1のマクロによってbook2を閉じる処理を行  いたい。

  • VBAで拡張子の表示について

    こんにちは。 現在、Excelで簡単な集計表を作るためにVBAを使っています。 そしたら、自分のパソコンでは動くのですが、他のパソコンで実行したら動かないという現象が起きました。 ひっかかったのは下の文です。 Workbooks("Book1.xls").Close saveChanges:=False "Book1.xls"を"Book1"に訂正したら使用できたのですが、今度は逆に、自分の所でエラーが出てしまいました。 どなたかご存知のかた教えてください。 環境はWIN_NT、Excel97です。 よろしくお願いします。

  • Excel 別々のBookの照合と値の返し方

    いつもお世話になっております。 質問するカテゴリを間違えてしまったので、重複してしまい申し訳ありません。 エクセルのデータで別々のBookの照合をしたいと思い、VLOOKUPで試しましたが、上手くできませんでした。。。 画像を添付しましたので、それにそって質問したいと思います。 (1)Book1のB列に式を入れたい。 (2)Book1のA列とBook2のA列の照合を行いたい。 (3)同じ内容なら、その隣のセル(Book2のB列に入っている値)を(1)に表示させたい。 というものです。この場合どのような関数式を入れたらよいのでしょうか。 以上、宜しくお願い致します。

  • エクセルVBAで別ブックの条件検索

    VBA初心者です。エクセルは2007です。 『データのあるブック(Book1,Book2,Book3)』と、『検索条件シート+出力先シートをもつブック』の4つのブックがあります。 検索条件シートで、L22でブック、P22でシートを指定してN22に入力した数に対応するデータをVlookupで出力先シートのセルに抽出されるようにしたいのですが、※の部分で「エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」とでて実行できません。 データのあるブックは同じ形式でシートには表があります。 数 a b c d 1 A B C D 2 ○ × △ ■ 3 Z Y X W     ・     ・ 検索条件がL22=3,P22=2,N22=2だとすると、Book3の2枚目のシートを検索し、 出力先シートのD1=○,J6=×,L23=△,J69=■となるようにしたいです。 本やインターネットで調べましたがわかりませんでした。 解決方法を教えていただきたいです。お願いします。 Sub 検索() Dim a, b, c, d As Range Dim 番号, ブック, シート As Integer With Workbooks("検索.xlsm").Sheets("検索条件") 数 = .Range("N22").Value ブック = .Range("L22").Value シート = .Range("P22").Value End With Dim wb As Workbook Dim sh As Worksheet Dim set範囲 As Variant With Workbooks("検索条件.xlsm").Sheets("出力先") Set a = .Range("D1") Set b = .Range("J6") Set c = .Range("L23") Set d = .Range("J69") End With Select Case ブック Case 1 Set wb = Workbooks("Book1.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case 2 Set wb = Workbooks("Book2.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case 3 Set wb = Workbooks("Book3.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case Else MsgBox "nothing", vbExclamation, "nothing" End Select ※Set set範囲 = wb.sh.Range("A4:E42")  ←エラー438 a = Application.WorksheetFunction.VLookup(数, set範囲, 2, False) b = Application.WorksheetFunction.VLookup(数, set範囲, 3, False) c = Application.WorksheetFunction.VLookup(数, set範囲, 4, False) d = Application.WorksheetFunction.VLookup(数, set範囲, 5, False) End Sub

  • [EXCEL2007]VBAからの別ブック参照VLOOKUPについて

    初めまして。 EXCEL2007で、VBAからFORMULA式を使って別ブックを参照するVLOOKUPを埋め込もうとしています。 このとき、対象となる別ブックのシートに、検索値に合致する情報がないと、「シートの選択」ダイアログが出てしまうのですが、これを出さずに、式を生かしたまま「#N/A」扱いにする(=ワークシート上でVLOOKUPに失敗したときと同じ結果とする)方法はないでしょうか? いろいろ試したのですが解決策が見つかりませんでした。 実装コードはつぎのような形になってます。 Sheet1.Formula = "=VLOOKUP(B2,'[Book2.xls]Sheet1!$B1:$C255,2,FALSE)" Book2のSheet1のB1:C255に、検索キー[B2]の値があるとき、C列の値を取ろうとしています。 このとき、検索に失敗すると、コード実行中に「シートの選択」ダイアログが出てしまうので、これを回避したいのが質問の主題です。 Application.DisplayAlerts = FALSE でもダメでした。 なにか良いアイデアがありましたらご教唆願います。

専門家に質問してみよう