
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
どちらのサンプルも動作確認していますが、いずれにしても質問内容だけで書けるのはこの程度です。実際のシートにあわせて修正するのにもそれなりにマクロ知識が必要です。
そこまではおつきあいできませんが、がんばってください。
No.1
- 回答日時:
こんにちわ
他のEXCELより情報を取得する方法はさまざまありますが
DAOを使用して接続すれば比較的簡単に他EXCELファイルからの読み込みが可能かと思われます。
以下に参考になるURLを送付します。
http://homepage.mac.com/sunagoh/excelvba.html
該当部はこちら
http://homepage.mac.com/sunagoh/excel/db000201.h …
この接続方式を使用するには参照設定で
Microsoft DAO 3.6 Object Libraryにチェックを入れる必要がありますのでご注意ください
ご参考になれば幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するQ&A
- 1 A列データとB列データが対応している時C列(B列データの一部)の値に対応するA列データを 表示する。
- 2 Excel2013 VBA A列とB列の文字をA列とB列とC列に移動させる方法
- 3 Excelで重複確認をしたい。 シート2のA列からF列にあるデータと、シート3のA列からF列にあるデ
- 4 【エクセル】A列の最終行+1を取得するを、A列の最大値+1を取得するに変更するには?
- 5 A列とB列の重複を抽出したいのですがA列とB列の値は一部だけ同じ文字です。ご教示お願いします。
- 6 データの抽出方法教えてください A列=A商店、B商店 B列=1商品、2商品 とします。 このデータか
- 7 【マクロ】A列をみて同じ番号のE~I列のデータを取得したい
- 8 A列のデータの重複を取り除いてC列に表示。ただし、B列に存在するデータはC列に表示させない
- 9 VBAで A列のデータを5行ずつ、改列して並べたい
- 10 行のデータ(a列b列c列)をd列に表示したい
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
Excelの文書比較
-
5
複数のExcelファイルの印刷設定...
-
6
エクセル関数>参照ファイル名...
-
7
外部ブック参照が#REF!になって...
-
8
エクセルでSheetの数は最大限ど...
-
9
EXcelのマクロで相対パスでファ...
-
10
EXCEL VBAマクロ作成で、他のEX...
-
11
複数のExcelブックから特定シー...
-
12
エクセルで複数ファイルのセル...
-
13
エクセル ブック間 串刺し(...
-
14
EXCELのVBAでシートコピーをし...
-
15
Application.DisplayAlerts =Fa...
-
16
VBAでブック名の拡張子を除去し...
-
17
フォルダ内の全ブックのシート...
-
18
エクセルで50行ごとに区切った...
-
19
VBAで他のブックのシートにボタ...
-
20
エクセルで別ブックをバックグ...