OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

文字列のなかの最後の文字

  • 困ってます
  • 質問No.221365
  • 閲覧数67
  • ありがとう数7
  • 気になる数0
  • 回答数9
  • コメント数0

宣言した変数にファイルのパスが格納されています。

例:
FileName = "C:\My Documents\test\test.txt"

この文字列から
"test.txt"のみを取り出したいのですが、どうしたら良いのでしょうか?

文字列の一番最後の"\"の位置番号を取得して、次の文字からMIDを使えばいいのかなと思ったのですが、"\"の位置を取得する方法すらわかりません。

もし上記の方法で無理なら代替方法でも構いません。

ちなみにこのパスは毎回違うパスが入ってきます。

よろしくお願いします。
通報する
  • 回答数9
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.5
レベル12

ベストアンサー率 65% (276/422)

一通り、考えられるパターンが出揃っているみたいなので、皆さんの発言ついて補足です。

#1.Mizyuさんの方法が、昔ながらの処理のです。ぼくもこの方法がよいと思います。

#2.josyo_mさんの方法と#4.bin-chanさんの方法は、VB6もしくはOffice2000以降の製品の関数だと思いますので、使用については環境によります。(質問に環境を書くようにしましょうね。)

#3.promeさんの方法は、すでに存在しているファイルでしか使用できないのでは?
もし確実にファイルが存在しているのであれば、FileSystemObject(FSO)を使用してもかまわないと思います。
(いつも述べていますが、インストールされているIEのバージョンによって、FSOは使えません。)
そのような限定条件のもとであれば、この場合はFSOを使用してもいいと思います。
(さらに追記で、FSOを使用すべきではないパターンとしては、ルートディレクトリをFSOで参照することです。ルートに存在するフォルダ以下のサブフォルダの数などの情報を得たりする場合があり、負荷がかかる恐れがあります。PGの設計次第ですが・・・)
-PR-
-PR-

その他の回答 (全8件)

  • 回答No.3
レベル10

ベストアンサー率 32% (64/196)

file system objectを使うともっと簡単です。 以下のように使います。 Dim Fname As String Set fs = CreateObject("Scripting.FileSystemObject") Fname = fs.GetFileName(Filename) Set fs = Nothing するとFnameにtest.txt ...続きを読む
file system objectを使うともっと簡単です。
以下のように使います。

Dim Fname As String

Set fs = CreateObject("Scripting.FileSystemObject")
Fname = fs.GetFileName(Filename)
Set fs = Nothing

するとFnameにtest.txtが入ります。


  • 回答No.2
レベル9

ベストアンサー率 63% (28/44)

お疲れ様です。 ファイル名の後ろから"\"を探せばいいのではないでしょうか。 その時に「InStrRev」を使うと後ろから文字を探してくれます。 (例   Dim パス As String   Dim ファイル名 As String   Dim 位置 As Long   パス = "C:\My Documents\test\test.txt&q ...続きを読む
お疲れ様です。

ファイル名の後ろから"\"を探せばいいのではないでしょうか。 その時に「InStrRev」を使うと後ろから文字を探してくれます。

