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

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

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

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

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

解決済

vbaでオフィスファイルのプロパティのコメント取得、一部の拡張子を含むファイルの除外(小文字か大文字どちらかに変換して除外)

gaint
gaint

総合スコア4

VBA

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

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

2回答

0評価

0クリップ

714閲覧

投稿2021/12/27 15:58

vbaでオフィスファイル(wordやexcel)などのプロパティからコメントを取得する方法がさっぱりわからず、質問させていただきました。設計書にはbuiltindocumentpropertiesを使ってオフィスファイルからコメントを取得するようにかいてあったので、builtindocumentpropertiesを使ってコメントを取得したいです。

また、拡張子、ファイル名がtmp、temp、bk、bakを含むファイルを大文字または小文字どちらの場合でも除外できる方法も知りたいです。ifのネストで記述していたのですがこれだと可読性が低くなるというご指摘がありました。ifのネスト以外でファイル名や拡張子を判定する処理をfunctionプロシージャを使って処理したいです。

お手数をおかけして申し訳ございませんがわかる方よろしくお願いします。

vba

Option Explicit Sub サブフォルダ含むファイルデータ取得() Dim intIchi As Integer Dim strPath As String intIchi = 2 '開始行 strPath = Worksheets("保管場所").Range("B3").Value 'ファイルパス取得 Sheets("ファイル一覧").Select    ’シート選択 Call ファイル名取得(strPath, intIchi) Call 空欄削除 Call 連番挿入 End Sub Sub ファイル名取得(strPath As String, intIchi As Integer) Dim objFSO As Object, objFile As Object, objsubFolder 'オブジェクト定義 Dim intIchi As Integer Dim strPath As String Dim vntpos As Variant Dim vntfolderpathcontainer As Variant Dim vntfolderpathcontainer2 As Variant Set objFSO = CreateObject("Scripting.FileSystemObject") 'インスタンスの作成 For Each objFile In objFSO.GetFolder(strPath).Files vntpos = InStrRev(objFile.Path, "\")    ’ファイルパス検索 vntfolderpathcontainer = Left(objFile.Path, vntpos - 1)    ’フォルダパス切り出し vntpos = InStrRev(vntfolderpathcontainer, "\")    ’フォルダパス検索 vntfolderpathcontainer2 = Mid(vntfolderpathcontainer, vntpos + 1)    ’フォルダ切り出し Worksheets("ファイル一覧").Cells(intIchi, 1) = objFSO.GetBaseName(objFile.Path) '拡張子なしのファイル名 Worksheets("ファイル一覧").Cells(intIchi, 2) = objFile.DateCreated 'ファイル作成日 Worksheets("ファイル一覧").Cells(intIchi, 3) = objFile.DateLastModified 'ファイル更新日 Worksheets("ファイル一覧").Cells(intIchi, 4) = "" 'コメント Worksheets("ファイル一覧").Hyperlinks.Add Anchor:=Cells(intIchi, 5), Address:=objFile.Path, TextToDisplay:=objFile.Name 'ファイル名ハイパーリンク Worksheets("ファイル一覧").Hyperlinks.Add Anchor:=Cells(intIchi, 6), Address:=strPath, TextToDisplay:=vntfolderpathcontainer2 'フォルダ名ハイパーリンク intIchi = intIchi + 1 Next For Each objsubFolder In objFSO.GetFolder(strPath).SubFolders Call ファイル名取得(objsubFolder.Path, intIchi) Next Set objFSO = Nothing Set objsubFolder = Nothing Set objFile = Nothing End Sub Sub 空欄削除() Dim ListLastRow As Long Dim DeleteRows As Range Dim ws As Worksheet Dim i As Long Set ws = Worksheets("ファイル一覧") '対象シート ListLastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row 'A列を見て最終行を取得 For i = 2 To ListLastRow '2行目から探査 If IsEmpty(ws.Cells(i, 1)) Then 'Rangeに削除対象行を格納 If DeleteRows Is Nothing Then Set DeleteRows = ws.Rows(i).EntireRow Else Set DeleteRows = Union(DeleteRows, ws.Rows(i).EntireRow) End If End If Next If Not DeleteRows Is Nothing Then DeleteRows.Delete '削除対象行が1つでもあれば行削除を実施 End Sub Sub 連番挿入() Dim ListLastRow As Long Dim i As Long Dim number As Long Dim ws As Worksheet Columns("A").Insert number = 1 Set ws = Worksheets("ファイル一覧") ListLastRow = ws.Range("B2").End(xlDown).Row For i = 2 To ListLastRow Cells(i, 1) = number number = number + 1 Next End Sub

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai

2021/12/28 00:13

どこのどういうプロパティからどんなコメントを削除するんでしょうか。 問題が見えません
gaint

2021/12/28 03:11

ファイルを右クリックしたらプロパティという欄が表示されるかと思いますがそこの詳細タブのコメントの欄に書かれている文字列を取得したいです。 わかりにくく申し訳ございません。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。