No.5ベストアンサー
- 回答日時:
一通り、考えられるパターンが出揃っているみたいなので、皆さんの発言ついて補足です。
#1.Mizyuさんの方法が、昔ながらの処理のです。ぼくもこの方法がよいと思います。
#2.josyo_mさんの方法と#4.bin-chanさんの方法は、VB6もしくはOffice2000以降の製品の関数だと思いますので、使用については環境によります。(質問に環境を書くようにしましょうね。)
#3.promeさんの方法は、すでに存在しているファイルでしか使用できないのでは?
もし確実にファイルが存在しているのであれば、FileSystemObject(FSO)を使用してもかまわないと思います。
(いつも述べていますが、インストールされているIEのバージョンによって、FSOは使えません。)
そのような限定条件のもとであれば、この場合はFSOを使用してもいいと思います。
(さらに追記で、FSOを使用すべきではないパターンとしては、ルートディレクトリをFSOで参照することです。ルートに存在するフォルダ以下のサブフォルダの数などの情報を得たりする場合があり、負荷がかかる恐れがあります。PGの設計次第ですが・・・)
No.9
- 回答日時:
>たとえば、ファイルの保存ダイアログを表示するとします。
:
:
>汎用性の高い関数を作成するには、この場合は不向きに思います。
汎用性の高い関数というのは、あまり作ったことがなかったので、
思いもよりませんでした。
いろいろ教えていただきありがとうございます。
184434のご回答、拝見しました。
IE4以降だったら、私の場合は大丈夫です。
まあ、この件も汎用性の高い関数云々を言えば、使えないことになりますね。
No.8
- 回答日時:
>TAGOSAKU7さんのお名前は、何度となくお見受けしたように思います。
ありがとうございます。 _(。ω。)_
>>すでに存在しているファイルでしか使用できないのでは?
>まあその前にDir関数でファイルの有無を調べておけばいいわけです。
すでに存在しているファイル"c:\1.txt"を扱うのであれば、たしかにそうですね。
ただ、それではやはり使用状況が限定されてしまいます。
たとえば、ファイルの保存ダイアログを表示するとします。
上書きではなく新規保存であれば、ダイアログから得るファイルフルパスに、まだファイルは存在していません。
その得たファイルフルパスをファイル名とパスに分割するには、FSOが使えなくなってしまうのです。
(ダミーでファイルを作成すると言う手もありますが・・・二度手間になりますよね・・・)
汎用性の高い関数を作成するには、この場合は不向きに思います。
(前にも述べたように、限定であればOKだと思います。)
何となく、僕の発言はFSOを毛嫌いしているようにとらわれると困るのですが、実際にFSOを使用したりもします。
一般ユーザ向けパッケージではなく、納品先がきちんと決まっている商用の開発で、ファイルのコピーなどには、使ったりもします。
ですので、FSOの全てを否定しているのではないので、ご勘弁ください。
>私が質問するのもなんですが、IEのどのバージョンが使えないのでしょうか?
このことには以前にお答えしております。そちらをご覧ください。
(結局は忘れたという締めで、申し訳ないですが・・・)
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=184434
No.7
- 回答日時:
TAGOSAKU7さんのお名前は、何度となくお見受けしたように思います。
>すでに存在しているファイルでしか使用できないのでは?
まあその前にDir関数でファイルの有無を調べておけばいいわけです。
(改行位置を変えました_ _)
>いつも述べていますが、インストールされているIEのバージョンによって、
>FSOは使えません。)
私が質問するのもなんですが、IEのどのバージョンが使えないのでしょうか?
>FSOを使用すべきではないパターンとしては
この部分は知りませんでした。ありがとうございます。
No.6
- 回答日時:
考えたそのままのロジックでやって見ました。
他の例でも小生は良く使います。
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
No.4
- 回答日時:
文字列分割コマンド「SPLIT」はいかがですか?
Dim strDataArrey() As String
Dim intDataCount As Integer
strDataArrey()=Split(FineName,"\")
intDataCount=UBound(strDataArrey())
これでstrDataArrey(intDataCount)に"test.txt"に入ります。
No.3
- 回答日時:
file system objectを使うともっと簡単です。
以下のように使います。
Dim Fname As String
Set fs = CreateObject("Scripting.FileSystemObject")
Fname = fs.GetFileName(Filename)
Set fs = Nothing
するとFnameにtest.txtが入ります。
No.2
- 回答日時:
お疲れ様です。
ファイル名の後ろから"\"を探せばいいのではないでしょうか。 その時に「InStrRev」を使うと後ろから文字を探してくれます。
(例
Dim パス As String
Dim ファイル名 As String
Dim 位置 As Long
パス = "C:\My Documents\test\test.txt"
位置 = InStrRev(パス, "\") '// 後ろから文字を検索
ファイル名 = Right$(パス, Len(パス) - 位置) '// ファイル名が入る
(結果
ファイル名 = "test.txt"
間違っていたらごめんなさい。
この回答への補足
すみません、VisualBasicのカテゴリに投稿してしまいましたが、実はExcel97のVBAを使っています。
そのためかどうかはわからないのですが、InStrRevを使うと「SubまたはFunctionが定義されていません」とエラー表示されてしまいます・・・。
No.1
- 回答日時:
文字列の後ろから一文字ずつ取得して「\」の場所を検索してみては?
dim i as integer
for i = 1 to len(FileName)
if Mid(FileName,len(FileName) - i,1) = "\" then
exit
end if
Next
でiの値が最後の\の位置ですね。
(テスト未なのでコードそのままではエラーかもしれません。ご了承を)
ありがとうございます。
うまく動きました。
Mizyuさんの仰るとおり、ループで回す方法が良いのかもしれませんね。
InStrのような関数は存在ものなのでしょうか・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) MID関数について 2 2022/04/22 09:13
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Java Java 南京錠 2 2023/02/04 11:46
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
バッチファイル 二つ上のディ...
-
xcopyコマンドの進行状況を表示...
-
開いているファイルを削除し、...
-
ExcelVBAの使い方 ¥の使い方...
-
エクセルVBAで一つ上の階層...
-
【VB.NET】App.configにファイ...
-
【VBA】ExcelマクロでCSVファイ...
-
【VB6】デバイスマネージャを表...
-
パスワード保護されたExcelファ...
-
エクセルのマクロで特定フォル...
-
Eclipse
-
SaveAsの保存先について
-
fopenでのパス指定
-
コマンドプロンプトでファイル...
-
AccessからExcel最小化
-
アプリケーションのインストー...
-
【VBA】複数のtxtファイルから...
-
Excel 相対パス
-
VBA★PDFをPDFアプリで印刷し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
Excel 相対パス
-
エクセルVBAで一つ上の階層...
-
xcopyコマンドの進行状況を表示...
-
初心者powershellのPS1ファイル...
-
【VB.NET】App.configにファイ...
-
【VBA】ExcelマクロでCSVファイ...
-
エクセルのマクロで特定フォル...
-
VBA★PDFをPDFアプリで印刷し...
-
パスワード保護されたExcelファ...
-
SaveAsの保存先について
-
ExcelVBAの使い方 ¥の使い方...
-
Windows PowerShellでscoopコマ...
-
開いているファイルを削除し、...
-
VBS パスに変数を入れたい
-
C#でのProcess.Startと変数path
-
コマンドプロンプトのコピー関...
-
EXCEL(VBA)で指定フォルダ内の...
-
実行ファイルのパスを取得したい
おすすめ情報