(例

  Dim パス As String
  Dim ファイル名 As String
  Dim 位置 As Long

  パス = "C:\My Documents\test\test.txt"

  位置 = InStrRev(パス, "\") '// 後ろから文字を検索
  ファイル名 = Right$(パス, Len(パス) - 位置) '// ファイル名が入る

(結果
  ファイル名 = "test.txt"

間違っていたらごめんなさい。
補足コメント
noname#14562

すみません、VisualBasicのカテゴリに投稿してしまいましたが、実はExcel97のVBAを使っています。
そのためかどうかはわからないのですが、InStrRevを使うと「SubまたはFunctionが定義されていません」とエラー表示されてしまいます・・・。
投稿日時 - 2002-02-20 12:15:12
お礼コメント
noname#14562

皆さんありがとうございました。
プログラム一つ作るにも色々と頭を使うものなのですね。
これからもっと精進したいと思います。
投稿日時 - 2002-02-26 22:43:33
  • 回答No.1
レベル12

ベストアンサー率 41% (245/593)

文字列の後ろから一文字ずつ取得して「\」の場所を検索してみては? dim i as integer for i = 1 to len(FileName) if Mid(FileName,len(FileName) - i,1) = "\" then exit end if Next でiの値が最後の\の位置ですね。 (テスト未なので ...続きを読む
文字列の後ろから一文字ずつ取得して「\」の場所を検索してみては?

dim i as integer

for i = 1 to len(FileName)
if Mid(FileName,len(FileName) - i,1) = "\" then
exit
end if
Next

でiの値が最後の\の位置ですね。

(テスト未なのでコードそのままではエラーかもしれません。ご了承を)
お礼コメント
noname#14562

ありがとうございます。

うまく動きました。
Mizyuさんの仰るとおり、ループで回す方法が良いのかもしれませんね。

InStrのような関数は存在ものなのでしょうか・・・。
投稿日時 - 2002-02-20 12:40:58
  • 回答No.4
レベル14

ベストアンサー率 33% (1403/4213)

文字列分割コマンド「SPLIT」はいかがですか? Dim strDataArrey() As String Dim intDataCount As Integer strDataArrey()=Split(FineName,"\") intDataCount=UBound(strDataArrey()) これでstrDataArrey(intDataCount ...続きを読む
文字列分割コマンド「SPLIT」はいかがですか?

Dim strDataArrey() As String
Dim intDataCount As Integer

strDataArrey()=Split(FineName,"\")
intDataCount=UBound(strDataArrey())

これでstrDataArrey(intDataCount)に"test.txt"に入ります。
お礼コメント
noname#14562

皆さんありがとうございました。
プログラム一つ作るにも色々と頭を使うものなのですね。
これからもっと精進したいと思います。
投稿日時 - 2002-02-26 22:41:49
  • 回答No.6
レベル14

ベストアンサー率 28% (4323/15250)

考えたそのままのロジックでやって見ました。 他の例でも小生は良く使います。 InstrRevはVBAでは、使えないようですね。 Sub aaa001() pm = 1 s = "c:\aaaa\bbbbb\cccc\dddd.txt" For i = 1 To 7 p = InStr(pm, s, "\") '------ If p = ...続きを読む
考えたそのままのロジックでやって見ました。
他の例でも小生は良く使います。
InstrRevはVBAでは、使えないようですね。
Sub aaa001()
pm = 1
s = "c:\aaaa\bbbbb\cccc\dddd.txt"
For i = 1 To 7
p = InStr(pm, s, "\")
'------
If p = 0 Then
l = Len(s) - pm + 1
x = Mid(s, pm, l)
Exit For
End If
'------
MsgBox p
pm = p + 1
Next i
MsgBox x
End Sub
お礼コメント
noname#14562

皆さんありがとうございました。
プログラム一つ作るにも色々と頭を使うものなのですね。
これからもっと精進したいと思います。
投稿日時 - 2002-02-26 22:42:47
  • 回答No.8
レベル12

ベストアンサー率 65% (276/422)

>TAGOSAKU7さんのお名前は、何度となくお見受けしたように思います。 ありがとうございます。 _(。ω。)_ >>すでに存在しているファイルでしか使用できないのでは? >まあその前にDir関数でファイルの有無を調べておけばいいわけです。 すでに存在しているファイル"c:\1.txt"を扱うのであれば、たしかにそうですね。 ただ、それではやはり使用状況が限 ...続きを読む
>TAGOSAKU7さんのお名前は、何度となくお見受けしたように思います。
ありがとうございます。 _(。ω。)_


>>すでに存在しているファイルでしか使用できないのでは?
>まあその前にDir関数でファイルの有無を調べておけばいいわけです。
すでに存在しているファイル"c:\1.txt"を扱うのであれば、たしかにそうですね。
ただ、それではやはり使用状況が限定されてしまいます。

たとえば、ファイルの保存ダイアログを表示するとします。
上書きではなく新規保存であれば、ダイアログから得るファイルフルパスに、まだファイルは存在していません。
その得たファイルフルパスをファイル名とパスに分割するには、FSOが使えなくなってしまうのです。
(ダミーでファイルを作成すると言う手もありますが・・・二度手間になりますよね・・・)
汎用性の高い関数を作成するには、この場合は不向きに思います。
(前にも述べたように、限定であればOKだと思います。)

何となく、僕の発言はFSOを毛嫌いしているようにとらわれると困るのですが、実際にFSOを使用したりもします。
一般ユーザ向けパッケージではなく、納品先がきちんと決まっている商用の開発で、ファイルのコピーなどには、使ったりもします。
ですので、FSOの全てを否定しているのではないので、ご勘弁ください。

>私が質問するのもなんですが、IEのどのバージョンが使えないのでしょうか?
このことには以前にお答えしております。そちらをご覧ください。
(結局は忘れたという締めで、申し訳ないですが・・・)
お礼コメント
noname#14562

皆さんありがとうございました。
プログラム一つ作るにも色々と頭を使うものなのですね。
これからもっと精進したいと思います。
投稿日時 - 2002-02-26 22:40:57
  • 回答No.7
レベル10

ベストアンサー率 32% (64/196)

TAGOSAKU7さんのお名前は、何度となくお見受けしたように思います。 >すでに存在しているファイルでしか使用できないのでは? まあその前にDir関数でファイルの有無を調べておけばいいわけです。 (改行位置を変えました_ _) >いつも述べていますが、インストールされているIEのバージョンによって、 >FSOは使えません。) 私が質問するのもなんですが、IEのどのバージョ ...続きを読む
TAGOSAKU7さんのお名前は、何度となくお見受けしたように思います。

>すでに存在しているファイルでしか使用できないのでは?

まあその前にDir関数でファイルの有無を調べておけばいいわけです。

(改行位置を変えました_ _)
>いつも述べていますが、インストールされているIEのバージョンによって、
>FSOは使えません。)

私が質問するのもなんですが、IEのどのバージョンが使えないのでしょうか?

>FSOを使用すべきではないパターンとしては

この部分は知りませんでした。ありがとうございます。
  • 回答No.9
レベル10

ベストアンサー率 32% (64/196)

>たとえば、ファイルの保存ダイアログを表示するとします。    :    : >汎用性の高い関数を作成するには、この場合は不向きに思います。 汎用性の高い関数というのは、あまり作ったことがなかったので、 思いもよりませんでした。 いろいろ教えていただきありがとうございます。 184434のご回答、拝見しました。 IE4以降だったら、私の場合は大丈夫です。 まあ、この件も汎用性 ...続きを読む
>たとえば、ファイルの保存ダイアログを表示するとします。
   :
   :
>汎用性の高い関数を作成するには、この場合は不向きに思います。

汎用性の高い関数というのは、あまり作ったことがなかったので、
思いもよりませんでした。
いろいろ教えていただきありがとうございます。

184434のご回答、拝見しました。
IE4以降だったら、私の場合は大丈夫です。
まあ、この件も汎用性の高い関数云々を言えば、使えないことになりますね。
お礼コメント
noname#14562

皆さんありがとうございました。
プログラム一つ作るにも色々と頭を使うものなのですね。
これからもっと精進したいと思います。
投稿日時 - 2002-02-26 22:40:26
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