前提・実現したいこと
VBA初心者です。
VBAでCSVをエクセル形式で開いたものに、さらにマクロを実行させたいと思っています。
何卒宜しくお願い申し上げます。
発生している問題・エラーメッセージ
VBAでCSVをエクセル形式で開いたものに、さらにマクロを実行すると上手くいきません。
具体的にはVBAでCSVをエクセル形式で開き、INDEX MATCH関数を用いて、
ほかのエクセルファイルを参照させて、値が自動で入力されるマクロを作ろうとしています。
CSVファイルの読み込みはできるのですが、そのファイルに別のモジュールで
INDEX MATCH関数を実行させると全く反応しません。
※手作業でCSVをエクセルで開いたものに、同様のマクロを実行すると上手くいきます。
該当のソースコード
●CSVファイルをエクセルで開くVBAのコードは以下です。
VBA
1Public Const targetsheet = "result" 2'結果を出力するシート名を指定 3 4Sub CSV取り込みUTF8() 5 6Dim SettingFileName As Variant 7 8Sheets(targetsheet).Cells.Clear 9'ファイルクリア 10 11SettingFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ 12Title:="CSVファイルの選択") 13If SettingFileName = False Then 14Exit Sub 15End If 16 17With Sheets(targetsheet).QueryTables.Add(Connection:="text;" & SettingFileName, Destination:=Sheets(targetsheet).Range("A1")) 18.TextFilePlatform = 65001 'UTF-8 19.AdjustColumnWidth = False '列の幅を自動計算しない 20.TextFileCommaDelimiter = True 'コンマ区切り 21.TextFileColumnDataTypes = Array(xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat) 22.Refresh BackgroundQuery:=False 'シートに出力 23 24.Delete 25End With 26 27Sheets(targetsheet).Activate 28 29End Sub
●INDEX MATCH関数を用いて、ほかのエクセルファイルを参照させ、
値が自動で入力されるVBAのコードは以下です。
(ほかにも、値がある場合は1を、ない場合は3を返し、日付形式に変換する関数を
組み込んでいます)
VBA
1Option Explicit 2 3Sub 検索() 4Dim i As Integer 5Dim z As Integer 6Dim j As Integer 7Dim y As Integer 8 Dim x As String 9 Dim ex As New Excel.Application 10 Dim sPath As String 11 Dim wb As Workbook 12z = Worksheets("result").Cells(Rows.Count, "G").End(xlUp).Row 13For i = 2 To z 14 '発注番号を取得 15 x = Cells(i, 3).Value 16 '開くブックを指定 17 sPath = "C:\Users\XXXXXXX\Desktop\XXXXXXX.xlsx" 18 '読み取り専用で開く 19 Set wb = ex.Workbooks.Open(Filename:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) 20 With ActiveSheet 21 '納品予定日の値を表示 22On Error Resume Next 23 Cells(i, 7).Value = _ 24 Application.WorksheetFunction.Index(wb.Worksheets("sheet1").Range("I1:AM" & Cells(Rows.Count, "AM").End(xlUp).Row), Application.WorksheetFunction.Match(x, wb.Worksheets("sheet1").Range("AM1:AM" & Cells(Rows.Count, "AM").End(xlUp).Row).Value, 0), 1) 25 End With 26On Error GoTo 0 27Next 28 29y = Worksheets("result").Cells(Rows.Count, "F").End(xlUp).Row 30For j = 2 To y 31If Cells(j, 7).Value = "" Then 32Cells(j, 6).Value = "3" 33Else: Cells(j, 6).Value = "1" 34End If 35Next 36 37 Dim myDate As Date 38 Dim v As Integer 39 With Worksheets("result") 40 v = .Cells(.Rows.Count, "G").End(xlUp).Row 41 For j = 2 To v 42 Dim strDate As String 43 strDate = Format(.Cells(j, 7).Value, " ####/##/##") 44 If IsDate(strDate) Then 45 .Cells(j, 7).NumberFormat = "yyyy/mm/dd" 46 .Cells(j, 7).Value = CDate(strDate) 47 End If 48 Next 49 End With 50 51End Sub
試したこと
こちらで質問をさせていただき、それぞれのVBA自体は動作するものができたようなのですが、
ひとつのエクセルファイル上で2つのモジュールを動作させようとすると上手くいかない現象が
起こっています。
補足情報(FW/ツールのバージョンなど)
Excel for Microsoft 365 を使用しています。
回答1件
あなたの回答
tips
プレビュー