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

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

新規登録して質問してみよう
ただいま回答率
85.35%
参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

VBA

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

1473閲覧

INDEX+MATCH関数で参照するエクセルを都度選択できるようにしたいです

opsy

総合スコア5

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

VBA

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/12/01 07:48

前提・実現したいこと

VBA初心者です。
INDEX+MATCH関数で参照するエクセルを都度選択できるようにしたいです。
何卒宜しくお願い申し上げます。

発生している問題・エラーメッセージ

現在フルパスを指定して、INDEX+MATCH関数で参照するエクセルを設定させる
コードを作成したのですが、対象となるエクセルは使用する都度変化するため、
実行する度にエクセルファイルを選択できるようなコードが書けないものか悩んでいます。

※下記コードでいうところの「XXXXXXX.xlsx」を尋ねてきて、
ファイルを選択できるようなコードにしたいです。

該当のソースコード

VBA

1Option Explicit 2 3Sub 検索() 4 5 Dim res As Worksheet 6 Dim z As Long 7 Set res = Worksheets("result") 8 z = res.Cells(res.Rows.Count, "A").End(xlUp).Row 9 10Debug.Print res.Name, z 11 12 Dim sPath As String, fn As String 13 Dim wb As Workbook 14 Dim ws As Worksheet 15 Dim rng1 As Range, rng2 As Range 16 sPath = "C:\Users\XXXXXXX\Desktop\XXXXXXX.xlsx" 17 fn = "XXXXXXX.xlsx" 18 For Each wb In Workbooks 19 If wb.Name = fn Then Exit For 20 Next wb 21 If wb Is Nothing Then 22 Set wb = Workbooks.Open(Filename:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) 23 End If 24 Set ws = wb.Worksheets("sheet1") 25 Set rng1 = ws.Range("I1:AM" & ws.Cells(ws.Rows.Count, "AM").End(xlUp).Row) 26 Set rng2 = ws.Range("AM1:AM" & ws.Cells(ws.Rows.Count, "AM").End(xlUp).Row) 27 28Debug.Print wb.Name, ws.Name, rng1.Address, rng2.Address 29 30 Dim i As Long 31 Dim x As String 32 For i = 2 To z 33 '発注番号を取得 34 x = res.Cells(i, 3).Value 35 '納品予定日の値を表示 36 With Application.WorksheetFunction 37On Error Resume Next 38 res.Cells(i, 7).Value = .Index(rng1, .Match(x, rng2.Value, 0), 1) 39On Error GoTo 0 40 End With 41 42Debug.Print i, x, ws.Name, res.Cells(i, 7).Value 43 44 Next 45End Sub

試したこと

色々ネットを検索してみたのですが、近しい内容の記述が見つからず、
困り果ててしまい、こちらで質問させていただきます。

補足情報(FW/ツールのバージョンなど)

Excel for Microsoft 365 を使用しています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

VBA

1 With Application.FileDialog(msoFileDialogFilePicker) 2 .Show 3 If .SelectedItems.Count = 0 Then Exit Sub 4 sPath = .SelectedItems(1) 5 End With 6

投稿2021/12/01 08:02

jinoji

総合スコア4592

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

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

opsy

2021/12/01 08:32

すぐにご回答くださり、ありがとうございます。 また、先日に引き続いてのご回答、重ねて御礼申し上げます。 上手くいきました!本当に感謝です。 宜しくお願い申し上げます。
guest

0

「VBA ファイル選択」をキーワードにWEB検索すれば、サンプルコードがすぐ見つかります。

例えば、

[ファイルを開く]ダイアログボックスを表示する(GetOpenFilenameメソッド):Excel VBA|即効テクニック|Excel VBAを学ぶならmoug

投稿2021/12/01 07:59

hatena19

総合スコア34075

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

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

opsy

2021/12/01 08:30

すぐにご回答くださり、ありがとうございます。 一応検索はしたつもりなのですが…根気不足かもしれません。 恐れ入ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問