
以前、同様の質問をしたのですが、共有フォルダからファイル名+更新日の抽出する方法をご教示しただいたのですが、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)
-
ExcelVBA サーバーの(共有フォルダ)中のファイル移動
Excel(エクセル)
-
【Excel VBA】ネットワーク上の共有フォルダにあるExcelを開く
Excel(エクセル)
-
-
4
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
5
ファイルを閉じたままの外部参照で最終行の行数取得
Visual Basic(VBA)
-
6
VBAでサーバー上のファイルを開く
Excel(エクセル)
-
7
Excel に貼り付けた図形が、保存した後、再度、開くと勝手に動いている。
Excel(エクセル)
-
8
UserForm1.Showでエラーになります。
工学
-
9
VBAでの共有パスにつきまして
Visual Basic(VBA)
-
10
【VBA】シート上の複数のチェックボックスのうちどれか一つでも変更した場合のイベント
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
13箇所の株価をエクセルにRSSで...
-
3桁または4桁の数値を時刻に...
-
蔵書点検をバーコードリーダー...
-
特定のセルが空白だったら、そ...
-
エクセルvbaで、別シートの最下...
-
エクセル2002のVBAで太文字を検...
-
DataGridViewのセルのItem設定...
-
DataGridViewの各セル幅を自由...
-
【エクセルVBA】繰り返し処理の...
-
VBSでエクセル内の行数を取得す...
-
連続する複数のセル値がすべて0...
-
プラスの数をマイナスにしたい...
-
セル色なしの行一括削除
-
vba 隣のセルに値がある行だけ...
-
共有フォルダからのファイル名...
-
Google Apps Script:Googleスプ...
-
エクセルvba:自己セルの情報取...
-
Application.Matchで特定行の検索
-
Excel 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内にマクロエクセルファイルがある形でできないでしょうか??