• ベストアンサー

VisualBasicでファイル名から拡張子.まで取り除くには?

VBでファイル名から拡張子を取り除く関数を探しています。なにか良い関数はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#7749
noname#7749
回答No.4

InStrRevが使えなかった当時 ( Office97 の時代 )、ファイル処理用にいろいろな文字列関数を作っていました。 下記は、その一例です。 (今見直してみると、FSOで実現できそうな機能が多いのですが......) Option Explicit Public Const DRIVE_UNKNOWN As Long = 0& Public Const DRIVE_NO_ROOT_DIR As Long = 1& Public Const DRIVE_REMOVABLE As Long = 2& Public Const DRIVE_FIXED As Long = 3& Public Const DRIVE_REMOTE As Long = 4& Public Const DRIVE_CDROM As Long = 5& Public Const DRIVE_RAMDISK As Long = 6& Public Enum CommonDialogMode 'コモンダイアログの操作を条件分岐。 FileMode FolderMode End Enum Public Declare Function GetDriveType Lib "kernel32" _ Alias "GetDriveTypeA" (ByVal strDriveLetter As String) As Long 'ファイル名のみの比較。"*.拡張子"の".拡張子"だけを取り除く。 Public Function CutFileExtFromPath(ByVal strFileName As String) As String Dim i As Integer strFileName = Trim$(strFileName) If Len(strFileName) = 0 Then CutFileExtFromPath = "" Exit Function End If '"."が複数含まれる場合もありうるので、右側から、最初の"."を検出。 For i = 1 To Len(strFileName) If Mid$(Right$(strFileName, i), 1, 1) = "." Then '2003/05/18 パスの一部(フォルダ名)に「.」が含まれ、かつファイルに拡張子がない場合の対応。 If InStr(Right$(strFileName, i), "\") = 0 Then strFileName = Mid$(strFileName, 1, Len(strFileName) - i) Exit For End If End If Next CutFileExtFromPath = strFileName End Function 'ファイルの拡張子を取得する。 Public Function GetFileExtName(ByVal strFileName As String) As String Dim i As Integer If Len(strFileName) = 0 Then GetFileExtName = "" Exit Function End If strFileName = Trim$(strFileName) '"."が複数含まれる場合もありうるので、右側から、最初の"."を検出。 '2000/12/21 拡張子がない場合、長さゼロの文字列を返すよう修正。 If Not CutFileExtFromPath(strFileName) = strFileName Then For i = 1 To Len(strFileName) If Mid$(Right$(strFileName, i), 1, 1) = "." Then strFileName = Right$(strFileName, i - 1) Exit For End If Next GetFileExtName = strFileName Else GetFileExtName = "" End If End Function 'フルパス + ファイル名から、パス名のみ取り出す。 Public Function GetFilePathOnly(ByVal vntPathFileName As Variant) As String Dim i As Integer vntPathFileName = Trim$("" & vntPathFileName) If Len(vntPathFileName) = 0 Then GetFilePathOnly = "" Exit Function End If '右側から、最初の"\"を検出し、取り除く。 For i = 1 To Len(vntPathFileName) If Mid$(Right$(vntPathFileName, i), 1, 1) = "\" Then vntPathFileName = Mid$(vntPathFileName, 1, Len(vntPathFileName) - i) Exit For End If Next GetFilePathOnly = vntPathFileName End Function '2001/10/07 関数追加。 'フルパス + ファイル名から、ファイル名のみ取り出す。 '(パスが有効な場合はDir関数でも同等の操作は可能だが、パスが無効な場合は×。 '当関数は、文字列操作のみなので、パス、ファイルの存在有無に関係ありません) Public Function GetFileNameOnlyFromPath(ByVal vntPathFileName As Variant) As String Dim i As Integer vntPathFileName = Trim$("" & vntPathFileName) If Len(vntPathFileName) = 0 Then GetFileNameOnlyFromPath = "" Exit Function End If '右側から、最初の"\"を検出し、取り除く。 For i = 1 To Len(vntPathFileName) If Mid$(Right$(vntPathFileName, i), 1, 1) = "\" Then vntPathFileName = Mid$(vntPathFileName, Len(vntPathFileName) - i + 2) Exit For End If Next GetFileNameOnlyFromPath = vntPathFileName End Function Public Function GetLongFileName(ByVal strShortName As String) As String 'ShortName → LongName に変換する。 Dim strLongName As String Dim strTmp As String Dim intYenSignPos As Integer 'Add \ to short name to prevent Instr from failing If Right$(strShortName, 1) <> "\" Then strShortName = strShortName & "\" End If 'Start from 4 to ignore the "[Drive Letter]:\" characters intYenSignPos = InStr(4, strShortName, "\") 'Pull out each string between \ character for conversion On Error Resume Next While intYenSignPos strTmp = Dir(Left$(strShortName, intYenSignPos - 1), _ vbNormal + vbHidden + vbSystem + vbDirectory) If Err.Number <> 0 Then strTmp = GetFileNameOnlyFromPath(Left$(strShortName, intYenSignPos - 1)) Err.Clear End If If Len(strTmp) = 0 Then GetLongFileName = "" Exit Function End If strLongName = strLongName & "\" & strTmp intYenSignPos = InStr(intYenSignPos + 1, strShortName, "\") Wend On Error GoTo 0 'Prefix with the drive letter If Left$(strShortName, 2) <> "\\" Then GetLongFileName = Left$(strShortName, 2) & strLongName Else GetLongFileName = "\" & strLongName End If End Function Public Function GetRootDriveName(ByVal strFullPath As String) As String '指定パスのルートドライブ名を取得。 '(URLパスにも対応) Dim lngRet As Long Dim i As Long If Len(strFullPath) = 0 Then strFullPath = CodeDb().Name End If lngRet = InStr(strFullPath, "\") If lngRet > 0 Then If lngRet = 1 Then For i = 1 To Len(strFullPath) If Mid$(strFullPath, i, 1) <> "\" Then strFullPath = Mid$(strFullPath, i) Exit For End If Next i lngRet = InStr(strFullPath, "\") If lngRet = 0 Then GetRootDriveName = strFullPath Exit Function End If End If Else lngRet = InStr(strFullPath, "/") Select Case lngRet Case 0 GetRootDriveName = strFullPath Exit Function Case 1 For i = 1 To Len(strFullPath) If Mid$(strFullPath, i, 1) <> "/" Then strFullPath = Mid$(strFullPath, i) Exit For End If Next i Case Else If Mid$(strFullPath, lngRet - 1, 3) = "://" Then strFullPath = Mid$(strFullPath, lngRet + 2) End If End Select lngRet = InStr(strFullPath, "/") If lngRet = 0 Then GetRootDriveName = strFullPath Exit Function End If End If GetRootDriveName = Left$(strFullPath, lngRet - 1) End Function Public Function GetCorrectFileName(ByRef strSourceFileName As String, Optional ByVal Mode As CommonDialogMode = FileMode) As String '******************************************************************************************************** ' '機能概要 : 指定の文字列から、ファイル名、フォルダ名として使用できない文字を取り除く。 ' '引  数 : strSourceFileName 処理対象文字列。 '    Mode 処理モード (省略可能。規定値はファイルモード) ' '戻 り 値 : 変換後文字列。 ' '備  考 : 文字列をフルパスとして扱う場合は、"\"、":"は削除しない。 ' '******************************************************************************************************** Dim strRet As String strRet = strSourceFileName If Mode = FileMode Then strRet = Replace(strRet, "\", "") strRet = Replace(strRet, ":", "") End If strRet = Replace(strRet, "/", "") strRet = Replace(strRet, ",", "") strRet = Replace(strRet, ";", "") strRet = Replace(strRet, "*", "") strRet = Replace(strRet, "?", "") strRet = Replace(strRet, """", "") strRet = Replace(strRet, "<", "") strRet = Replace(strRet, ">", "") GetCorrectFileName = Replace(strRet, "|", "") End Function

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

#1です。「.」が2つ以上ある場合を考慮すると Sub test01() a = "aaa.bbb.ccc.dddd.txt" s = 1 p01: p = InStr(s, a, ".") If p = 0 Then GoTo p02 s = p + 1 GoTo p01 p02: MsgBox Mid(a, 1, s - 2) End Sub 拡張子部分を除いた文字列でName Asする。 こんな質問ではないのかな。

全文を見る
すると、全ての回答が全文表示されます。
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.5

こんにちは。maruru01です。 APIもあります。 拡張子を除く関数は、No.3の方の参考URLのと同じですが、他にもいろいろなパス操作関連のAPIサンプルが載っているサイトを紹介します。 http://www31.ocn.ne.jp/~heropa/vba.htm ここの、[Visual Basic Tips]→[Shell Lightweight Utility APIs]→[パス操作]にいろいろあります。 ご参考までに。

参考URL:
http://www31.ocn.ne.jp/~heropa/vba.htm
全文を見る
すると、全ての回答が全文表示されます。
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

関数を書いてみました。 Function myRemoveExtension(ByVal strFilename As String)   '// パスがあったら除く(最後の『\』を探す)   If InStr(strFilename, "\") <> 0 Then     strFilename = Right(strFilename, Len(strFilename) - InStrRev(strFilename, "\"))   End If   '// 拡張子を除く(『.』を探す)   If InStr(strFilename, ".") = 0 Then     '// 『.』がない場合はなにもしない     myRemoveExtension = strFilename   Else     '// 『.』がある場合は最後の『.』を拡張子部分とする     myRemoveExtension = Left(strFilename, InStrRev(strFilename, ".") - 1)   End If End Function  

参考URL:
http://www.vbvbvb.com/jp/gtips/0201/gPathRemoveExtension.html
全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>p = InStr(a, ".") これじゃだめ。 ファイル名中にピリオドが2つ以上あるときを考慮していない。 InStrRevを使いましょう。 a = "abc.def.txt" MsgBox Left(a, InStrRev(a, ".") - 1)

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

Sub test01() a = "abcdef.txt" p = InStr(a, ".") a = Mid(a, 1, p - 1) MsgBox a End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ファイル名に拡張子を・・・。

    ファイル名に拡張子を見えるようにしたいのですが、 方法が分かりません。 もし良かったら教えてもらえますか??

    • ベストアンサー
    • ADSL
  • ファイル名に拡張子を表示しないには?

    ヘッダーのファイル名の表示について教えて下さい。 Wordを操作しているのですが ファイル名に拡張子が表示されています。 そのため ヘッダーの“定型句の挿入”で“ファイル名”を選択しますと ファイル名のあとに拡張子が表示されます。 ファイル名だけをヘッダーに表示するには どうすればいいのでしょうか? 宜しくお願いいたします。

  • ファイル名または拡張子が長すぎます

    ゲームの体験版をダウンロードし、ファイルを開くをクリックすると 、windowsが出たり消えたりして、15分ぐらいたつと、windowsが消えて、「ファイル名または拡張子が長すぎます」とでます。 どうすればいいでしょう? お願いします。

  • ファイル名から拡張子を削除したい

    WordやExcelのファイル名から拡張子(.docや.xls)を削除すると変なアイコンになってしまいます。 「ファイル名から拡張子を削除してもアイコンは元のまま」にする方法を教えてください。 よろしくお願いします。

  • 変更したファイル名を戻す方法は?(拡張子絡み)

    WinMEのエクスプローラ画面で、あるファイルについてファイル名の変更を行い、その際に拡張子も変更してしまいました。 「拡張子を変更すると...」の警告には「はい」としたため、ファイル名は拡張子も含めて変更されました。 この直後であれば、編集メニュー→「元に戻す」でファイル名は元に戻ると思うのですが、「元に戻す」が使えない場合は、ファイル名の変更で戻すしか方法はありませんか?拡張子を含めてファイル名を覚えていない場合は、元に戻せませんか?何か裏技的な操作はないでしょうか。 教えて下さい。

  • ファイル名または拡張子が長すぎます。

    CDを焼こうとしてメディアプレーヤーへ録音しようと したところ「ファイル名または拡張子が長すぎます。」 と注意画面が出て録音出来ません(TT) 今ひとつ、よく分かりません。 対処法を教えてください。お願いします!!!m(__)m

  • ファイル名を変更すると拡張子を一々聞かれる

     WINMeを使っています。  ファイル名を変更すると、「拡張子を変更するとファイルが使えなくなります」と聞いてきます。  ファイル名の後に拡張子を入れれば問題はないのですが、右クリックして名前を変更すると、拡張子ごと青くなるので、ファイル名変更してそのままEnterをキーを押したいです。わざわざその後、半角で拡張子まで入れるのが非常に面倒です。  拡張子が表示されないようにする方法はありますか?

  • VisualBasicを保存するときにできるvbwファイルができないようにするには?

    VBでプログラムを作ってるときに、 保存時に勝手に拡張子がvbwのファイルができます。 bas や frm の開いたものを記録してるっぽい のですが、このファイルが作られないように することは可能でしょうか?

  • ファイル名の拡張子を表示

    初歩的な質問ですが ファイル名の拡張子を表示 はどうしたらよいですか?

  • logファイルのファイル名と拡張子について・・・

    皆さんにお聞きしたいことがあるのですが。 よくサーバーなどの仕様によって、logファイルなどを直接指定するとそのまま閲覧が出来てしまうことがあるのですが、これらを防ぐ方法としてよく耳にするのが、分かりにくいファイル名にするとか、拡張子を.cgiなどに変えることによって閲覧は出来なくなるとの事ですが本当でしょうか? また、ファイル名と拡張子の変更で、どのくらいのセキュリティーがあるのでしょうか? やはり最善は、非公開領域にlogが来るようにするのがベストなのでしょうか?更に更にで申し訳ないのですが、非公開領域においた場合と、ファイル名拡張子を変更した場合と、公開領域のlogフォルダに認証を書けた場合と何が一番望ましいのですか? 変な質問で申し訳ないのですが、詳しい方おられましたら、教えていただけたら幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • CGI
このQ&Aのポイント
  • 義理の弟の祖母が亡くなり、義理の弟の母親から葬式の花を飾るように頼まれました。
  • どうしたら良いか迷っています。
  • アドバイスをお願いします。
回答を見る