
エクセルのVBAでマクロを組み、同じフォルダ内にあるファイルにvlookup関数でリンクを張ろうかと考えています。
ファイルの構成は以下の通りです。
マクロを組んでいるファイル:Book1.xls
マクロが適応されるファイル:Book2.xls
vlookup関数で参照されるファイル:Book3.xls
実際にBook1に組んだマクロは以下の通りです。
Workbooks.Open ThisWorkbook.Path & "\Book2.xls"
Workbooks("Book2.xls").Activate
myFile = ThisWorkbook.Path & "\" & "Book3.xls"
b = 2
Do Until ActiveSheet.Cells(b, 1) = ""
ActiveSheet.Cells(b, 6) = "=VLOOKUP(E" & b & ",myFile!$A:$F,5,0)"
b = b + 1
Loop
上記マクロで実行すると、Book2が開き、vlookup関数が挿入されるところまではいきますが、
変数myFileが正常に変換されないらしく、ファイルが見つからない状態となってしまいます。
myFileの代わりにフルパスでファイルをしていすると正常にマクロは起動することは確認しましたが、
毎回作業するフォルダが変わる為、フルパス指定はできるだけ避けたいです。
基礎的な質問で恐縮ですが、
vlookup関数の引数(参照範囲)を変数で指定する方法を教えてください。
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
こんばんは。
数式を入れる時には、ActiveSheet.Cells(b, 6) のような暗黙のプロパティはやめたほうがよいです。以下は、FormulaLocal を使用していますが、通常、Formula だけで、R1C1 方式でも入力可能です。また、変数というなら、変数の宣言の習慣は付けたほうがよいですね。
実際のマクロはエラー処理や開いたブックの場合の二重のオープンの部分を避けるようにはしますが、テスト用として割愛しておきます。
相対参照の数式の場合は、ループは使いません。範囲を選択して、同じ数式を入れればよいです。その場合は、R1C1 方式のほうが便利です。
'標準モジュール
Sub Test2()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim myFile As String
On Error Resume Next
Set wb1 = Workbooks.Open(ThisWorkbook.Path & "\Book2.xls")
Set wb2 = Workbooks.Open(ThisWorkbook.Path & "\Book3.xls")
myFile = "[" & wb1.Name & "]Sheet1"
wb1.Activate '本来は、ここが曖昧。Sheet の指定が必要
With Range("A2", Range("A65536").End(xlUp))
If .Count > 1 Then
.Offset(, 5).FormulaLocal = "=VLOOKUP(RC[-1]," & myFile & "!C1:C6,5,0)"
End If
End With
Set wb1 = Nothing: Set wb2 = Nothing
End Sub
No.5
- 回答日時:
VBAとVLOOKUPの組み合わせは余り必要ない。
Findメソッドなどによって検索が行われればすむ。
ーー
VLOOKUP関数の第1引数は、即実行するため使うときは
E" & b & ",
になっているが、Range("E" & b),とでもなるのではないか?
シートの関数の場合はE3と書いても、VBAで使うときはRange("E3")のような書き方が必要と思うが。
ーー
「検索範囲のあるファイル」のセル範囲は、そのアリ場所のブックを変えられるように、考えているようにしているのは良いとして、シートの指定はどうなっているのか。
他ブックを指定したら式を入れるシートであってもシート名を
指定しないといけないのでは。
ーー
また、検索範囲のあるファイルのセル範囲は、
これもRabge(・・・)で指定しないとダメでは。
ーー
今までの経験から、こんなこが問題かと思うが、質問の書き方が荒くて(セルに式の挿入の問題か?こういうのはリンクというのかな?式を挿入したりしないでVBAで処理できるのでは)
式をVBAで埋め込むなら、Ccells(・・).Formula="式”のようになるはず。上記ならValueとして文字列を入れているのでは。
例
Sub test01()
Cells(1, 1).Formula = "=A2+A3"
End Sub
ーー
質問の標題を文字通り受け取ると、
>vlookup関数の引数を変数で指定することはできますか
VLOOKU関数には4つ引数が有る。
第何引数のことかを書かないと質問にならない。
No.3
- 回答日時:
>ご指摘の通り、""(ダブルクォーテーション)で囲むと変数と宣言していても、文字列と判断されてしまいます。
ActiveSheet.Cells(b, 6) = "=VLOOKUP(E" & b & ",myFile!$A:$F,5,0)"
この行しかありませんが
No.2
- 回答日時:
下記のようではだめなのか。
Sub test()
Workbooks.Open ThisWorkbook.Path & "\Book2.xls"
Workbooks.Open ThisWorkbook.Path & "\Book3.xls"
Workbooks("Book2.xls").Activate
myFile = "[Book3.xls]Sheet1"
b = 2
Do Until ActiveSheet.Cells(b, 1) = ""
ActiveSheet.Cells(b, 6) = "=VLOOKUP(E" & b & "," & myFile & "!$A:$F,5,0)"
b = b + 1
Loop
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
このQ&Aを見た人はこんなQ&Aも見ています
-
VLookupで参照する範囲を変数で渡したい
Access(アクセス)
-
VLOOKUP関数で別ファイルを指定するとき、ファイルのパスを変数にしたい
Microsoft ASP
-
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
-
4
別ファイルを開かず、INDIRECT関数を使用せずに、別ファイルのデータを求めたい
Excel(エクセル)
-
5
エクセル関数>参照ファイル名をセルから呼び出す
Excel(エクセル)
-
6
VBAでセル入力の数式に変数を用いたい
Excel(エクセル)
-
7
エクセル VBA VLOOKUP
Excel(エクセル)
-
8
VBA 数式を残して値をクリアについて
Excel(エクセル)
-
9
VLOOKUP関数で開いていないファイルを参照
Access(アクセス)
-
10
callで順に実行されるプロシージャを途中で止める方法
Excel(エクセル)
-
11
excel vbaでvlooupの変数がわかりません。
Visual Basic(VBA)
-
12
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
13
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
14
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
15
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
16
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
17
シート参照で変数を使いたい(EXCEL)
Excel(エクセル)
-
18
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
19
初歩的な事だと思います。 Sub または Function が定義されていません。
Visual Basic(VBA)
-
20
VBAのオートフィルターで該当行がない場合に処理を止めたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】EXCELで読込したCSV...
-
EXCEL VBA 指定したファイルが...
-
ファイルを開かずにマクロを実行
-
フォルダ内のブック全部にパス...
-
【Excel VBA】ファイル名が一...
-
Access2010 セキュリティの警告...
-
LTSpiceにLMV358-Nのモデルを入...
-
EXCELマクロを無効にして開く方法
-
フォルダ内のexcelファイルを順...
-
エクセルのxls形式からxlsx形式...
-
【マクロ】名前を保存する際に...
-
VBAでワークブックの名前を変数...
-
エクセルマクロで不特定なファ...
-
VBA 新規にエクセルを開き既存...
-
accessフォルダを移動したらフ...
-
エクセルVBAで送る操作
-
ACCESSのマクロを自動で実行さ...
-
リンク切れチェックを行うマクロ
-
SETを使ったほうがよい?
-
ファイルの保存場所を変えたら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL VBA 指定したファイルが...
-
【マクロ】名前を保存する際に...
-
フォルダ内のexcelファイルを順...
-
エクセルマクロで不特定なファ...
-
ファイルを開かずにマクロを実行
-
【Excel VBA】ファイル名が一...
-
VBAでワークブックの名前を変数...
-
データ参照先が別ファイルの場...
-
エクセル(マクロ)のファイル...
-
フォルダ内のブック全部にパス...
-
エクセル 複数ファイルの一括...
-
エクセルファイルを開く時、関...
-
秀丸:あらかじめ設定した複数...
-
EXCELマクロを無効にして開く方法
-
Excelのマクロでファイルを開く...
-
accessフォルダを移動したらフ...
-
ファイルの保存場所を変えたら...
-
エクセルファイルをHTML化する...
-
エクセルのシートの数を数えた...
-
ACCESS VBAでファイルを開くダ...
おすすめ情報