
以前、同様の質問をしたのですが、共有フォルダからファイル名+更新日の抽出する方法をご教示しただいたのですが、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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA ネットワーク上のファイルでカレントフォルダを取得するには?
Visual Basic(VBA)
-
【Excel VBA】ネットワーク上の共有フォルダにあるExcelを開く
Excel(エクセル)
-
ExcelVBA サーバーの(共有フォルダ)中のファイル移動
Excel(エクセル)
-
-
4
ファイルを閉じたままの外部参照で最終行の行数取得
Visual Basic(VBA)
-
5
VBAでサーバー上のファイルを開く
Excel(エクセル)
-
6
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
7
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
8
【VBA】シート上の複数のチェックボックスのうちどれか一つでも変更した場合のイベント
Visual Basic(VBA)
-
9
Excel に貼り付けた図形が、保存した後、再度、開くと勝手に動いている。
Excel(エクセル)
-
10
VBA 最新のフォルダ取得
Excel(エクセル)
-
11
VBAでの共有パスにつきまして
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【VBA】シート上の複数のチェッ...
-
Excelで指定した日付から過去の...
-
任意フォルダから画像をすべて...
-
i=cells(Rows.Count, 1)とi=cel...
-
エクセルvbaで、別シートの最下...
-
Excel VBA、 別ブックの最終行...
-
Excel VBAで比較して数値があっ...
-
RC表示に変数を入れる
-
特定の文字を条件に行挿入とそ...
-
VBA ユーザーフォーム ボタンク...
-
ExcelのVBAで数字と文字列をマ...
-
【Excel】指定したセルの名前で...
-
Application.Matchで特定行の検索
-
VBA実行後に元のセルに戻りたい
-
エクセル 複数範囲の中の1セル...
-
VBAでセル同士を比較して色付け
-
エクセルvba:自己セルの情報取...
-
セル色なしの行一括削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
特定行の色を変えたい(FlexGrid)
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
エクセルvbaで、別シートの最下...
-
VBA実行後に元のセルに戻りたい
-
Application.Matchで特定行の検索
-
”戻り値”が変化したときに、マ...
-
VBAでセルをクリックする回...
-
任意フォルダから画像をすべて...
-
Excel VBAで、 ヘッダーへのセ...
-
TODAY()で設定したセルの日付...
-
【Excel VBA】指定行以降をクリ...
-
Excel vbaで特定の文字以外が入...
-
ExcelのVBAで数字と文字列をマ...
-
Excel VBA、 別ブックの最終行...
-
DataGridViewの各セル幅を自由...
-
VBA ユーザーフォーム ボタンク...
-
連続する複数のセル値がすべて0...
おすすめ情報
回答ありがとうございます。
共有フォルダなのですが、アクセスの権限はあるのですが、追加でファイルを保存できない管理設定になっているので、上記の方法ができません。自分のPC内にマクロエクセルファイルがある形でできないでしょうか??