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 ・・・新着記事一覧を見る

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.条件分岐(Select Case)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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


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