- ベストアンサー
VBAで情報取得
- みんなの回答 (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 どちらのサンプルも動作確認していますが、いずれにしても質問内容だけで書けるのはこの程度です。実際のシートにあわせて修正するのにもそれなりにマクロ知識が必要です。 そこまではおつきあいできませんが、がんばってください。
その他の回答 (1)
- uturogi_k
- ベストアンサー率37% (6/16)
こんにちわ 他の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にチェックを入れる必要がありますのでご注意ください ご参考になれば幸いです。
お礼
ありがとうございます。 参考にしてみます。
関連する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≫関数が入っています。
- ベストアンサー
- Visual Basic
- 【Excel-VBA】アクティブセルが参照しているブックを開くには?
いろいろ検索したのですが、見つからないので質問させていただきます。 対象のセルが他ブックのセルを参照しているとき、そのブックが開かれていない場合、正しい値にはなりません。 (例:A1に =[Book2.xls]Sheet1!$A$3 が入力されている) そこで、そのセルが参照しているブックをVBAで自動的に開く方法を考えています。 つまり、例で言えば、Book2.xlsを開きたいのです。 文字列関数を使ってひとつひとつの文字を取得し、ファイル名を得て開く方法しかないのでしょうか? 何かいい方法があれば教えてください。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VBAでシリアル値を取得する方法
VBAでシリアル値を取得する方法を教えていただけないでしょうか テキストデータで 20140810の形でデータがあります。 このデータをもとに、2014年8月10日のシリアル値である41861を取得したいのですが、その方法を調べてもわからないので、教えていただけないでしょうか エクセルの関数のDATEVALUEのような関数をVBAの中でも使い41861を取得したいです。 シリアル値 取得 と検索すると、DateSerial関数がでてきますが違うようです。 わからなくなってきたので、アドバイスをお願いいたします。
- ベストアンサー
- Excel(エクセル)
- [Excel VBA 2003]VBA上でVlookupする方法
レンジ内に特定の文字列が存在するかをVBA上で判定したいのですが VBA上ではVLookUpが使用できません。VBAでVLookUpのかわりとなる 関数または方法はありますか?
- ベストアンサー
- Visual Basic
- Excel VBAのVLOOKUP関数について
Excel VBAのVLOOKUP関数について VBAでのVLOOKUPで他のブックを使用する場合の方法がわかりません。 ブックαにて参照したい他のブックβのパスやファイル名、シート、セルは保持しております。 同一ファイル内では取得することができたのですが、他のブックではうまくいきません。 また、VLOOKUP関数にて取得できた場合、取得したセルの下に1段、左に1段目のセルを取得したい場合どうすればいいのでしょうか? 環境はEXCEL2003です。 ご存知の方がいれば教えてください!
- ベストアンサー
- その他MS Office製品
- 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つ使って、一つは商品コード完全一致+あいまい検索で【/】で商品名を入れることは可能でしょうか? 関数は調べたのですが、関数では難しいのかなと思います。 宜しくお願い致します。
- ベストアンサー
- Excel(エクセル)
- vbaでvlookup
エクセルのVBAについて。 指定した範囲の中から検索条件に一致したデータを検索し、取り出してくれる関数vlookup をVBAで実現したいのですが、 目標として、エクセルのセル(列)に、値を入力されているとします。 VBAを実行するボタンをクリックすると、、、 その値に対応する文字列(事前に用意)をその値の右のセルに自動で入力させたいです。 このVBAを作ることが目標です。 vbaでvlookupを実現でなくても、それよりも簡単な方法があれば教えていただきたいです。 お手数ですが、よろしくお願いします。
- 締切済み
- Excel(エクセル)
- 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
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます。 やはり、難しいのですね。 あまりにも難しいようでしたら、アクセスでの方法もかんがえてみます。