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

VBAを100本の練習問題で鍛えます
公開日:2021-02-05 最終更新日: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


VBA作成タイム

この下に頂いた回答へのリンクと解説を掲載しています。
途中まででも良いので、できるだけ自分でVBAを書いてみましょう。


他の人の回答および解説を見て、書いたVBAを見直してみましょう。


頂いた回答

解説

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)
・組み込みドキュメントプロパティ(BuiltinDocumentProperties) ・組み込みドキュメントプロパティを一覧出力 ・組み込みドキュメントプロパティの値を変更する ・組み込みドキュメントプロパティを消去する ・ ・ユーザー設定のドキュメントプロパティを一覧出力 ・ユーザー設定のドキュメントプロパティを追加する ・ユーザー設定のドキュメントプロパティを削除する
第119回.ファイルシステムオブジェクト(FileSystemObject)|VBA入門
・FileSystemObjectオブジェクトの使用方法 ・FileSystemObjectオブジェクトのプロパティとメソッド ・FileSystemObjectオブジェクトのメソッドの戻り値 ・FileSystemObjectオブジェクトの使用例 ・FileSystemObjectオブジェクトの関連記事と実践例




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

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


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

第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方 |生成AI活用研究(2025-05-20)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する! |生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)
すぐに使える!生成AI プロンプト作成 実践ガイド|生成AI活用研究(2025-05-15)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門




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


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



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