実現したいこと
特定のフォルダに格納されているExcelファイルの特定のセルを読み込んで、別ファイルの一覧表Excelに転記。
格納されているファイルのフォーマットはすべて同じ前提。
初回読み込み後、ファイルの更新日が新しくなっているものは再読み込みを行い、転記済の情報を上書きする。
更新日が同じもの(新しくなっていないもの)は読み込まない。
前提
VBAで以下コードを実装済
VB
1Sub AppendDataToExistingFile() 2 Dim TargetFilePath As String 3 Dim TargetWorkbook As Workbook 4 Dim TargetSheet As Worksheet 5 Dim SourceFolder As String 6 Dim SourceFile As String 7 Dim SourceFileUpdateDate As Date 8 Dim NextRow As Long 9 10 ' 抽出元のフォルダパス 11 SourceFolder = "C:\Users\aaaaaaaaaaaaaaa\OneDrive\デスクトップ\test\" 12 13 ' 既存のExcelファイルパス 14 TargetFilePath = "C:\Users\aaaaaaaaaaaaaaa\OneDrive\デスクトップ\test.xlsm" 15 16 ' 既存のExcelファイル 17 Set TargetWorkbook = Workbooks.Open(TargetFilePath) 18 19 ' 追記するシートを選択(1番目のシート) 20 Set TargetSheet = TargetWorkbook.Sheets(1) 21 22 ' 最終行を特定す 23 NextRow = TargetSheet.Cells(TargetSheet.Rows.Count, 1).End(xlUp).Row + 1 24 25 ' 抽出元のフォルダ内のExcelファイルを走査 26 SourceFile = Dir(SourceFolder & "*.xlsx") 27 28 Do While SourceFile <> "" 29 ' 抽出元ファイルの更新日を取得す 30 SourceFileUpdateDate = FileDateTime(SourceFolder & SourceFile) 31 32 ' 更新日の比較 33 If SourceFileUpdateDate > TargetSheet.Cells(NextRow, 7).Value Then 34 ' 更新日が新しい場合のみデータを読み込む 35 Call ImportDataFromSourceFile(SourceFolder & SourceFile, TargetSheet, NextRow) 36 NextRow = NextRow + 1 37 End If 38 39 ' 次のファイルを取得 40 SourceFile = Dir 41 Loop 42 43 ' 既存のExcelファイルを保存 44 TargetWorkbook.Save 45 46 ' 既存のExcelファイルを閉る 47 TargetWorkbook.Close SaveChanges:=False 48 49 ' 完了メッセージを表示 50 MsgBox "データの追記が完了しました。", vbInformation 51End Sub 52 53Sub ImportDataFromSourceFile(SourceFilePath As String, TargetSheet As Worksheet, NextRow As Long) 54 Dim SourceWorkbook As Workbook 55 Dim SourceSheet As Worksheet 56 Dim SourceValue1 As Variant 57 Dim SourceValue2 As Variant 58 Dim SourceText1 As String 59 Dim SourceText2 As String 60 Dim SourceText3 As String 61 Dim SourceRange As Range 62 Dim SourceText4 As String 63 Dim PasteRangeValue As Range 64 65 ' 抽出元のExcelファイルを開く 66 Set SourceWorkbook = Workbooks.Open(SourceFilePath) 67 Set SourceSheet = SourceWorkbook.Sheets(3) ' 抽出元のシートを指定(3番目) 68 69 ' セル1の抽出 70 SourceValue1 = SourceSheet.Range("W2:Z2").Value 71 ' セル2の抽出 72 SourceValue2 = SourceSheet.Range("W3:Z3").Value 73 ' セル3の抽出 74 SourceText1 = SourceSheet.Range("W43").Value 75 ' セル4の抽出 76 SourceText2 = SourceSheet.Range("B8").Value 77 ' セル5の抽出 78 SourceText3 = SourceSheet.Range("B15").Value 79 ' セル6の抽出 80 Set SourceRange = SourceSheet.Range("U40:Z40") 81 ' 更新日の抽出 82 SourceText4 = Format(FileDateTime(SourceFilePath), "yyyy/mm/dd hh:mm:ss") 83 84 ' データの書き込み 85 TargetSheet.Cells(NextRow, 1).Value = SourceFilePath 86 ' セル1の転記 87 TargetSheet.Cells(NextRow, 2).Value = SourceValue1 88 ' セル2の転記 89 TargetSheet.Cells(NextRow, 3).Value = SourceValue2 90 ' セル3の転記 91 TargetSheet.Cells(NextRow, 4).Value = SourceText1 92 ' セル4の転記 93 TargetSheet.Cells(NextRow, 5).Value = SourceText2 94 ' セル5の転記 95 TargetSheet.Cells(NextRow, 6).Value = SourceText3 96 ' 更新日の転記 97 TargetSheet.Cells(NextRow, 7).Value = SourceText4 98 99 ' セル6の転記 100 Set PasteRangeValue = TargetSheet.Cells(NextRow, 8) 101 PasteRangeValue.Resize(1, SourceRange.Columns.Count).Value = SourceRange.Value 102 103 ' 抽出元のファイルを閉じます 104 SourceWorkbook.Close SaveChanges:=False 105End Sub 106
発生している問題・エラーメッセージ
更新日の新旧にかかわらずすべてのファイルを何度も読み込んでしまいます。
該当のソースコード
上記の通り
試したこと
更新日の比較方法等をいくつか試しましたがNGでした。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/08/14 06:57