• ベストアンサー

VBAで情報取得

Book1のA列の文字をもとに、 Book2(開いていない)からデータを取得する方法は どのような構文になりますか? <Book1> あああ <Book2> あああ  11111  東京 【やりたい事】 Book1に 11111、東京の情報を取得したい。 関数でいえばVLOOKUPです。 VBAでの方法をご存知の方ご教授お願い致します。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

VBAであっても閉じているブックを開いて検索し、検索が終わったらブックを閉じるのが原則です。決して「超簡単」ではないですよ。 DataBook.xlsのSheet1に以下のデータがあるとします 名称 コード 場所 a1   11   東京 a2   22   大阪 a3   33   京都 a4   44   名古屋 また今開いているブックのA1セルに検索したい値(仮にa4)がある場合、B1セルに「44」、C1セルに「名古屋」を表示させるマクロサンプルは以下です。 実際にはブックを開いていますが、画面描画を行わないことによって「見かけ上開かない」ように見えるはずです。 Sub Macro2() Dim wb, aBk As Workbook Dim aSh As Worksheet Dim idx As Integer Dim psw As Boolean Dim r As Range Const tBk = "DataBook.xls" Const tSh = "Sheet1"   Application.ScreenUpdating = False   Set aSh = ActiveSheet   For idx = 1 To Workbooks.Count     If Workbooks(idx).Name = tBk Then       psw = True       Exit For     End If   Next idx   If psw = False Then     Set aBk = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & tBk)     Set r = Worksheets(tSh).Columns(1).Find(what:=aSh.Range("a1"), _         LookIn:=xlValues, Lookat:=xlWhole)     If Not r Is Nothing Then       aSh.Range("B1:C1").ClearContents       aSh.Range("B1").Value = r.Offset(0, 1).Value       aSh.Range("C1").Value = r.Offset(0, 2).Value     End If   End If   aBk.Close False   Application.ScreenUpdating = True End Sub もし「ブックを開かない」にこだわるならADOを用いて取得する方法もあります。そのサンプルが以下です。Microsoft ActiveX Data Objects 2.X Libraryを参照設定する必要があります Sub Macro1() Dim myCom As New ADODB.Connection Dim myRst As New ADODB.Recordset Dim myCyc As String Dim mySql As String Dim myFil As String Dim idx As Long   myFil = "z:\DataBook.xls"   myCyc = "Driver={Microsoft Excel Driver (*.xls)};" & _       "DBQ=" & myFil & ";"   mySql = "SELECT * FROM [Sheet1$] WHERE 名称 = '" & Range("A1") & "'"   myCom.Open "Provider:=MSDASQL;" & myCyc   myRst.Open Source:=mySql, ActiveConnection:=myCom   Range("B1:C1").ClearContents   Range("z1").CopyFromRecordset myRst   Range("AA1:AB1").Copy Range("A2")   Range("z1").Resize(1, 100).ClearContents   myRst.Close   Set myRst = Nothing   Set myCom = Nothing End Sub どちらのサンプルも動作確認していますが、いずれにしても質問内容だけで書けるのはこの程度です。実際のシートにあわせて修正するのにもそれなりにマクロ知識が必要です。 そこまではおつきあいできませんが、がんばってください。

sMyamYs
質問者

お礼

ありがとうございます。 やはり、難しいのですね。 あまりにも難しいようでしたら、アクセスでの方法もかんがえてみます。

その他の回答 (1)

  • uturogi_k
  • ベストアンサー率37% (6/16)
回答No.1

こんにちわ 他のEXCELより情報を取得する方法はさまざまありますが DAOを使用して接続すれば比較的簡単に他EXCELファイルからの読み込みが可能かと思われます。 以下に参考になるURLを送付します。 http://homepage.mac.com/sunagoh/excelvba.html 該当部はこちら http://homepage.mac.com/sunagoh/excel/db000201.html この接続方式を使用するには参照設定で Microsoft DAO 3.6 Object Libraryにチェックを入れる必要がありますのでご注意ください ご参考になれば幸いです。

sMyamYs
質問者

お礼

ありがとうございます。 参考にしてみます。

