
No.3ベストアンサー
- 回答日時:
こんばんは。
本日、共有フォルダ(一部無線LANでの中継アリ)でいくつかテストしたのですが直接セルに取得した値を入力していくとかなり遅くなるようですね。
そこで、自分のPCのCドライブ直下に作業用のテキストファイルをつくり、そこにフォルダ内のファイルと更新日時をフィルタリングせずにずらっと書き込み。
それをExcelで、不要ファイルは無視しつつセルに入力していく、、という手法にしてみました。
ここでいう不要ファイルはMacから共有フォルダに書き込んだ際に出来ることがある、”.”で始まる隠しファイルの事です。
ちなみに、820個のファイルがある共有フォルダで、ワークテキスト作成が約20秒、それをExcelのセルに入力するのが「ほんの一瞬」です。
ファイルのなら並びはおそらくファイル名の昇順となっているようですが、そういったソート方法の変更もExcelに読み込んだのちに処理したほうが良いと思います。
ソート範囲の指定は、コードにもありますが、Range("A3", Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2))というようなレコード数によって可変となるようにすれば大丈夫だと思います。
作業用テキストファイルは、該当するファイルが無い場合は新規で作りますし、既存の場合は、前回分はクリアされたうえで書き込まれます。
ファイルの設定場所は自分のPC上で権限ある場所ならどこでも構いません。
また、タブ区切りのテキストしているので、作業用テキストファイルを開いて全選択してコピー、A3セルをクリックした状態でペーストしても(不要ファイル除去を除いては)同じ結果が得られます。
ギリギリ現実な速度かなと思いますが、一度試されてみてください。
----以下 ソース---
Sub Pdflistup()
FolderPath = Range("A1").Value: 'セルA1にフォルダーのパスがあるということなので。
WText = "C:\WorkText.txt": '作業用テキストファイル
'該当フォルダにあるファイルの名称と更新日時を作業用テキストファイルに書き込む
Set FileSys = CreateObject("Scripting.FileSystemObject")
Set FileObj = FileSys.GetFolder(FolderPath).Files
Set WorkText = FileSys.CreateTextFile(WText, True)
For Each PdfObj In FileObj
With PdfObj
WorkText.WriteLine (.Name & Chr(9) & .DateLastModified): '名称(タブ)更新日時の形で書き込み
End With
Next
WorkText.Close
Set FileSys = Nothing
'作業用テキストファイル作成処理完了
'セルの値をクリア(A3~Bの最終行まで)
Range("A3", Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2)).Clear
'WorkText.txtを開き、一行ずつセルに入力(ファイル名はA3から、更新日時はB3から)
Open WText For Input As #1
n = 3: '入力開始行
Do Until EOF(1)
Line Input #1, Tline
Tvalue = Split(Tline, Chr(9)): 'テキストをタブで分割(一次配列格納)
If Not Left(Tvalue(0), 1) = "." Then
Cells(n, 1).Value = Tvalue(0): 'n行A列にファイル名を入力
Cells(n, 2).Value = Tvalue(1): 'n行B列に更新日を入力
n = n + 1
End If
Loop
Close #1
'セル書き込み作業完了
MsgBox ("処理が完了しました。")
End Sub
No.2
- 回答日時:
shut0325です。
補足見ました。今自宅なので、共有フォルダにアクセスする場合でのレスポンステストが出来ないのですが、DIR関数では、作成日時や更新日時などのプロパティが取得できません。
Dir関数とFileSystemObjectの共用も含め、高速処理できるための幾つかアプローチを試してみたいので、数日お時間下さい。
ちなみに該当フォルダにはどの程度の書類数(PDF以外も含め)があるのでしょうか。
shut0325様>
補足確認ありがとうごうございます。
ネットワーク上の共有フォルダ内に”pdf”のみが10000個くらい入っています。(日々増える形)
日々の作業であるため、できるだけ早い高速処理を希望します。
お忙しいとは思いますが、よろしくお願いします。
No.1
- 回答日時:
ファイル関連の事はFileSytemObjectというVBA外のオブジェクトのインスタンスを作って作業します。
このFileSytemObjectはVBSやVBでも良く使います。
下記の例ではCドライブ直下にfilesという名前のフォルダがあり、その中に該当のpdfファイルが入っている想定です。
該当のフォルダがある場所に書き換えてください。(フルパス)
また、B列には作成日時を、C列には更新日時としていますので、適時書き換えてください。
Sub Pdflistup()
Dim FileSys As Object
Set FileSys = CreateObject("Scripting.FileSystemObject")
'Cドライブのfilesフォルダー内の全ファイルオブジェクトを取得
Set FileObj = FileSys.GetFolder("C:\files").Files
i = 3: '3行目からなので
For Each PdfObj In FileObj
'全該当ファイルのうち、ファイルタイプがPDF(Adobe Acrobat Document)の場合のみセルに値を代入。
If PdfObj.Type = "Adobe Acrobat Document" Then
Range("A" & i).Value = PdfObj.Name: '.Name=ファイル名
Range("B" & i).Value = PdfObj.DateCreated: '.DateCreated=ファイル作成日時
Range("C" & i).Value = PdfObj.DateLastModified: '.DateLastModified=ファイル更新日時
i = i + 1
End If
Next
Set FileSys = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) VBAにてエクセルをpdf化する方法 1 2023/03/10 16:20
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) フォルダAから1つのファイルだけを、フォルダBへを移動するVBAについて 2 2022/07/25 11:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのファイルサイズ
-
タイムスタンプの更新の方法2
-
エクセルVBAでの呼出操作を...
-
Visual C++ 2008 (Win32)を使っ...
-
AccessからExcelファイルのシー...
-
マクロのアラームサウンドについて
-
VB2005でエクセルファイル内...
-
VBSのFor文
-
EXCEL VBAにおけるサンプルコ...
-
フォルダー内の最新更新エクセ...
-
VBA ディレクトリ名をワイルド...
-
大量にあるHTMLファイルのソー...
-
ファイルのアップロードと表示
-
VB2008 Expressで、Excelファイ...
-
エクセルvbaでdocuworksprinter...
-
リストボックスに関連してファ...
-
エクセルのプロパティーでセキ...
-
frxファイルの役目
-
【VBA】テキストファイルを指定...
-
エクセルのショートカットキー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動かなくなってしまった古いVBA...
-
「エクセルファイルが開いてい...
-
FileDialog オブジェクトでファ...
-
VBAでフォルダ内のhtmlファイル...
-
VB6でUTF-8ファイルの読取りを
-
vbaサブフォルダーをワイルドカ...
-
webブラウザからローカルファイ...
-
ffftpでファイル取得が0バイト...
-
サブフォルダ含むフォルダ内の...
-
ファイルを複数選択した時のフ...
-
VBAでCSVファイルを読み込もう...
-
複数のワークブックのVBAを変更...
-
excel マクロ PDF化の際のエラ...
-
Wordのプロパティ・総ページ数...
-
フォルダ階層・ファイル名・ペ...
-
フォルダ内のファイル存在監視...
-
AccessからOLEオブジェクト型の...
-
VB.net XMLの作成方法 Iniの代替
-
【ACCESS VBA】アクセスからデ...
-
vbs ブック共有を解除
おすすめ情報
回答ありがとうございます。
回答を参考に試してみましたが、検索場所が共有フォルダであった為、非常に処理が遅いです。(固まってしまう。)
dir関数を使用すると早いとネット上でありましたが、どのような構文を組めばよろしいでしょうか・・・?