[[20250901101724]] 『フォルダ内のファイル名からExcelリストと照合』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『フォルダ内のファイル名からExcelリストと照合』(初心者)

Excelへ抽出したデータが、フォルダ内に有るか無いかを確認したいです。

フォルダ内のデータをエクセルに抽出して、
関数で照合しようとしましたが、ファイルが大きいため動きが遅くなってしまいます。

VBAが苦手なため、お助けいただければと思い投稿しました。

フォルダ名  C:\Users\Aデータファイル
Excelリスト  ファイル名  抽出データ
        シート名   チェック(A列に品番)


フォルダ名  C:\Users\Aデータファイル 内 A12345
Excelリスト  A列に品番A12345がある場合、該当品番横B列に〇

拙い説明で申し訳ありません。
ご教授いただければ幸いです。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


やりたい事、現在の状況(環境)は
こんな感じであっていますか?

「C:\Users\」というフォルダがあります。
上記フォルダ内に
「Aデータファイル.xls」
「Bデータファイル.xls」


と複数のデータファイルがあります。
全てのデータファイルフォーマットは
「Sheet1」がありA列に品番が入っています。

Excelリスト.xls(マクロ入り)ファイルを作ります。
Excelリスト.xlsには
「チェック」というシートがあります。
「チェック」というシートのA列には品番が入っています。

「Excelリスト.xls」の「チェック」というシートの
A列を上から順番に読み取り、該当品番が、
「Aデータファイル.xls」の「Sheet1」のA列に存在するか
存在した場合は、
「Excelリスト.xls」の「チェック」というシートのB列該当業のセルに"〇"を入れる
存在しない場合は、
「Bデータファイル.xls」の「Sheet1」のA列に存在するか


という様にチェックしていく

(匿名) 2025/09/01(月) 11:19:42


匿名様

ご回答いただきありがとうございます。
Excelファイル内ではなく、Excelファイルの表題名との照合です。
説明が悪く申し訳ございません。

「C:\Users\」というフォルダがあります。
上記フォルダ内に
「A12345.xls」
「A12346.xls」


と複数のデータファイルがあります。
このファイル名と
「Excelリスト.xls」の「チェック」というシートの
A列を上から順番に読み取り、該当品番が、
「A12345.xls」A12345が「Sheet1」のA列に存在するか

存在した場合は、
「Excelリスト.xls」の「チェック」というシートのB列該当業のセルに"〇"を入れる
存在しない場合は、空欄で構いません。

「C:\Users\」というフォルダ内にデータがあるかないかを確認したいリストを作成したいです。

(初心者) 2025/09/01(月) 12:32:04


 チェックシートの1行目に項目、ファイル名はA2から
 ということで

 Sub test()
    Dim myDir$, s$(1), rng As Range, r As Range
    myDir = "C:\Users\"
    Set rng = ThisWorkbook.Sheets("チェック").[a1].CurrentRegion.Offset(1)
    rng.Columns(2).ClearContents
    For Each r In rng.Columns(1).Cells
        If r <> "" Then
            If Dir(myDir & r) = r Then
                s(0) = "'" & myDir & "[" & r & "]sheet1'!"
                If Not IsError(ExecuteExcel4Macro(s(0) & "r1c1")) Then
                    s(1) = CreateObject("Scripting.FileSystemObject").GetBaseName(r)
                    If Not IsNumeric(s(1)) Then s(1) = Chr(34) & s(1) & Chr(34)
                    r(, 2) = ExecuteExcel4Macro("if(isnumber(match(" & s(1) & "," & _
                             s(0) & "r1c1:r50000c1,0)),""〇"","""")")
                End If
            Else
                r(, 2) = "該当ファイル無し"
            End If
        End If
    Next
 End Sub
  
(jindon) 2025/09/01(月) 15:07:21

 # 重なるところが多いですが、書いてしまったので投稿しておきます。

 Excelリスト.xlsm の「チェック」シートのA列に品番が書かれており、
     A列       B列
 1   A12345   
 2   A12346   

 A列の品番に見合うExcelブックが
 C:\Users\Aデータ  フォルダ内にあれば、B列に〇を記入し、なければ未記入とする、
 ということですか?

 ■
 まず、マクロはExcelリストと言うブックに設定するなら、拡張子はxlsmとしたファイルに保存し直してください。
 また、
 ・C:\Users\ファルダは実際にはユーザー名があり、さらに他のサブフォルダもあります。
   実際にファイルがあるフォルダを正確に指定すべきです。
 ・何階層もあるようなサブフォルダを相手にする必要はありません。
   実際にコードを維持するのはあなたなので、簡便な処理ですむように、
   よく実態に合わせたものにしてください。

 ■コードのサンプルは以下のようなものになるでしょう。
 品番ごとに、その見合うファイルがあるかを検証して、それを繰り返せばいいのです。

 Sub main()
     Const dirname As String = "C:\Users\Aデータ\"   ' 終わりに\をつけておきます
     Dim ws      As Worksheet
     Dim filename As String
     Dim k       As Long

     Set ws = ThisWorkbook.Worksheets("チェック")
     For k = 2 To ws.Cells(Rows.Count, "A").End(xlUp).Row
         filename = ws.Cells(k, "A") & ".xlsx"
         If Dir(dirname & filename) <> "" Then
             ws.Cells(k, "B") = "○"
         End If
     Next
 End Sub

 実際の動作確認はしていません。
 考え方を示したものととらえて、そちらで詳細を確認して下さい。
 あなたの環境にあったように修正してください。

(xyz) 2025/09/01(月) 15:18:26


jindon様
xyz様

返信が遅くなり申し訳ございません。
おっしゃる通りの内容です。

階層が中途半端ですみません、ご指摘いただいたように5階層あるデータのため省いてしまいました。

ですが!!
お二人のいただいたデータで、こちらに合うように修正させていただき、動作確認いたしました。
希望通りのものができました!
大変感謝しております。
ありがとうございます!

(初心者) 2025/09/02(火) 14:36:44


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.