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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

解決済

vbaのFileSystemobjectでコメントの取得、フォルダ名の表示、一部のフォルダ名、ファイル名、拡張子の除外

gaint
gaint

総合スコア4

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

2回答

0評価

0クリップ

696閲覧

投稿2021/12/21 16:50

現在、excelのvbaでファイルリスト一覧を表示させるプログラムを作成しています。その際に、どのように実装したらよいかネットなどで調べてもわからないので質問させていただきました。当方プログラミング自体ほぼほぼ初心者で分かりやすく解説していただけると大変うれしいです。

実装したいこと

  • for each文のループ中のWorksheets("ファイル一覧").Cells(IRow, 5) = ""ここの""の処理にファイルプロパティからコメントの取得したい。
  • Worksheets("ファイル一覧").Hyperlinks.Add Anchor:=Cells(IRow, 7), Address:=strPath, TextToDisplay:=(フォルダ名)ここの処理の()の部分でフォルダ名を表示させてたい。
  • ファイル一覧を表示させるのですがファイル名、フォルダ名、拡張子が以下の文字を含む場合は除外tmp,temp,bk,bak,~$, - コピー

ソースプログラムはこちらになります。

vba

Option Explicit Public IRow As Variant Public number As Variant Sub サブフォルダを含むファイルデータを取得() IRow = 1 number = 0 Sheets("ファイル一覧").Select Call ファイル名取得("C:\Users\hi610\OneDrive\ドキュメント\temp") End Sub Sub ファイル名取得(strPath As Variant) Dim FSO As Object, Folder As Object, File As Object, objDP As DocumentProperties Set FSO = CreateObject("Scripting.FileSystemObject") For Each File In FSO.GetFolder(strPath).Files If Not number = 4 Then IRow = IRow + 1 number = number + 1 Dim dps As DocumentProperties Dim dp As DocumentProperty Worksheets("ファイル一覧").Cells(IRow, 1).Value = number Worksheets("ファイル一覧").Cells(IRow, 2) = FSO.GetBaseName(File.Path) Worksheets("ファイル一覧").Cells(IRow, 3) = File.DateCreated Worksheets("ファイル一覧").Cells(IRow, 4) = File.DateLastModified Worksheets("ファイル一覧").Cells(IRow, 5) = "" Worksheets("ファイル一覧").Hyperlinks.Add Anchor:=Cells(IRow, 6), Address:=File.Path, TextToDisplay:=File.Name Worksheets("ファイル一覧").Hyperlinks.Add Anchor:=Cells(IRow, 7), Address:=strPath, TextToDisplay:=File.Path Else Exit For End If Next For Each Folder In FSO.GetFolder(strPath).SubFolders Call ファイル名取得(Folder) Next Set FSO = Nothing Set Folder = Nothing Set File = Nothing End Sub

自分で試したこと
フォルダ名を取得する処理ですがfor eachでfilesystemobjectのfilesプロパティを使用しているため、object.Nameではファイル名が表示されてしまう。なので二重ループにして(例:for each ~ .Folders)プロパティをフォルダ名を取得しようとしたがオブジェクトの参照ができなかった

一部の文字を除外することに関しましてはif not Like File.Name Like ".tmp" And File.Name "tmp."とfor each中にネストとしていったが処理が途中で終わってしまう。またこの場合、一部の文字を含むフォルダ名を除外する方法が検討もつかない。

ファイルプロパティからコメントを取得する方法は調べたがよくわからなかった。

現状このような感じです。誰かわかる方いらしたらご回答お願いします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

tatsu99

2021/12/22 08:26

If Not number = 4 Then この行の為、ファイルが4件しか出力されませんが、意図した動作でしょうか。
gaint

2021/12/22 10:03

設計者でレコードの6件目以降はファイル一覧を表示させないという記載があったためこのような処理をしています。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。