前提・実現したいこと
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 を使用しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/01 08:32