質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

203閲覧

異なる拡張子のファイルのプロパティ情報を一括で出力したい

shibakoppe

総合スコア35

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2024/03/26 23:53

実現したいこと

複数のフォルダ内に1300件ほどあるExcelやWord、PDF、JPGといった異なる拡張子のデータファイルのプロパティ情報を一括で出力したいです。

実現方法が全く分からず、皆様のお力添えをいただけますと幸いです。

発生している問題・分からないこと

フリーソフトを入れることができない状況の為、可能であればVBAで対処したいと考えているのですが、実現方法がわかりません。
調べてみるとOffice系のデータであれば対応可能なコード(下記に記載します)を見つけることができましたが、PDFやJPG等も一括で取得したいです。

該当のソースコード

Sub sample()   Dim i As Long   Dim strFile As String   Dim strPath As String   Dim obj As Object      With Application.FileDialog(msoFileDialogFolderPicker)     .InitialFileName = "C:\"     .AllowMultiSelect = False     .Title = "フォルダの選択"     If .Show = False Then       Exit Sub     End If     strPath = .SelectedItems(1) & "\"   End With      Application.EnableEvents = False '起動時のOpenイベント等を停止   On Error Resume Next 'GetObjectで取得できないファイルの対策   strFile = Dir(strPath)   i = 2   Do While strFile <> ""     Cells(i, 1) = strFile 'ファイル名     Cells(i, 2) = FileDateTime(strPath & strFile) '更新日時     Cells(i, 3) = FileLen(strPath & strFile) 'サイズ     Set obj = GetObject(strPath & strFile)     If Err.Number <> 0 Then       'Officeのドキュメントではないということ       Err.Clear     Else       Cells(i, 4).Value = obj.BuiltinDocumentProperties(3) 'Author       Cells(i, 5).Value = obj.BuiltinDocumentProperties(7) 'Last Author       obj.Close     End If     strFile = Dir()     i = i + 1   Loop   Set obj = Nothing   Application.EnableEvents = True End Sub

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

言葉を変えて検索をしてみましたが、同様の質問を見つけることができませんでした。

補足

最終的に画像のような項目で表形式になるようにしたいです。
宜しくお願い致します。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「プロパティ情報」って何ですか?
出力formを見ると作成者、所有者、作成日、更新日、サイズ ですか?
所有者以外はとれますが、所有者はものによります。
Officeのfileは file のデータの中に それらの情報を持っていますが他のものは必ずしも、なので
例えば下のようなのは?
作成者が採れるかどうかは相手次第ですが。

chatGPT

1Sub GetFileInfo() 2 Dim filePath As String 3 Dim fileSystem As Object 4 Dim file As Object 5 6 ' ファイルのパスを指定します 7 filePath = "C:\Path\To\Your\File.xlsx" 8 9 ' FileSystemObject を作成します 10 Set fileSystem = CreateObject("Scripting.FileSystemObject") 11 12 ' ファイルが存在することを確認します 13 If fileSystem.FileExists(filePath) Then 14 ' ファイルオブジェクトを取得します 15 Set file = fileSystem.GetFile(filePath) 16 17 ' ファイルのプロパティから作成者情報を取得します 18 Dim createdDate As Date 19 Dim modifiedDate As Date 20 Dim owner As String 21 Dim createdUser As String 22 23 createdDate = file.DateCreated 24 modifiedDate = file.DateLastModified 25 owner = file.owner 26 27 ' 作成者情報を取得する 28 createdUser = GetFileCreator(filePath) 29 30 ' メッセージボックスに情報を表示します 31 MsgBox "作成者: " & createdUser & vbCrLf & _ 32 "作成日: " & createdDate & vbCrLf & _ 33 "更新日: " & modifiedDate & vbCrLf & _ 34 "所有者: " & owner 35 36 Else 37 MsgBox "ファイルが見つかりません。" 38 End If 39End Sub 40 41Function GetFileCreator(ByVal filePath As String) As String 42 Dim fileAttributes() As String 43 Dim shell As Object 44 Dim objFolder As Object 45 Dim objFile As Object 46 47 Set shell = CreateObject("Shell.Application") 48 Set objFolder = shell.Namespace(GetParentFolder(filePath)) 49 Set objFile = objFolder.ParseName(GetFileName(filePath)) 50 51 If Not objFile Is Nothing Then 52 ReDim fileAttributes(1 To 266) 53 For i = 0 To 266 54 fileAttributes(i + 1) = objFolder.GetDetailsOf(objFile, i) 55 Next i 56 End If 57 58 GetFileCreator = fileAttributes(20) ' 作成者情報のインデックス番号は20です 59End Function 60 61Function GetParentFolder(ByVal filePath As String) As String 62 GetParentFolder = Left(filePath, InStrRev(filePath, "\") - 1) 63End Function 64 65Function GetFileName(ByVal filePath As String) As String 66 GetFileName = Mid(filePath, InStrRev(filePath, "\") + 1) 67End Function

投稿2024/03/27 01:19

winterboum

総合スコア23349

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shibakoppe

2024/03/27 01:27

ご回答いただきありがとうございます。 >>プロパティ情報 ファイルのプロパティの詳細タブに記載されている情報を抽出したかったのです。 ご提示いただいたコードについて、ファイルのパスを指定されていると思うのですが、 複数の拡張子に対して対応するためには指定をし直す必要があるということでしょうか…?
winterboum

2024/03/27 03:20

ああ、ごめんなさい、「プロパティ情報をとる」ところしかきにしていなかった。 あなたのプログラムの Do While strFile <> "" ループの strFile がそれです。 ループのなかのプロパティを得るところを ' ファイルオブジェクトを取得します ' ファイルのプロパティから作成者情報を取得します ' 作成者情報を取得する にしていただく。 変数名は修正してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問