以前、同様の質問をしたのですが、共有フォルダからファイル名+更新日の抽出する方法をご教示しただいたのですが、30分以上かかっても終わりませんでした・・・・(数が10000以上あるからかと思いますが。。。。)教えていただいたのに申し訳ありません。。。
改めて、更新日は不要にして、ある共有フォルダからファイル名をエクセルに出力する方法を教えていただけませんでしょうか?
B1セルには"ファイル名"というTITELが入っているので
B2セルより下(B2、B3、B4~)にファイル名を記載していくような構文です。
※Dir関数、もしくはそれより早い方法があれば、そちらでも構いません。
よろしくお願いします。
No.5
- 回答日時:
以前の質問がどんなものか知らないのですが、ファイルパスじゃなくてファイル名が知りたいってことは、サブフォルダーまでは掘らないってことでしょうかね。
常套手段の FileSystemObject を使いましたが、「以前の回答では処理が遅かった」 というのはコレですかね。
Sub GetFileNames()
Dim wSheet As Worksheet
Set wSheet = ThisWorkbook.Worksheets(1)
Dim rowIndex As Long
rowIndex = 2
Dim fso As Object ' Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Dim root As Object ' Scripting.Folder
Set root = fso.GetFolder("E:\お仕事")
Dim f As Object ' Scripting.File
For Each f In root.Files
wSheet.Cells(rowIndex, 1).Value = f.Name
wSheet.Cells(rowIndex, 2).Value = f.DateLastModified
rowIndex = rowIndex + 1
Next
End Sub
既存の Excel ファイルのシートに直接出力するのではなく、CSV ファイルを生成するのでよろしければ PowerShell で一瞬なんですけどね。
Get-ChildItem -Force * | Where-Object { ! $_.PSIsContainer } | Select-Object Name, LastWriteTime | Export-Csv E:\tmp\Files.csv -Encoding Default
No.4
- 回答日時:
No.1です。
元の質問のNo.3さんのプログラムに改良を行ってみました。
変更内容
テキストファイルの書き出さず、メモリ内で処理させる。
セルへの書き出し時にScreenUpdatingを禁止する
これで多少は改善されると期待しますが、元の質問のNo.3さんのプログラムで30分以上かかるということは、もっと他に考慮すべきポイントがあるかもしれません。
あと、ネットワーク上のフォルダを対象とするDir関数の使用は、以前挙動不審の動作でひどい目にあったことがあるので、個人的にはお勧めしません。
使用にあたっての前提
・A1セルに共有フォルダのパスが記載されていること
・記録先セルの事前クリアはしていません
・ファイル名、更新日時の記録開始セルの行と列をプログラム内で指定しておく
(以下は、名前:B2セル、更新日時:C2セルを設定しています)
----------------------------------------------
Sub Pdflistup()
Const nameRow = 2 ' 名前記入開始行
Const nameCol = 2 ' 名前記入列(B列)
Const dateRow = 2 ' 更新日時開始行
Const dateCol = 3 ' 更新日時記入列(C列)
Dim fso As Object
Dim files As Object
Dim file As Object
Dim folderPath As String
Dim rng As Range
Dim names() As Variant
Dim mDate() As Variant
ReDim Preserve names(0)
ReDim Preserve mDate(0)
folderPath = Range("A1").Value: 'セルA1にフォルダーのパスがあるということなので。
Set fso = CreateObject("Scripting.FileSystemObject")
Set files = fso.GetFolder(folderPath).files
For Each file In files
names(UBound(names)) = CStr(file.Name)
mDate(UBound(mDate)) = CDate(file.DateLastModified)
ReDim Preserve names(UBound(names) + 1)
ReDim Preserve mDate(UBound(mDate) + 1)
Next
ReDim Preserve names(UBound(names) - 1)
ReDim Preserve mDate(UBound(mDate) - 1)
Set fso = Nothing
Set files = Nothing
Set file = Nothing
Application.ScreenUpdating = False
Dim i As Long
For i = 0 To UBound(names)
Cells(nameRow + i, nameCol).Value = names(i)
Cells(dateRow + i, dateCol).Value = mDate(i)
Next
Application.ScreenUpdating = True
MsgBox ("処理が完了しました。")
End Sub
No.2
- 回答日時:
一応参考までに
新規のファイルにボタンを配置
Sub ボタン1_Click()
buf = Dir(ThisWorkbook.Path & "\*.xlsx")
i = 2
Do While buf <> ""
Range("B" & i).Value = buf
i = i + 1
buf = Dir()
Loop
End Sub
を借りつけて閉じる。
検索したい共有フォルダに名前を付けて保存
その際には、マクロ有効ブック(拡張子 xlsm)で
ボタンをクリックすると、同じフォルダー内のエクセルファイル(拡張子 xlsx)の一覧が
B列に出来ます。
No.1
- 回答日時:
> 30分以上かかっても終わりませんでした
作業の頻度がよくわかりませんが、以下の方法の方が速くないですか?
VBAは使用しません。
1.対象の共有フォルダをネットワークドライブに割り当てて(例えばZドライブ)
2.下記一行のfilelist.batをメモ帳でexcelファイルのある場所に作成して、ダブルクリック
-----filelist.bat ←共有フォルダのファイルリストを同じフォルダに作成
dir Z:\ /B /A-D > list.csv
-----
3.作成されたlist.csvをexcelで開いて、本来必要なシートにコピペする。
参考:
ネットワークドライブの割り当て って何なのよ?
http://cryingsun-system.com/shorttime5/network.h …
※他にも情報はあると思います
「ネットワークドライブ 割り当て」などで検索してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/01 12:54
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Visual Basic(VBA) vbaサブフォルダーをワイルドカードで取得したい 2 2022/11/15 08:04
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
DataGridViewの各セル幅を自由...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
EXCELで変数をペーストしたい
-
Excel vbaで特定の文字以外が入...
-
Sub 要具ライフ() ActiveSheet....
-
Excel VBA、 別ブックの最終行...
-
【EXCEL VBA】Range("A:A").Fi...
-
特定の文字を条件に行挿入とそ...
-
指定文字以外のカウント
-
VBA実行後に元のセルに戻りたい
-
連続する複数のセル値がすべて0...
-
VBAでセルに値が入ったときにイ...
-
Word版VBで表の任意の箇所を...
-
screenupdatingが機能しなくて...
-
Excelのハイパーリンクにマクロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel VBA】指定行以降をクリ...
-
Excelで指定した日付から過去の...
-
【Excel】指定したセルの名前で...
-
Excel vbaで特定の文字以外が入...
-
特定の文字を条件に行挿入とそ...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
Excelのプルダウンで2列分の情...
-
EXCELで変数をペーストしたい
-
連続する複数のセル値がすべて0...
-
Excel VBA、 別ブックの最終行...
-
VBAを使用した時間管理
-
エクセルVBAでコピーして順...
-
セル色なしの行一括削除
-
【EXCEL VBA】Range("A:A").Fi...
-
VBA コピーして次の値まで貼り...
-
VBA初心者です。結合セルを保持...
おすすめ情報
回答ありがとうございます。
共有フォルダなのですが、アクセスの権限はあるのですが、追加でファイルを保存できない管理設定になっているので、上記の方法ができません。自分のPC内にマクロエクセルファイルがある形でできないでしょうか??