『フォルダ内のファイル名から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
返信が遅くなり申し訳ございません。
おっしゃる通りの内容です。
階層が中途半端ですみません、ご指摘いただいたように5階層あるデータのため省いてしまいました。
ですが!!
お二人のいただいたデータで、こちらに合うように修正させていただき、動作確認いたしました。
希望通りのものができました!
大変感謝しております。
ありがとうございます!
(初心者) 2025/09/02(火) 14:36:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.