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

お世話になります。

"picture.jpg" のような文字列から 拡張子を省いた値を
取りだすにはどうすれば良いのでしょうか?

Java でいう str.lastIndexOf(".") や substr()
のような関数はあるのでしょうか?


msdn 関数
http://msdn.microsoft.com/ja-jp/library/32s6akha …

A 回答 (5件)

こんにちは。



  picture.jpg

の picture の部分をベース名と呼びます。これと開発環境をキーワード
に WEB 検索すると参考記事が見つかりますよ。

.NET 環境なら、GetFileNameWithoutExtension メソッドです。

  System.IO.Path.GetFileNameWithoutExtension("picture.jpg")

VB/VBA 環境なら FileSystemObject の GetBaseName を利用するとか。

  Dim fso As Object
  Set fso = CreateObject("Scripting.FileSystemObject")
  MsgBox fso.GetBaseName("picture.jpg")

余談ですが、ベース名と拡張子の切り分けは次の点にご注意を。

1. 拡張子は 3 文字とは限らない
  例)Sample.jpeg、index.html
  --> Left などで3文字前まで、、と単純に切り分けると失敗する
    場合があります。最近では、Office2007 の拡張子が 4 文字に
    なりましたね。また、拡張子が無いファイルもあります。
2. ファイル名に複数のピリオドが有り得る
  例)2008.6.29.xls
  --> 拡張子のピリオド位置をファイル名の前から探すと失敗する
    場合がある。

InStrRev などでファイル名の後ろからピリオドを探すとか、拡張子の
ピリオドが無い場合の処理を追加すれば良いだけですが。

ご参考までに。
    • good
    • 0
この回答へのお礼

丁寧な解説とても勉強になりました
ありがとうございました。

お礼日時:2008/06/30 17:15

環境が書かれてませんが、VB.NET系(私が調べたのは2005(Framework2.0)ですが)


での話を前提として書きます。

>Java でいう str.lastIndexOf(".") や substr()
>のような関数はあるのでしょうか?

Javaは分からないですが、ありますよ。普通にヘルプに載ってます。
substr は SubString ですが。
下の内容をご覧になると分かると思いますが、両方ともStringクラスのメソッドです。
http://msdn.microsoft.com/ja-jp/library/system.s …

なお、こういう聞き方をされているのでお分かりかとは思いますが、
InStr関数ではダメです。
    • good
    • 0
この回答へのお礼

おっしゃる通りドキュメントに載ってましたね
検索が足りませんでした。

環境は Windows Script Host でフォルダ内のファイル名から
html を自動生成するツールを作ろうとしてましたが、うまくいきました。

アドバイスありがとうございました。

お礼日時:2008/06/30 17:17

Left(FileName, InStrRev(FileName, ".", -1, vbTextCompare) - 1)


FileName=XXXXX.jpg

ファイル名に[.]がある場合もあるので、InStr関数で左から「.」を探すのではなく、InStrRev関数で右から「.」を探します。


ユーザ定義関数
Function BookName(Optional Extension As Boolean = True) As String

 Dim FileName As String

 Application.Volatile
 
 FileName = Application.ThisWorkbook.Name
 
 If Extension = True Then
  BookName = FileName
 Else
  BookName = Left(FileName, InStrRev(FileName, ".", -1, vbTextCompare) - 1)
 End If

End Function





なおInStrRev関数は、Excel 2000から使えるようになった関数なので、Excel 97以前のバージョンでは使えません。
    • good
    • 0
この回答へのお礼

丁寧な解説とても勉強になりました
ありがとうございました。

お礼日時:2008/06/30 17:15

Replace 関数


http://msdn.microsoft.com/ja-jp/library/bt3szac5 …

Dim st As String
st = "pic.jpg"
MsgBox Replace(st, ".jpg", "")

こんな感じとか。
    • good
    • 0
この回答へのお礼

シンプルで解りやすいですね
ありがとうございました。

お礼日時:2008/06/30 17:14

こんにちは、



left("filename.jpe",InStr("filename.jpe",".")-1)
結果
filename

関数の組み合わせですが。
    • good
    • 0
この回答へのお礼

アドバイス勉強になりました
ありがとうございました。

お礼日時:2008/06/30 17:14

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