VBA練習問題
VBA100本ノック 82本目:ブックのドキュメントプロパティを取得

VBAを100本の練習問題で鍛えます
最終更新日:2021-02-22

VBA100本ノック 82本目:ブックのドキュメントプロパティを取得


フォルダ内の全エクセルファイルのドキュメントプロパティを取得する問題です。


ツイッター連動企画です。
ツイートでの見やすさを考慮して、ブック・シート指定等を適宜省略しています。

VBAテスト用のサンプルデータは、VBA100本ノックの目次ページ からもダウンロードできます。
マクロVBA情報を中心に、エクセル関数・基本操作までサンプルとともに解説。初心者向けの基本から上級者向けの高度な内容までVBAサンプルコードを掲載解説しています。


出題

出題ツイートへのリンク

#VBA100本ノック 82本目
フォルダ内の全てのExcelファイルについて、以下の情報(ドキュメントプロパティ等)を取得しシートへ出力してください。
A列:ファイル名
B列:作成者
C列:更新者
D列:作成日時
E列:更新日時
F列:最終印刷日
G列:サイズ
※フォルダおよび出力シートは任意

マクロ VBA 100本ノック

マクロ VBA 100本ノック


サンプルファイルです。
https://excel-ubara.com/vba100sample/VBA100_82.xlsm
https://excel-ubara.com/vba100sample/VBA100_82.zip


頂いた回答

解説

Officeファイルのプロパティを取得するにはBuiltinDocumentPropertiesを使います。
ファイルを開いて何かするわけではないので、別プロセスで読み込むようにしてみました。
読み取り専用やリンク更新を止めて、なるべく問題なく開けるようにしています。

Sub VBA100_83_01()
  Dim ws As Worksheet: Set ws = ActiveSheet
  ws.Range("A1").CurrentRegion.Offset(1).ClearContents
  
  Dim sPath As String
  With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = ws.Parent.Path & "\"
    If Not .Show Then Exit Sub
    sPath = .SelectedItems(1) & "\"
  End With
  
  Dim fso As New Scripting.FileSystemObject
  Dim objFile As File
  
  Dim xlApp As New Excel.Application
  xlApp.EnableEvents = False
  xlApp.DisplayAlerts = False
  
  Dim wb As Workbook
  Dim i As Long, ary(1 To 7)
  i = 2
  
  On Error Resume Next
  For Each objFile In fso.GetFolder(sPath).Files
    If fso.GetExtensionName(objFile.Path) Like "xls*" Then
      Set wb = xlApp.Workbooks.Open(Filename:=objFile.Path, _
                     UpdateLinks:=0, _
                     ReadOnly:=True, _
                     CorruptLoad:=xlRepairFile)
      ary(1) = objFile.Name
      ary(2) = wb.BuiltinDocumentProperties.Item(3)  '"Author"
      ary(3) = wb.BuiltinDocumentProperties.Item(7)  '"Last author"
      ary(4) = wb.BuiltinDocumentProperties.Item(11) '"Creation date"
      ary(5) = wb.BuiltinDocumentProperties.Item(12) '"Last save time"
      ary(6) = wb.BuiltinDocumentProperties.Item(10) '"Last print date"
      ary(7) = objFile.Size
      ws.Cells(i, 1).Resize(, 7) = ary
      wb.Close False
      i = i + 1
    End If
  Next
  
  xlApp.Quit
  Set xlApp = Nothing
  Set fso = Nothing
  MsgBox "完了"
End Sub


印刷していない場合は印刷日の取得でエラーになってしまいます。
また、サイズだけは別途取得する必要があるのがどうも面倒ですよね。
BuiltinDocumentPropertiesのインデックスおよびプロパティ名については、補足に記載しました。


sPath = .SelectedItems(1) & "\"
この、& "\"、これはなくても良いです。


補足

プロパティの一覧だけ掲載しておきます。
使い方等については、この下の関連ページを参照してください。

プロパティ一覧
インデックス プロパティ名 和名
1 Title タイトル
2 Subject 件名
3 Author 著者
4 Keywords キーワード
5 Comments コメント
6 Template テンプレート
7 Last author 最後の作者
8 Revision number 改訂番号
9 Application name アプリケーション名
10 Last print date 最終印刷日
11 Creation date 作成日
12 Last save time 最終保存時間
13 Total editing time 合計編集時間
14 Number of pages ページ数
15 Number of words 言葉の数
16 Number of characters 文字数
17 Security セキュリティ
18 Category カテゴリー
19 Format フォーマット
20 Manager 部長
21 Company 会社
22 Number of bytes バイト数
23 Number of lines 行数
24 Number of paragraphs 段落数
25 Number of slides スライド数
26 Number of notes ノート数
27 Number of hidden Slides 隠しスライドの数
28 Number of multimedia clips マルチメディアクリップの数
29 Hyperlink base ハイパーリンクの基点
30 Number of characters (with spaces) 文字数(スペースを含む)
31 Content type コンテンツタイプ
32 Content status コンテンツステータス
33 Language 言語
34 Document version 文書バージョン


サイト内関連ページ

ドキュメントプロパティ(BuiltinDocumentProperties,CustomDocumentProperties)
ブックのドキュメントプロパティには、組み込みドキュメントプロパティとユーザー設定のドキュメントプロパティがあります。VBAで扱うときは、それぞれ以下のコレクション・オブジェクトを使います、BuiltinDocumentProperties, CustomDocumentProperties これらは、
第119回.ファイルシステムオブジェクト(FileSystemObject)|VBA入門
FileSystemObjectオブジェクトでは、コンピュータのファイルシステムへのアクセスが提供されています。VBAに用意されているファイル操作関連のステートメントや関数より、より強力で、より多くの機能が搭載されています。ただし機能が大変多いため、これらを全て覚えるという事は困難です。




同じテーマ「VBA100本ノック」の記事

79本目:Wordにセル範囲を図として挿入
80本目:読み取り専用で保存できないブックにする
81本目:全フィルターの絞り込解除
82本目:ブックのドキュメントプロパティを取得
83本目:請求書を作成してPDF出力
84本目:ブックの自動バックアップ
85本目:請求日から入金予定日を算出
86本目:全シートの総当たり表を作成
87本目:数式のシート間の依存関係
88本目:クロスABC分析作成
89本目:2つのフォルダの統合


新着記事NEW ・・・新着記事一覧を見る

VBA100本ノック 93本目:複数ブックを連結して再分割|VBA練習問題(2月22日)
VBA100本ノック 92本目:セルの色を16進で返す関数|VBA練習問題(2月20日)
VBA100本ノック 91本目:時間計算(残業時間の月間合計)|VBA練習問題(2月19日)
VBA100本ノック 90本目:セルに重なっている画像の削除|VBA練習問題(2月17日)
VBA100本ノック 89本目:2つのフォルダの統合|VBA練習問題(2月16日)
VBA100本ノック 88本目:クロスABC分析作成|VBA練習問題(2月15日)
VBA100本ノック 87本目:数式のシート間の依存関係|VBA練習問題(2月13日)
VBA100本ノック 86本目:全シートの総当たり表を作成|VBA練習問題(2月12日)
VBA100本ノック 85本目:請求日から入金予定日を算出|VBA練習問題(2月10日)
VBA100本ノック 84本目:ブックの自動バックアップ|VBA練習問題(2月9日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