重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

いつもお世話になります

今、下記のプログラムでファイル一覧を取り出すテストをしていたのですが
拡張子や拡張子を除くファイル名の取り出しをスマートに記述できないかと思い投稿しました

Sub Test5()
Dim MyFile As Object
Dim cnt As Integer
Dim FilePath As String
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

FilePath = "XXXXXXXXX"
cnt = 1
For Each MyFile In FSO.GetFolder(FilePath).Files

' セルにファイル情報を書き出し
Cells(cnt, 1).Value = MyFile.Name ' ファイル名
Cells(cnt, 2).Value = MyFile.DateCreated ' 作成日時
Cells(cnt, 3).Value = MyFile.Size ' ファイルサイズ
Cells(cnt, 4).Value = FSO.GetBaseName(MyFile.Name) ' BaseName
Cells(cnt, 5).Value = FSO.GetExtensionName(MyFile.Name) ' 拡張子

cnt = cnt + 1
Next MyFile

Columns("A:E").AutoFit
Set FSO = Nothing
End Sub

例えば、ファイル名はMyFile.Nameで取得できますがMyFile.BaseNameは出来ませんでした
そこでFSO.GetBaseName(MyFile.Name)にしています、拡張子も同様で何かありそうで
Webで調べてみましたが分かりませんでした

MyFile.??? で拡張子やBaseNameが取れたらスマートなのにと思い相談します
もし分かりましたら教えてください

以上、宜しくお願い申し上げます

A 回答 (2件)

Fileオブジェクト/Fliesコレクションにベースネームや拡張子に関するプロパティはもっていません。



また、FSOにおけるGetBaseNameメソッドようなベースネームを取得するメソッドも持っていませんのでできません。

ただし、あたかもベースネームや拡張子もプロパティとして持っているかのようなふるまいをするようにはできます。

例えば、
標準モジュールで
Myfile.BaseName とすれば、ベース名が返ってくる という感じですね。

VBAの場合だと、クラスモジュールで好みの仕様のクラスを作って、標準モジュールでインスタンスを定義すればそのようにすることはできます。

FSO関連のこともそのクラスに含めることになりますので、標準モジュール側は結構シンプルにはなります(というかそういう風に設計する)

以上が簡単な解決策ですが、正直現在でも結構スマートな方だと思いますので、クラスまで手を出さなくてもいいのではとは思います。

あと、FSOやFileオブジェクトのもつメソッドやプロパティにはどんなものがあるのかは下記を参照されるとよいと思います。

Fileオブジェクト
https://learn.microsoft.com/ja-jp/office/vba/lan …

FSOオブジェクト
https://learn.microsoft.com/ja-jp/office/vba/lan …
    • good
    • 0
この回答へのお礼

いつもお世話になります

早速のご回答に感謝します
参考になりました
これからの開発につなげて行きたいと思います

ありがとうございました
これからもよろしくお願い申し上げます

お礼日時:2025/02/20 17:52

FSO File オブジェクトにはそれらしきプロパティ定義が無い様です


https://learn.microsoft.com/ja-jp/office/vba/lan …

スマートに記述したいのならば、関数定義すれば多少はましかもしれません
FSO.GetBaseName(MyFile.Name)

MyGetBaseName(MyFile)
    • good
    • 0
この回答へのお礼

いつもお世話様です

早速のご回答ありがとうございます
URLありがとうご字ます
参考になります

関数定義も参考になりました
これからもよろしくお願い申し上げます

お礼日時:2025/02/20 17:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A