質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

2回答

1680閲覧

VBA:Vlookupで別のブックのすべてのシートを検索範囲に設定する方法

abcdefg12345

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/04/02 09:44

前提・実現したいこと
VBA:Vlookupで別のブックのすべてのシートを検索範囲に設定する方法

ここに質問の内容を詳しく書いてください。
(例)エクセルVBAでWorkbook("A.xlsm")のA列を検索値として、("B.xlsx")のA列に該当するものがあれば、("A.xlsm")のL列を("B.xlsx")のQ列にコピーするマクロを作成中です。
実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ
オブジェクトが必要です。

エラーが出る該当のソースコード
Set SerchRange = ws.Range(ws.Cells(2, 1), ws.Cells(100001, 1))

Sub データ戻す用() Workbooks.Open ("B.xlsx") If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If Dim SerchKey '検索値 Dim SerchRange '検索範囲 Dim OutputRange '出力範囲 Dim i As Long Dim ws As Variant For Each ws In _ Array("aa", "bb", "cc", "dd", "ee", "ff") Debug.Print ws Set SerchKey = Workbooks("A.xlsm").Worksheets(2).Range("A2:A100001") Set SerchRange = ws.Range(ws.Cells(2, 1), ws.Cells(100001, 1)) Set OutputRange = Workbooks("A.xlsm").Worksheets(2).Range("L2:L100001") Application.ScreenUpdating = False For i = 1 To SerchKey.Rows.Count OutputRange(i, 1) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, 17, False) Next Next Application.ScreenUpdating = True End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

B.xlsxブックに "aa", "bb", "cc", "dd", "ee", "ff" という名前のシートがあるということですよね。

現状のコードだと ws には "aa" というような文字列が格納されてます。
エラー行のコードはを下記の意味になります。

'Set SerchRange = "aa".Range("aa".Cells(2, 1), "aa".Cells(100001, 1))'

当然エラーになりますね。文字列は Range とか cells は持ちませんので。

vba

1With Workbooks("B.xlsx").Worksheets(ws) 2 Set SerchRange = .Range(.Cells(2, 1), .Cells(100001, 1)) 3End With

投稿2021/04/03 01:02

hatena19

総合スコア33620

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

このコードにおいて ws はVariant(実質String)であってWorksheet型ではない、ということでは。

VBA

1Sub データ戻す用() 2 3 With Workbooks("A.xlsm").Worksheets(2) 4 Dim k As Variant, o As Range, v As Variant 5 k = .Range("A2:A100001").Value 6 Set o = .Range("L2:L100001") 7 v = o.Value 8 End With 9 10 With Workbooks.Open("B.xlsx") 11 Dim n As Variant, w As Worksheet, s As Variant, i As Long 12 For Each n In Array("aa", "bb", "cc", "dd", "ee", "ff") 13 Set w = .Worksheets(n) 14 'w.ShowAllData 15 s = w.Range("A2:Q100001").Value 16 17 For i = 1 To UBound(k, 1) 18 v(i, 1) = WorksheetFunction.VLookup(k(i, 1), s, 17, False) 19 Next i 20 Next n 21 '.Close False 22 End With 23 24 o.Value = v 25 26End Sub 27

投稿2021/04/02 10:58

編集2021/04/03 09:57
jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問