ここから本文です

VBAでVLOOKUPを使用して別ブックからデーターを抽出したいのですが上手く行きませ...

for********さん

2013/8/2918:18:44

VBAでVLOOKUPを使用して別ブックからデーターを抽出したいのですが上手く行きません。

エクセルのVBAで困っております。お助けをお願いします。

別途共有フォルダーにおいておりますエクセルの住所録からデーターの抽出を試みておりますが、上手くいきません。
住所録.xlsは \\共有フォルダ\\住所録 に入っております。

Sub 住所抽出()

Worksheets("入力シート").Range("B23").Value = Application.VLookup(Worksheets("入力シート").Range("B22").Value,"\\共有フォルダ\\住所録\\"Worksheets("住所録").Range("$A$2:$H$10"), 2, False)

End Sub

同一ブックにあるシートですと上手くデータを引っ張ってくるのですが、上手く機能してくれません。
何卒ご助力をお願い致します。

補足早速のご回答ありがとうございます。ご指摘されている通りでBook名が入っておりませんでした。
検索したい情報は\\共有フォルダ\\住所録\\住所録.xlsx の住所録タブに入っております(紛らわしくですいません。)
ただ、

Worksheets("入力シート").Range("B4").Value = Application.VLookup(Worksheets("入力シート").Range("B3").Value,"'\\共有フォルダ\\住所録\\"Workbook("住所録").Worksheets("住所録").Range("$A$2:$H$10"), 2, False)

とすると、,"'\\共有フォルダ の'の部分で構文エラーが出てしまいます。

又、出来れば住所録.xlsxは呼び出さずに処理出来ればと思っております。

閲覧数:
31,118
回答数:
2
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

ish********さん

編集あり2013/8/3010:38:58

ワークシート関数はWorksheetFunctionで
呼び出します
Application.WorksheetFunction.

>,"\\共有フォルダ\\住所録\\"Worksheets("住所録").Range("$A$2:$H$10")
これへんですよ
ブック名がない

サンプルです
Dim WB As Workbook
Dim WS As Worksheet
Dim RG As Range
Set WB = Workbooks("test2.xlsx")
Set WS = WB.Worksheets("Sheet1")
Set RG = WS.Range("A1:B5")
Cells(2, 2) = Application.WorksheetFunction.VLookup(Cells(2, 1), RG, 2)

このコードだと Workbooks("test2.xlsx") は 開いておかないと
エラーになります
VLookup(Cells(2, 1), RG, 2)するたびに 開いたり 閉じたりするのは
よくないので 最初に開く モジュールを 作るといいですね

追記
>出来れば住所録.xlsx
エラーになります

オブジェクトの設定がわからないのかもしれませんが
パスの設定が間違っています
フォルダーの区切りは\です\\ではありません
1行で書いてしまうと どこでエラーを起こしているかわからないので
私が書いたコードのように
分けて書くとエラーがどこなのかわかりやすくなります

Excelを使うコツは オブジェクトを明示的に使うことです
そのために下記の宣言をしています
Dim WB As Workbook
Dim WS As Worksheet
Dim RG As Range

質問した人からのコメント

2013/8/31 02:23:50

結局、住所録.xlsxを呼び出さずにデーター抽出は断念して、ご指摘頂きました、『最初に開いてデーター取得後に閉じる』というモジュールを作り対処致しました。
参考になりました。ありがとうございます。
ヒントを頂きました両名に心より感謝致します。

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

tra********さん

編集あり2013/8/3012:50:19

>同一ブックにあるシートですと上手くデータを引っ張ってくるのですが
検索対象のブックを開いた状態で、VLOOKUPの関数式を数式バーから、逐一入力して、
検索対象のブックを閉じてみてください。
そのとき表示される関数式を文字列にできれば、質問者さんのやりたいことができます。
とりあえず、ブック名が解らないので、
「\\共有フォルダ」にある、ブック:住所録.xlsx の シート:住所録
のセル範囲が検索対象とすると、

Sub 住所抽出()
Const xFormula As String = "=VLOOKUP(#1,'\\共有フォルダ\住所録\[住所録.xlsx]住所録'!$A$2:$H$10,2,FALSE)"
With Worksheets("入力シート").Range("B23")
.Formula = Replace(xFormula, "#1", .Offset(-1).Value)
.Value = .Value '式を消す
End Sub

といった感じになります。
関数式を使いたくない、というのなら

Sub 住所抽出()
Dim wkb As Workbook
Set wkb = Workbooks.Open(Filename:="\\共有フォルダ\住所録\住所録.xlsx")
With Worksheets("入力シート").Range("B23")
.Range("B23").Value = _
Application.VLookup(.Offset(-1).Value, wkb.workssheets("住所録").Range("$A$2:$H$10"), 2, False)
End With
wkb.Close savechanges:=False
End Sub

のような具合ですね。

上記コードは未実行のため、結果は保証できません。

追伸
先の回答者さんの指摘
>ワークシート関数はWorksheetFunctionで呼び出します
は指摘内容限定ではありません。
Applicationオブジェクトのメンバーに、VLOOKUP関数は存在します。
ので提示のコードで文法的に正しいものです。

《返信》
>とすると、,"'\\共有フォルダ の'の部分で構文エラーが出てしまいます。
式で使う時の関数とVBAのWorksheetFuctionでは、書式が異なります。
Helpの解説や参考書などで、復習し、回答のコードをもう一度確認してください。

>又、出来れば住所録.xlsxは呼び出さずに処理出来ればと思っております。
一番最初のコードが住所録.xlsxを開かずに処理しているものと思っているのですが。。。。
コードの1行目の
Const xFormula As String = "=VLOOKUP(#1,'\\共有フォルダ\住所録\[住所録.xlsx]住所録'!$A$2:$H$10,2,FALSE)"
をお好きなフォルダーに書き換えてください。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる