Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Q:VBAで他のブックのデータを検索する 方法

22 views
Skip to first unread message

Naoki Tsuji

unread,
May 29, 2000, 3:00:00 AM5/29/00
to
辻と申します。
 他のエクセルBookファイル内のag_flowと定義された部分から、セル"E8"と同じ内

のセルを検索し、一致する行のag_flowの2列目を抜き出すということをしたく、
エクセルの数式入力欄で以下のような数式(関数?)を入力してました。
  =VLookup(E8, 'D:\Work\AG.xls'!ag_flow, 2, False)

これをVBAのマクロで組みたくて試行錯誤しております。

ア) ActiveCell = " =VLookup(E8, 'D:\Work\AG.xls'!ag_flow, 2, False) "
はOKでした。

イ) ActiveCell = Application.WorksheetFunction.VLookup(Range("E8"),
Range("'D:\Work\AG.xls'!ag_flow"), 2, False)
はエラーが出て通りません。
 いろいろ試行錯誤した結果、Range("'D:\Work\AG.xls'!ag_flow")の記述が正しく
ないようだというところまではわかりましたが、どのように記述すればよいかわかり
ません。
 ア)の方法でも一応目的は達しているのですが、イ)で実行できないことが気に
なってます。
他のBookの範囲(ag_flow)をVBAで参照する正しい記述方法をお教え願えれば幸いで
す。


IshikawaShinzi

unread,
May 29, 2000, 3:00:00 AM5/29/00
to
Naoki Tsujiさんの<8grgvq$6eo$1...@news1.kcom.ne.jp>

>イ) ActiveCell = Application.WorksheetFunction.VLookup(Range("E8"),
>Range("'D:\Work\AG.xls'!ag_flow"), 2, False)
>はエラーが出て通りません。

BookをOpenする方法しか、わかりませんでした。

Option Explicit

Sub myVlookup()
'BookをOpenするとActiveCellが変わってしまうので、
'ActiveCellを取得しておきます。
Dim myActiveCell As Range
Set myActiveCell = ActiveCell
Dim myRange As Range
Set myRange = Workbooks.Open("D:\Work\AG.xls").Worksheets("Sheet1").Range("ag_flow")
myActiveCell.Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("E8"), myRange, 2, False)
End Sub


--
IshikawaShinzi funb...@d1.dion.ne.jp
マクロ集
http://www.d1.dion.ne.jp/~funbe934/excel/excel.html

keizi kounoike

unread,
May 30, 2000, 3:00:00 AM5/30/00
to
鴻池です。

"Naoki Tsuji" <tsuj...@ma.kcom.ne.jp> wrote in message
news:8grgvq$6eo$1...@news1.kcom.ne.jp...
> 辻と申します。


>  ア)の方法でも一応目的は達しているのですが、イ)で実行できないことが気に
> なってます。
> 他のBookの範囲(ag_flow)をVBAで参照する正しい記述方法をお教え願えれば幸いで
> す。
>

すでにア)の方法で,目的は達しているようなので,余計なことかもしれません。そ
の上,他のBookの範囲(ag_flow)をVBAで参照する正しい記述方法というのが,自分も
よく分かっていないのですが。取りあえず,下のようなものを書いてみました。しか
し,あまりお勧めはできません。(コ-ドが汚い,やたらActivateを使用している,
参照するBookをOpenしないとダメ等色々気に入らない所あり。でも,こうしないと簡
単に参照できなかったので仕方なくこんな具合になりました。) また,辻さんの望
んでるものと違うかもしれない。
なんか他にスマ-トな方法があれば,教えて下さい。

Sub test_lookup()
Dim wk_book, act_wk_book As Workbook
Dim wk_sheet As Worksheet
Dim t_range As Range

On Error GoTo exi

Set act_wk_book = ActiveWorkbook

For Each i In Workbooks
If i.Name = "testdata.xls" Then 'デ-タのあるブック名
Set wk_book = i
Exit For
Else
Set wk_book = Nothing
End If
Next i

If wk_book Is Nothing Then
Set wk_book = Workbooks.Open("c:\my document\excel\testdata.xls")
'デ-タのあるブックを指定
End If

wk_book.Activate
Set wk_sheet = wk_book.Sheets("sheet1")

wk_sheet.Activate
Range("ag_flow").Select
Set t_range = Selection

act_wk_book.Activate

ActiveCell = Application.WorksheetFunction.VLookup(Range("E8"), t_range,
2, False)

exi:

End Sub

--
********************************
< keizi kounoike >
********************************


0 new messages