関連するQ&A

  • VBAで別のファイルから情報を取得

    A列に6ケタコードが入力されています。 このコードを元に、別のファイルから情報を取得したいのですが AAAだったらBook1から、 ABCだったらBook2からというように コードの上3ケタによって読みに行くファイルを指定したいのですが、 どのような構文になりますか? ご存知の方、ご教授お願い致します。 ---例--- AAA001 Book1の、同じコードのA~Z列までを取得 ABC005 Book2の、同じコードのA~Z列までを取得

  • 他ブックからのデータ検索・コピー(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】アクティブセルが参照しているブックを開くには?

    いろいろ検索したのですが、見つからないので質問させていただきます。 対象のセルが他ブックのセルを参照しているとき、そのブックが開かれていない場合、正しい値にはなりません。 (例:A1に =[Book2.xls]Sheet1!$A$3 が入力されている) そこで、そのセルが参照しているブックをVBAで自動的に開く方法を考えています。 つまり、例で言えば、Book2.xlsを開きたいのです。 文字列関数を使ってひとつひとつの文字を取得し、ファイル名を得て開く方法しかないのでしょうか? 何かいい方法があれば教えてください。 よろしくお願いします。

  • VBAでシリアル値を取得する方法

    VBAでシリアル値を取得する方法を教えていただけないでしょうか テキストデータで 20140810の形でデータがあります。 このデータをもとに、2014年8月10日のシリアル値である41861を取得したいのですが、その方法を調べてもわからないので、教えていただけないでしょうか エクセルの関数のDATEVALUEのような関数をVBAの中でも使い41861を取得したいです。 シリアル値 取得 と検索すると、DateSerial関数がでてきますが違うようです。 わからなくなってきたので、アドバイスをお願いいたします。

  • [Excel VBA 2003]VBA上でVlookupする方法

    レンジ内に特定の文字列が存在するかをVBA上で判定したいのですが VBA上ではVLookUpが使用できません。VBAでVLookUpのかわりとなる 関数または方法はありますか?

  • Excel VBAのVLOOKUP関数について

    Excel VBAのVLOOKUP関数について VBAでのVLOOKUPで他のブックを使用する場合の方法がわかりません。 ブックαにて参照したい他のブックβのパスやファイル名、シート、セルは保持しております。 同一ファイル内では取得することができたのですが、他のブックではうまくいきません。 また、VLOOKUP関数にて取得できた場合、取得したセルの下に1段、左に1段目のセルを取得したい場合どうすればいいのでしょうか? 環境はEXCEL2003です。 ご存知の方がいれば教えてください!

  • EXCEL VBAについて

    VBAでCSVファイルをテンプレートのBBOKに読込むコードを 作り、CSVファイルから読込んだBOOK1データを集計する BOOK2を作成しています。 BOOK1・11/21・・・11/21・・・11/22・・・11/23と続きます      A     B     C      D 1  ID     店名   売上    日付 2 1104567   渋谷店  190,809   11/21 3 1102031   新宿店  209,808   11/21 4 1103450   横浜店  108,765   11/21 BOOK2・集計      A    B    C       D       E 1  ID   店名   11/21    11/22     11/23 2 1104567  渋谷店  190,809   203,487 3 1102031  新宿店  209,808   340,876 4 1103450  横浜店  108,765   547,627 ※BOOK1とBOOK2のIDの並び順は一致していません。 上記のBOOK1のデータをBOOK2に読込ませたいと考えています。 VLOOKUPやINDEX関数を使用しようかと考えたのですが、日付毎に ファイル名が違うのと、集計のファイルには外部参照をさせたくないと 考えています。 VBAで作成したいコードはBOOK1からBOOK2の日付のセルにIDを検索条件として日付毎のファイルを読込ませたいです。 フォームで日付を入力し、コピーするBOOK2のセルを指定後、BOOK1を選択するためにダイアログボックスを出したいです。 BOOK2のIDを検索条件としてBOOK1から一致する売上セルを抽出するコードだけでもわかれば何とか作成できそうなのですが、 ご教授いただけませんでしょうか?

  • エクセル、VBA、抽出複数検索について

    エクセル、VBA、VLOOKUP、MATCH関数等について出来る方法があれば教えてください。 インチごとに分けてあるシートがあり、(在庫表です) これを参照して、別ブックへVLOOKUP等を使って、サンプルデータのシート4のように表示させたいのですが、 何か方法を使って出来ることは可能でしょうか? 問題点が複数あります 1、VLOOKUPの範囲について、B列が結合されていて、C列は複数行あるため、商品名が入ってきません。 C列については、何千件とデータがあるため、結合することは不可能です。 一致している条件としては商品コードが必ずあり、商品名には「/」が入っております。 =CONCATENATEとVLOOKUPは一緒に使うことは可能ですか? もしくはINDEX関数やIF、SUMPRODUCT等を使うのでしょうか? シート4のような形に出来る方法があれば、教えてほしいです。 VBAは詳しくはないのですが、VBAで出来るのであれば、教えてほしいです。 在庫表はとても作り方が悪いのですが、これを作り直すと言うことは、不可能です。 グループ会社で使っているため、なんとかこの在庫表を使いたいです。 VBAでA列をA5からA100にコードのみ入れた場合、B列に商品名が入るようにVBAで作ることは可能でしょうか? もしくは、検索条件を2つ使って、一つは商品コード完全一致+あいまい検索で【/】で商品名を入れることは可能でしょうか? 関数は調べたのですが、関数では難しいのかなと思います。 宜しくお願い致します。

  • vbaでvlookup

    エクセルのVBAについて。 指定した範囲の中から検索条件に一致したデータを検索し、取り出してくれる関数vlookup をVBAで実現したいのですが、 目標として、エクセルのセル(列)に、値を入力されているとします。 VBAを実行するボタンをクリックすると、、、 その値に対応する文字列(事前に用意)をその値の右のセルに自動で入力させたいです。 このVBAを作ることが目標です。 vbaでvlookupを実現でなくても、それよりも簡単な方法があれば教えていただきたいです。 お手数ですが、よろしくお願いします。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

専門家に質問してみよう